sealed_secrets/
lib.rs

1//! This module provides functions and traits for saving and loading secrets as strings.
2//! It includes implementations for saving and loading secrets using the `SecretsManager` struct.
3//!
4//! # Example
5//!
6//! ```
7//! use sealed_secrets::{encode, decode};
8//! use std::collections::HashMap;
9//!
10//! fn main() {
11//!     let mut map = HashMap::new();
12//!     map.insert("key1".to_string(), "value1".to_string());
13//!     map.insert("key2".to_string(), "value2".to_string());
14//!     let key = "password".to_string();
15//!     let encoded = encode(&map, &key).unwrap();
16//!     println!("{}", encoded);
17//!     let key = "password".to_string();
18//!     let map = decode(&encoded, &key).unwrap();
19//!     println!("{:?}", map);
20//! }
21//! ```
22mod 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}