templar_common/oracle/redstone/
serializable_u256.rs1use 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}