1mod io;
23
24use std::collections::HashMap;
25
26use io::{LoadFromString, SaveToString};
27use securestore::{Error, KeySource, SecretsManager};
28
29pub fn encode(map: &HashMap<String, String>, key: &String) -> Result<String, Error> {
30 let vault_pass = KeySource::Password(key.as_str());
31 let mut sman = SecretsManager::new(vault_pass).unwrap();
32 for (k, v) in map {
33 sman.set(k, v.clone());
34 }
35 sman.save_as_string()
36}
37
38pub fn decode(encoded: &String, key: &String) -> Result<HashMap<String, String>, Error> {
39 let vault_pass = KeySource::Password(key.as_str());
40 let sman = SecretsManager::load_from_string(encoded, vault_pass)?;
41 let mut map = HashMap::new();
42 for key in sman.keys() {
43 map.insert(key.to_string(), sman.get(key)?);
44 }
45 Ok(map)
46}
47
48#[cfg(test)]
49mod tests {
50 use super::*;
51
52 #[test]
53 fn test_encode_decode() {
54 let mut map = HashMap::new();
55 map.insert("key1".to_string(), "value1".to_string());
56 map.insert("key2".to_string(), "value2".to_string());
57 let key = "password".to_string();
58 let encoded = encode(&map, &key).unwrap();
59 let decoded = decode(&encoded, &key).unwrap();
60 assert_eq!(map, decoded);
61 }
62}