use crate::DefaultValueConstructor;
use crate::Value;
pub fn value_false() -> Value<bool> {
Value::default()
}
pub fn value_true() -> Value<bool> {
default_value(|| true)
}
pub fn default_string(s: impl ToString + Clone + 'static) -> impl Fn() -> Value<String> {
move || {
let s_clone = s.clone();
default_value(|| s_clone.to_string())
}
}
macro_rules! make_default_fn {
($name:ident, $ty:ty) => {
pub fn $name(int: $ty) -> impl Fn() -> Value<$ty> {
move || default_value(|| int)
}
};
}
make_default_fn!(default_u8, u8);
make_default_fn!(default_u16, u16);
make_default_fn!(default_u32, u32);
make_default_fn!(default_u64, u64);
make_default_fn!(default_i8, i8);
make_default_fn!(default_i16, i16);
make_default_fn!(default_i32, i32);
make_default_fn!(default_i64, i64);
pub fn default_value<F, T>(f: F) -> Value<T>
where
F: Fn() -> T,
{
Value {
value: f(),
default: DefaultValueConstructor::Custom(f()),
}
}