templar_common/oracle/redstone/
serializable_u256.rs

1use near_sdk::{near, serde};
2use primitive_types::U256;
3use schemars::JsonSchema;
4
5#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
6#[near(serializers = [borsh])]
7pub struct SerializableU256([u64; 4]);
8
9impl SerializableU256 {
10    pub fn to_u256(self) -> U256 {
11        self.into()
12    }
13}
14
15impl From<U256> for SerializableU256 {
16    fn from(value: U256) -> Self {
17        Self(value.0)
18    }
19}
20
21impl From<SerializableU256> for U256 {
22    fn from(value: SerializableU256) -> Self {
23        U256(value.0)
24    }
25}
26
27impl JsonSchema for SerializableU256 {
28    fn schema_name() -> String {
29        "SerializableU256".to_string()
30    }
31
32    fn json_schema(gen: &mut schemars::gen::SchemaGenerator) -> schemars::schema::Schema {
33        let mut schema = gen.subschema_for::<String>().into_object();
34        schema.metadata().description = Some("unsigned 256-bit integer".to_string());
35        schema.into()
36    }
37}
38
39impl serde::Serialize for SerializableU256 {
40    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
41    where
42        S: serde::Serializer,
43    {
44        serde::Serialize::serialize(&U256(self.0).to_string(), serializer)
45    }
46}
47
48impl<'de> serde::Deserialize<'de> for SerializableU256 {
49    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
50    where
51        D: serde::Deserializer<'de>,
52    {
53        let s = <String as serde::Deserialize>::deserialize(deserializer)?;
54        U256::from_dec_str(&s)
55            .map(Self::from)
56            .map_err(serde::de::Error::custom)
57    }
58}