use crate::as_yaml::YamlNode;
pub trait MappingView {
fn get(&self, key: &dyn crate::AsYaml) -> Option<YamlNode>;
fn contains_key(&self, key: &dyn crate::AsYaml) -> bool {
self.get(key).is_some()
}
fn len(&self) -> usize {
self.iter().count()
}
fn is_empty(&self) -> bool {
self.iter().next().is_none()
}
fn keys<'a>(&'a self) -> Box<dyn Iterator<Item = YamlNode> + 'a> {
Box::new(self.iter().map(|(k, _)| k))
}
fn values<'a>(&'a self) -> Box<dyn Iterator<Item = YamlNode> + 'a> {
Box::new(self.iter().map(|(_, v)| v))
}
fn iter<'a>(&'a self) -> Box<dyn Iterator<Item = (YamlNode, YamlNode)> + 'a>;
}
impl MappingView for crate::yaml::Mapping {
fn get(&self, key: &dyn crate::AsYaml) -> Option<YamlNode> {
crate::yaml::Mapping::get(self, key)
}
fn contains_key(&self, key: &dyn crate::AsYaml) -> bool {
crate::yaml::Mapping::contains_key(self, key)
}
fn len(&self) -> usize {
crate::yaml::Mapping::len(self)
}
fn is_empty(&self) -> bool {
crate::yaml::Mapping::is_empty(self)
}
fn keys<'a>(&'a self) -> Box<dyn Iterator<Item = YamlNode> + 'a> {
Box::new(crate::yaml::Mapping::keys(self))
}
fn values<'a>(&'a self) -> Box<dyn Iterator<Item = YamlNode> + 'a> {
Box::new(crate::yaml::Mapping::values(self))
}
fn iter<'a>(&'a self) -> Box<dyn Iterator<Item = (YamlNode, YamlNode)> + 'a> {
Box::new(crate::yaml::Mapping::iter(self))
}
}
impl MappingView for crate::anchor_resolution::MergedMapping<'_> {
fn get(&self, key: &dyn crate::AsYaml) -> Option<YamlNode> {
crate::anchor_resolution::MergedMapping::get(self, key)
}
fn iter<'a>(&'a self) -> Box<dyn Iterator<Item = (YamlNode, YamlNode)> + 'a> {
Box::new(crate::anchor_resolution::MergedMapping::iter(self))
}
}