# contain-rs A crate for defining/extending lifetimes. ## Examples ### Simple Container A basic fast implementation of `Container` backed by `Vec`. ```rust use contain::{Container, SimpleContainer}; fn append_thing<'a>(container: &'a impl Container, s: &str) -> &'a str { container.put(format!("{}thing", s)) } let container = SimpleContainer::new(); let a = append_thing(&container, "some"); let b = append_thing(&container, "a "); let c = append_thing(&container, "that "); assert_eq!(a, "something"); assert_eq!(b, "a thing"); assert_eq!(c, "that thing"); assert_eq!(container.len(), 3) ``` ## Deduplicating Container A deduplicating `Container` backed by a `std::collections::HashSet`. If two equal items are stored, the second is dropped and a reference to the first is returned. Whilst more resource-intensive than `SimpleContainer`, it can be more memory efficient in scenarios where many items are equal and equivalent since the duplicates will be dropped. ```rust use contain::{Container, DeduplicatingContainer}; fn append_thing<'a>(container: &'a impl Container, s: &str) -> &'a str { container.put(format!("{}thing", s)) } let container = DeduplicatingContainer::new(); let a = append_thing(&container, "some"); let b = append_thing(&container, "a "); let c = append_thing(&container, "some"); assert_eq!(a, "something"); assert_eq!(b, "a thing"); assert_eq!(c, "something"); assert_eq!(container.len(), 2); ```