1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
/// Generic trait to enable chainable API pub trait With: Sized { /// Calls the given closure on `self`. fn with<F: FnOnce(&mut Self)>(mut self, f: F) -> Self { f(&mut self); self } /// Calls the given closure on `self`. fn try_with<E, F>(mut self, f: F) -> Result<Self, E> where F: FnOnce(&mut Self) -> Result<(), E>, { f(&mut self)?; Ok(self) } /// Calls the given closure if `condition == true`. fn with_if<F>(mut self, condition: bool, f: F) -> Self where F: FnOnce(&mut Self), { if condition { f(&mut self); } self } } impl<T: Sized> With for T {}