Expand description
Deferred value initialization.
The Fill
trait is a way to bridge APIs that may not be directly
compatible with other constructor methods.
The Fill
trait is automatically implemented for closures, so can usually
be used in libraries that can’t implement the trait themselves.
use value_bag::{ValueBag, fill::Slot};
let value = ValueBag::from_fill(&|slot: Slot| {
#[derive(Debug)]
struct MyShortLivedValue;
slot.fill_debug(&MyShortLivedValue)
});
assert_eq!("MyShortLivedValue", format!("{:?}", value));
The trait can also be implemented manually:
use value_bag::{ValueBag, Error, fill::{Slot, Fill}};
struct FillDebug;
impl Fill for FillDebug {
fn fill(&self, slot: Slot) -> Result<(), Error> {
slot.fill_debug(&42i64 as &dyn Debug)
}
}
let value = ValueBag::from_fill(&FillDebug);
assert_eq!(None, value.to_i64());