use record::Payload;
use std::collections::HashMap;
use traits::{AutoEncoder, Body};
pub struct VaultMetadata {
pub name: String,
pub location: String,
pub size: usize,
}
#[derive(Debug, Serialize, Deserialize, Clone, Eq, PartialEq)]
pub struct MetaDomain {
name: String,
body: HashMap<String, Payload>,
}
impl MetaDomain {
pub fn new<S>(name: S) -> Self
where
S: Into<String>,
{
Self {
name: name.into(),
body: HashMap::new(),
}
}
pub fn fill(self, new_body: HashMap<String, Payload>) -> Self {
Self {
body: new_body,
..self
}
}
pub fn all(&self) -> &HashMap<String, Payload> {
&self.body
}
pub fn name(&self) -> &str {
&self.name
}
pub fn size(&self) -> usize {
self.body.len()
}
}
impl AutoEncoder for MetaDomain {}
impl Body for MetaDomain {
fn get_field(&self, name: &str) -> Option<&Payload> {
self.body.get(name)
}
fn set_field(&mut self, key: &str, value: Payload) -> Option<()> {
self.body
.insert(key.into(), value)
.map_or(Some(()), |_| Some(()))
}
fn flatten(&mut self) -> Option<()> {
None
}
}