Crates.io | contextual |
lib.rs | contextual |
version | 0.1.6 |
source | src |
created_at | 2022-09-01 14:14:43.221076 |
updated_at | 2023-04-14 13:31:03.293985 |
description | Utility crate to deal with data in context |
homepage | |
repository | https://github.com/timothee-haudebourg/contextual |
max_upload_size | |
id | 656720 |
size | 20,791 |
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")
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.