Crate romap

Source
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.