1use std::ops::Range;
2use uuid::Uuid;
3
4#[derive(Clone)]
11pub enum Value<'a> {
12 USize(usize),
14 U128(u128),
16 U64(u64),
18 U32(u32),
20 U16(u16),
22 U8(u8),
24 I128(i128),
26 I64(i64),
28 I32(i32),
30 I16(i16),
32 I8(i8),
34 F64(f64),
36 F32(f32),
38 Bool(bool),
40 Uuid(Uuid),
42 Str(&'a str),
44}
45
46#[derive(Clone)]
53pub struct ValueRange<'a>(pub(crate) Range<Value<'a>>);
54
55macro_rules! value_coercion {
56 ($ty: ty, $ident: ident) => {
57 impl<'a> From<&'a $ty> for Value<'a> {
58 fn from(value: &'a $ty) -> Self {
59 Self::$ident(*value)
60 }
61 }
62 impl<'a> From<&'a mut $ty> for Value<'a> {
63 fn from(value: &'a mut $ty) -> Self {
64 Self::$ident(*value)
65 }
66 }
67 impl<'a> From<$ty> for Value<'a> {
68 fn from(value: $ty) -> Self {
69 Self::$ident(value)
70 }
71 }
72 };
73}
74value_coercion!(&'a String, Str);
75value_coercion!(&'a str, Str);
76value_coercion!(u128, U128);
77value_coercion!(u64, U64);
78value_coercion!(u32, U32);
79value_coercion!(u16, U16);
80value_coercion!(u8, U8);
81value_coercion!(i128, I128);
82value_coercion!(i64, I64);
83value_coercion!(i32, I32);
84value_coercion!(i16, I16);
85value_coercion!(i8, I8);
86value_coercion!(f64, F64);
87value_coercion!(f32, F32);
88value_coercion!(bool, Bool);
89value_coercion!(Uuid, Uuid);
90
91macro_rules! value_or_range_coercion {
92 ($ty: ty) => {
93 impl<'a> From<Range<$ty>> for ValueRange<'a> {
94 fn from(range: Range<$ty>) -> Self {
95 ValueRange(range.start.into()..range.end.into())
96 }
97 }
98 };
99}
100
101value_or_range_coercion!(&'a str);
102value_or_range_coercion!(u128);
103value_or_range_coercion!(u64);
104value_or_range_coercion!(u32);
105value_or_range_coercion!(u16);
106value_or_range_coercion!(u8);
107value_or_range_coercion!(i128);
108value_or_range_coercion!(i64);
109value_or_range_coercion!(i32);
110value_or_range_coercion!(i16);
111value_or_range_coercion!(i8);
112value_or_range_coercion!(f64);
113value_or_range_coercion!(f32);
114value_or_range_coercion!(bool);
115value_or_range_coercion!(Uuid);
116value_or_range_coercion!(&'a String);