use super::value::{Cloneable, ValueBuilder};
use crate::any::{
BorrowedMutStatic, BorrowedStatic, OwnedStatic, TempBorrowedMutStatic, TempBorrowedStatic,
};
use effectful::bound::{Dynamic, IsSync};
use effectful::environment::{DynBind, Environment};
macro_rules! value_builder {
[$($ty:ty),*] => {
$(impl<'ctx, M, E: Environment> crate::Build<'ctx, M, E> for $ty
where
Dynamic<Self>: DynBind<E>,
for<'a> Dynamic<&'a Self>: DynBind<E>,
Dynamic<OwnedStatic<Self>>: DynBind<E>,
for<'a> Dynamic<&'a OwnedStatic<Self>>: DynBind<E>,
Dynamic<BorrowedStatic<'ctx, Self>>: DynBind<E>,
for<'a, 'b> Dynamic<&'a BorrowedStatic<'b, Self>>: DynBind<E>,
for<'a> Dynamic<TempBorrowedStatic<'a, Self>>: DynBind<E>,
for<'a> Dynamic<&'a TempBorrowedStatic<'a, Self>>: DynBind<E>,
Dynamic<BorrowedMutStatic<'ctx, Self>>: DynBind<E>,
for<'a, 'b> Dynamic<&'a BorrowedMutStatic<'b, Self>>: DynBind<E>,
for<'a> Dynamic<TempBorrowedMutStatic<'a, Self>>: DynBind<E>,
for<'a> Dynamic<&'a TempBorrowedMutStatic<'a, Self>>: DynBind<E>,
{
type Builder = ValueBuilder<$ty, Cloneable, E>;
})*
};
}
value_builder![u8, u16, u32, u64, u128, usize];
value_builder![i8, i16, i32, i64, i128, isize];
value_builder![f32, f64];
value_builder![char];
value_builder![bool];
value_builder![()];