Attribute Macro illicit::from_env [−][src]
#[from_env]
Expand description
Defines required illicit::get
values for a function. Binds the provided
types as if references to them were implicit function arguments:
#[derive(Debug, PartialEq)]
enum TextDirection {
Ltr,
Rtl,
}
impl TextDirection {
fn set<R>(self, op: impl FnOnce() -> R) -> R {
illicit::Layer::new().offer(self).enter(op)
}
}
#[illicit::from_env(direction: &TextDirection)]
fn align_text_to_end(t: &str, width: usize) -> String {
assert!(t.len() <= width, "no linebreaking included, this is unicode-sinful as it is");
match direction {
TextDirection::Ltr => format!("{0:>1$}", t, width),
TextDirection::Rtl => format!("{0:<1$}", t, width),
}
}
let get_aligned = || align_text_to_end("whoa", 8);
let right_aligned = TextDirection::Ltr.set(get_aligned);
let left_aligned = TextDirection::Rtl.set(get_aligned);
assert_eq!(right_aligned, " whoa");
assert_eq!(left_aligned, "whoa ");
Panics
Will cause the annotated function to panic if it is invoked without the requested type in its environment:
ⓘ
align_text_to_end("oopsie", 8);
This attribute adds an Environment Expectations
section to the doc
comments of the annotated function to communicate this risk to users.