use indexmap::IndexMap;
use std::collections::HashMap;
#[derive(Debug, Clone, PartialEq)]
pub struct ToonMap(IndexMap<String, crate::Value>);
impl ToonMap {
#[must_use]
pub fn new() -> Self {
ToonMap(IndexMap::new())
}
#[must_use]
pub fn with_capacity(capacity: usize) -> Self {
ToonMap(IndexMap::with_capacity(capacity))
}
pub fn insert(&mut self, key: String, value: crate::Value) -> Option<crate::Value> {
self.0.insert(key, value)
}
#[must_use]
pub fn get(&self, key: &str) -> Option<&crate::Value> {
self.0.get(key)
}
#[must_use]
pub fn len(&self) -> usize {
self.0.len()
}
#[must_use]
pub fn is_empty(&self) -> bool {
self.0.is_empty()
}
pub fn keys(&self) -> indexmap::map::Keys<'_, String, crate::Value> {
self.0.keys()
}
pub fn values(&self) -> indexmap::map::Values<'_, String, crate::Value> {
self.0.values()
}
pub fn iter(&self) -> indexmap::map::Iter<'_, String, crate::Value> {
self.0.iter()
}
}
impl Default for ToonMap {
fn default() -> Self {
Self::new()
}
}
impl From<HashMap<String, crate::Value>> for ToonMap {
fn from(map: HashMap<String, crate::Value>) -> Self {
ToonMap(map.into_iter().collect())
}
}
impl From<ToonMap> for HashMap<String, crate::Value> {
fn from(map: ToonMap) -> Self {
map.0.into_iter().collect()
}
}
impl IntoIterator for ToonMap {
type Item = (String, crate::Value);
type IntoIter = indexmap::map::IntoIter<String, crate::Value>;
fn into_iter(self) -> Self::IntoIter {
self.0.into_iter()
}
}
impl FromIterator<(String, crate::Value)> for ToonMap {
fn from_iter<T: IntoIterator<Item = (String, crate::Value)>>(iter: T) -> Self {
ToonMap(IndexMap::from_iter(iter))
}
}