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
31
32
33
34
35
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![()];