7 releases
0.1.6 | Apr 14, 2023 |
---|---|
0.1.5 | Apr 14, 2023 |
0.1.4 | Dec 16, 2022 |
0.1.3 | Sep 1, 2022 |
#1546 in Data structures
9,478 downloads per month
Used in 73 crates
(13 directly)
9KB
152 lines
Contextual
A small crate to deal with data in context.
use contextual::{WithContext, AsRefWithContext, DisplayWithContext};
use std::fmt;
/// Index of an element in some array.
pub struct Index(usize);
impl<T, C: AsRef<[T]>> AsRefWithContext<T, C> for Index {
fn as_ref_with<'a>(&'a self, context: &'a C) -> &'a T {
&context.as_ref()[self.0]
}
}
impl<'a, C: AsRef<[&'a str]>> DisplayWithContext<C> for Index {
fn fmt_with(&self, context: &C, f: &mut fmt::Formatter) -> fmt::Result {
use fmt::Display;
context.as_ref()[self.0].fmt(f)
}
}
let i = Index(1);
let context = ["a", "b", "c"];
print!("index: {}", i.with(&context));
assert_eq!(*i.with(&context).as_ref(), "b")
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
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.