/bimap-rs

A two-way bijective map for Rust.

Primary LanguageRustApache License 2.0Apache-2.0

Build status Coverage Lines of code Version Documentation Downloads License Dependency status Rust version

bimap-rs

bimap-rs is a two-way bijective map implementation for Rust.

Usage

Installation

To use bimap-rs in your Rust project, add the following to the dependencies section of your Cargo.toml:

bimap = "0.4"

serde compatibility

bimap-rs optionally supports serialization and deserialization of BiHashMap and BiBTreeMap through serde. To avoid unnecessary dependencies, this is gated behind the serde feature and must be manually enabled. To do so, add the following to the dependencies section of your Cargo.toml:

bimap = { version = "0.4", features = [ "serde" ]}

no_std compatibility

To use bimap-rs without the Rust standard library, add the following the dependencies section of your Cargo.toml:

bimap = { version = "0.4", default-features = false }

If you do use bimap without the standard library, there is no BiHashMap, only BiBTreeMap. Currently, the no_std version of this library may not be used with serde integration.

Example

use bimap::BiMap;

let mut elements = BiMap::new();

// insert chemicals and their corresponding symbols
elements.insert("hydrogen", "H");
elements.insert("carbon", "C");
elements.insert("bromine", "Br");
elements.insert("neodymium", "Nd");

// retrieve chemical symbol by name (left to right)
assert_eq!(elements.get_by_left(&"bromine"), Some(&"Br"));
assert_eq!(elements.get_by_left(&"oxygen"), None);

// retrieve name by chemical symbol (right to left)
assert_eq!(elements.get_by_right(&"C"), Some(&"carbon"));
assert_eq!(elements.get_by_right(&"Al"), None);

// check membership
assert!(elements.contains_left(&"hydrogen"));
assert!(!elements.contains_right(&"He"));

// remove elements
assert_eq!(
    elements.remove_by_left(&"neodymium"),
    Some(("neodymium", "Nd"))
);
assert_eq!(elements.remove_by_right(&"Nd"), None);

// iterate over elements
for (left, right) in &elements {
    println!("the chemical symbol for {} is {}", left, right);
}

See the docs for more details.

License

bimap-rs is licensed under either of

at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.