sov_universal_wallet/schema/
primitive.rs1use borsh::{BorshDeserialize, BorshSerialize};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5use crate::ty::{ByteDisplay, IntegerDisplay, IntegerType, LinkingScheme, Ty};
6
7#[derive(Clone, Debug, PartialEq, Eq, BorshSerialize, BorshDeserialize)]
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9pub enum Primitive {
10 Integer(IntegerType, IntegerDisplay),
11 ByteArray { len: usize, display: ByteDisplay },
12 ByteVec { display: ByteDisplay },
13 Float32,
14 Float64,
15 String,
16 Boolean,
17 Skip { len: usize },
18}
19
20impl<L: LinkingScheme> From<Primitive> for Ty<L> {
21 fn from(val: Primitive) -> Self {
22 match val {
23 Primitive::Integer(t, d) => Ty::Integer(t, d),
24 Primitive::ByteArray { len, display } => Ty::ByteArray { len, display },
25 Primitive::ByteVec { display } => Ty::ByteVec { display },
26 Primitive::Float32 => Ty::Float32,
27 Primitive::Float64 => Ty::Float64,
28 Primitive::String => Ty::String,
29 Primitive::Boolean => Ty::Boolean,
30 Primitive::Skip { len } => Ty::Skip { len },
31 }
32 }
33}
34
35#[derive(Debug, Clone, Copy, PartialEq, Eq)]
36pub struct ErrNotAPrimitive;
37
38impl<L: LinkingScheme> TryFrom<Ty<L>> for Primitive {
39 type Error = ErrNotAPrimitive;
40
41 fn try_from(value: Ty<L>) -> Result<Self, Self::Error> {
42 match value {
43 Ty::Integer(t, d) => Ok(Primitive::Integer(t, d)),
44 Ty::ByteArray { len, display } => Ok(Primitive::ByteArray { len, display }),
45 Ty::Float32 => Ok(Primitive::Float32),
46 Ty::Float64 => Ok(Primitive::Float64),
47 Ty::String => Ok(Primitive::String),
48 Ty::Boolean => Ok(Primitive::Boolean),
49 Ty::Skip { len } => Ok(Primitive::Skip { len }),
50 _ => Err(ErrNotAPrimitive),
51 }
52 }
53}