Expand description
The RoMap
trait describes a read-only-map.
It is intended to allow library authors more flexibility in the types they accept.
This crate includes combinators and implementations for common containers.
use romap::{deref_value, project_value, union, RoMap};
trait MyPetListTrait {
fn cats(&self) -> impl RoMap<str, Cat>;
fn dogs(&self) -> impl RoMap<str, Dog>;
fn all_pets(&self) -> impl RoMap<str, dyn Pet> {
union(
project_value(self.cats(), |p| p as &dyn Pet),
project_value(self.dogs(), |p| p as &dyn Pet),
)
}
}
struct MyPetListImpl {
cats: HashMap<String, Cat>,
dogs: BTreeMap<&'static str, Box<Dog>>,
}
impl MyPetListTrait for MyPetListImpl {
fn cats(&self) -> impl RoMap<str, Cat> {
&self.cats
}
fn dogs(&self) -> impl RoMap<str, Dog> {
deref_value(&self.dogs)
}
}
Modules§
- structs
- The concrete combinator types
Structs§
- Empty
- An empty map
Traits§
- RoMap
- A read-only-map.
Functions§
- deref_
value - Calls deref on the values of a map.
- discard_
values - Discard values, replacing them with
&()
. - filter_
key - Filter depending on key
- filter_
kv - Filter depending on both key and value
- project_
value - Applies some function to the values of a map.
- union
- Returns the union of two maps.