spacetimedb_lib/
st_var.rs1use derive_more::From;
2use spacetimedb_sats::{AlgebraicValue, SpacetimeType, SumValue};
3
4#[derive(Debug, Clone, From, SpacetimeType)]
7#[sats(crate = spacetimedb_lib)]
8pub enum StVarValue {
9 Bool(bool),
10 I8(i8),
11 U8(u8),
12 I16(i16),
13 U16(u16),
14 I32(i32),
15 U32(u32),
16 I64(i64),
17 U64(u64),
18 I128(i128),
19 U128(u128),
20 F32(f32),
22 F64(f64),
23 String(Box<str>),
24}
25
26impl StVarValue {
27 pub fn try_from_primitive(value: AlgebraicValue) -> Result<Self, AlgebraicValue> {
28 match value {
29 AlgebraicValue::Bool(v) => Ok(StVarValue::Bool(v)),
30 AlgebraicValue::I8(v) => Ok(StVarValue::I8(v)),
31 AlgebraicValue::U8(v) => Ok(StVarValue::U8(v)),
32 AlgebraicValue::I16(v) => Ok(StVarValue::I16(v)),
33 AlgebraicValue::U16(v) => Ok(StVarValue::U16(v)),
34 AlgebraicValue::I32(v) => Ok(StVarValue::I32(v)),
35 AlgebraicValue::U32(v) => Ok(StVarValue::U32(v)),
36 AlgebraicValue::I64(v) => Ok(StVarValue::I64(v)),
37 AlgebraicValue::U64(v) => Ok(StVarValue::U64(v)),
38 AlgebraicValue::I128(v) => Ok(StVarValue::I128(v.0)),
39 AlgebraicValue::U128(v) => Ok(StVarValue::U128(v.0)),
40 AlgebraicValue::F32(v) => Ok(StVarValue::F32(v.into_inner())),
41 AlgebraicValue::F64(v) => Ok(StVarValue::F64(v.into_inner())),
42 AlgebraicValue::String(v) => Ok(StVarValue::String(v)),
43 _ => Err(value),
44 }
45 }
46
47 pub fn try_from_sum(value: AlgebraicValue) -> Result<Self, AlgebraicValue> {
48 value.into_sum()?.try_into()
49 }
50}
51
52impl TryFrom<SumValue> for StVarValue {
53 type Error = AlgebraicValue;
54
55 fn try_from(sum: SumValue) -> Result<Self, Self::Error> {
56 match sum.tag {
57 0 => Ok(StVarValue::Bool(sum.value.into_bool()?)),
58 1 => Ok(StVarValue::I8(sum.value.into_i8()?)),
59 2 => Ok(StVarValue::U8(sum.value.into_u8()?)),
60 3 => Ok(StVarValue::I16(sum.value.into_i16()?)),
61 4 => Ok(StVarValue::U16(sum.value.into_u16()?)),
62 5 => Ok(StVarValue::I32(sum.value.into_i32()?)),
63 6 => Ok(StVarValue::U32(sum.value.into_u32()?)),
64 7 => Ok(StVarValue::I64(sum.value.into_i64()?)),
65 8 => Ok(StVarValue::U64(sum.value.into_u64()?)),
66 9 => Ok(StVarValue::I128(sum.value.into_i128()?.0)),
67 10 => Ok(StVarValue::U128(sum.value.into_u128()?.0)),
68 11 => Ok(StVarValue::F32(sum.value.into_f32()?.into_inner())),
69 12 => Ok(StVarValue::F64(sum.value.into_f64()?.into_inner())),
70 13 => Ok(StVarValue::String(sum.value.into_string()?)),
71 _ => Err(*sum.value),
72 }
73 }
74}
75
76impl From<StVarValue> for AlgebraicValue {
77 fn from(value: StVarValue) -> Self {
78 AlgebraicValue::Sum(value.into())
79 }
80}
81
82impl From<StVarValue> for SumValue {
83 fn from(value: StVarValue) -> Self {
84 match value {
85 StVarValue::Bool(v) => SumValue::new(0, v),
86 StVarValue::I8(v) => SumValue::new(1, v),
87 StVarValue::U8(v) => SumValue::new(2, v),
88 StVarValue::I16(v) => SumValue::new(3, v),
89 StVarValue::U16(v) => SumValue::new(4, v),
90 StVarValue::I32(v) => SumValue::new(5, v),
91 StVarValue::U32(v) => SumValue::new(6, v),
92 StVarValue::I64(v) => SumValue::new(7, v),
93 StVarValue::U64(v) => SumValue::new(8, v),
94 StVarValue::I128(v) => SumValue::new(9, v),
95 StVarValue::U128(v) => SumValue::new(10, v),
96 StVarValue::F32(v) => SumValue::new(11, v),
97 StVarValue::F64(v) => SumValue::new(12, v),
98 StVarValue::String(v) => SumValue::new(13, v),
99 }
100 }
101}