Skip to content
This repository was archived by the owner on May 9, 2022. It is now read-only.

Commit ef3313b

Browse files
committed
refactor(rtc_tenclave,kv_store): pull out encode_to_fs_safe / decode_from_fs_safe
1 parent 2b1122b commit ef3313b

File tree

2 files changed

+21
-20
lines changed

2 files changed

+21
-20
lines changed

rtc_tenclave/src/kv_store/fs/inspect.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use std::iter::Iterator;
99
use serde::de::DeserializeOwned;
1010
use serde::Serialize;
1111

12+
use crate::kv_store::fs::decode_from_fs_safe;
1213
use crate::kv_store::inspect::InspectStore;
1314
use crate::kv_store::KvStore;
1415

@@ -33,7 +34,7 @@ where
3334
.file_name()
3435
.unwrap_or_else(|| panic!("directory entry lacks file_name: {:?}", file_path));
3536
let file_name: &str = os_file_name.to_str().expect("OsStr.to_str failed");
36-
Self::decode_key(file_name).expect("FsStore::decode_key failed")
37+
decode_from_fs_safe(file_name).expect("decode_from_fs_safe failed")
3738
});
3839

3940
keys.map(|k| {

rtc_tenclave/src/kv_store/fs/mod.rs

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -57,27 +57,9 @@ where
5757

5858
/// Resolve file name for the value of `key`.
5959
fn value_path(&self, key: &str) -> PathBuf {
60-
let file_name = Self::encode_key(key);
60+
let file_name = encode_to_fs_safe(key);
6161
self.root_dir.join(file_name)
6262
}
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-
}
8163
}
8264

8365
impl<F, V> KvStore<V> for FsStore<F>
@@ -129,5 +111,23 @@ where
129111
}
130112
}
131113

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+
132132
#[cfg(test)]
133133
mod inspect;

0 commit comments

Comments
 (0)