use std::collections::hash_map::{IntoIter, Keys, Values};
use std::collections::HashMap;
use std::slice::Iter;
#[derive(Debug, Clone, PartialEq)]
pub struct KeyValuePairs {
pub(crate) key_value_pairs: HashMap<String, String>,
pub(crate) ordered_keys: Vec<String>,
pub(crate) ordered_values: Vec<String>,
}
impl KeyValuePairs {
pub(crate) fn new() -> Self {
Self {
key_value_pairs: HashMap::new(),
ordered_keys: vec![],
ordered_values: vec![],
}
}
pub fn get(&self, key: &str) -> Option<&String> {
self.key_value_pairs.get(key)
}
pub fn is_empty(&self) -> bool {
self.key_value_pairs.is_empty()
}
pub fn len(&self) -> usize {
self.key_value_pairs.len()
}
pub fn keys(&self) -> Keys<'_, String, String> {
self.key_value_pairs.keys()
}
pub fn ordered_keys(&self) -> Iter<'_, String> {
self.ordered_keys.iter()
}
pub fn values(&self) -> Values<'_, String, String> {
self.key_value_pairs.values()
}
pub fn ordered_values(&self) -> Iter<'_, String> {
self.ordered_values.iter()
}
pub fn ordered_key_value_pairs(&self) -> impl Iterator<Item = (&String, &String)> {
self.ordered_keys.iter().zip(self.ordered_values.iter())
}
}
impl IntoIterator for KeyValuePairs {
type Item = (String, String);
type IntoIter = IntoIter<String, String>;
fn into_iter(self) -> Self::IntoIter {
self.key_value_pairs.into_iter()
}
}