#![cfg_attr(not(feature = "std"), no_std)]
#![allow(rustdoc::redundant_explicit_links)]
pub use discard_values::discard_values;
pub use empty::Empty;
pub use filter::{filter_key, filter_kv};
pub use union::union;
pub use value_projection::{deref_value, project_value};
mod discard_values;
mod filter;
pub mod structs {
pub use crate::discard_values::DiscardValues;
pub use crate::filter::{FilterKey, FilterKv};
pub use crate::union::Union;
}
mod either;
mod empty;
mod option;
#[cfg(feature = "std")]
mod std_maps;
#[cfg(feature = "test_utils")]
pub mod test_utils;
mod union;
mod value_projection;
pub trait RoMap<'a, K: 'a + ?Sized, V: 'a + ?Sized>: 'a + Copy {
const ITER_ORDER_SORTED: bool = false;
fn contains_key(self, k: &K) -> bool {
self.get_key(k).is_some()
}
fn get(self, k: &K) -> Option<&'a V> {
Some(self.get_key_value(k)?.1)
}
fn get_key(self, k: &K) -> Option<&'a K> {
Some(self.get_key_value(k)?.0)
}
fn get_key_value(self, k: &K) -> Option<(&'a K, &'a V)>;
fn is_empty(self) -> bool {
self.len() == 0
}
fn len(self) -> usize {
self.keys().count()
}
fn keys(self) -> impl 'a + Iterator<Item = &'a K> {
self.iter().map(|(k, _)| k)
}
fn values(self) -> impl 'a + Iterator<Item = &'a V> {
self.iter().map(|(_, v)| v)
}
fn iter(self) -> impl 'a + Iterator<Item = (&'a K, &'a V)>;
}