|
57 | 57 |
|
58 | 58 | /// Resolve file name for the value of `key`.
|
59 | 59 | fn value_path(&self, key: &str) -> PathBuf {
|
60 |
| - let file_name = Self::encode_key(key); |
| 60 | + let file_name = encode_to_fs_safe(key); |
61 | 61 | self.root_dir.join(file_name)
|
62 | 62 | }
|
63 |
| - |
64 |
| - // Make keys filesystem-safe using hex (conservative, but effective): |
65 |
| - |
66 |
| - pub(crate) fn encode_key(key: &str) -> String { |
67 |
| - let encoded = hex::encode(key); |
68 |
| - format!("x{}", encoded) |
69 |
| - } |
70 |
| - |
71 |
| - // FIXME: Just use a generic String as the error type, for now. |
72 |
| - #[cfg_attr(not(test), allow(dead_code))] // currently only referenced in tests |
73 |
| - pub(crate) fn decode_key(file_name: &str) -> Result<String, String> { |
74 |
| - let encoded: &str = file_name |
75 |
| - .strip_prefix("x") |
76 |
| - .ok_or_else(|| format!("FsStore::decode_key: missing x prefix for {:?}", file_name))?; |
77 |
| - let bytes: Vec<u8> = hex::decode(encoded).map_err(|err| err.to_string())?; |
78 |
| - let decoded = String::from_utf8(bytes).map_err(|err| err.to_string())?; |
79 |
| - Ok(decoded) // |
80 |
| - } |
81 | 63 | }
|
82 | 64 |
|
83 | 65 | impl<F, V> KvStore<V> for FsStore<F>
|
@@ -129,5 +111,23 @@ where
|
129 | 111 | }
|
130 | 112 | }
|
131 | 113 |
|
| 114 | +/// Helper: Make `key` filesystem-safe. |
| 115 | +pub(crate) fn encode_to_fs_safe(key: &str) -> String { |
| 116 | + let encoded = hex::encode(key); |
| 117 | + format!("x{}", encoded) |
| 118 | +} |
| 119 | + |
| 120 | +/// Inverse of [`encode_to_fs_safe`]. |
| 121 | +// FIXME: Just use a generic String as the error type, for now. |
| 122 | +#[cfg_attr(not(test), allow(dead_code))] // currently only referenced in tests |
| 123 | +pub(crate) fn decode_from_fs_safe(file_name: &str) -> Result<String, String> { |
| 124 | + let encoded: &str = file_name |
| 125 | + .strip_prefix("x") |
| 126 | + .ok_or_else(|| format!("decode_from_fs_safe: missing x prefix for {:?}", file_name))?; |
| 127 | + let bytes: Vec<u8> = hex::decode(encoded).map_err(|err| err.to_string())?; |
| 128 | + let decoded = String::from_utf8(bytes).map_err(|err| err.to_string())?; |
| 129 | + Ok(decoded) |
| 130 | +} |
| 131 | + |
132 | 132 | #[cfg(test)]
|
133 | 133 | mod inspect;
|
0 commit comments