daml_grpc/
nat.rs

1use crate::data::value::DamlValue;
2use crate::data::DamlResult;
3use crate::serialize::{DamlDeserializableType, DamlDeserializeFrom, DamlSerializableType, DamlSerializeFrom};
4
5/// The value of a natural number type.
6pub trait Nat {
7    fn nat() -> u8;
8}
9
10///
11macro_rules! make_nat {
12    ($name:ident, $n:literal) => {
13        make_nat_struct! {$name, $n}
14        make_nat_serializable_type! {$name}
15        make_nat_deserializable_type! {$name}
16        make_nat_serialize_from! {$name}
17        make_nat_deserialize_from! {$name}
18    };
19}
20
21macro_rules! make_nat_struct {
22    ($name:ident, $n:literal) => {
23        make_nat_struct! {@gen $name, $n, concat!("A type representing the natural number ", stringify!($n))}
24    };
25    (@gen $name:ident, $n:literal, $doc:expr) => {
26        #[doc = $doc]
27        #[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Clone)]
28        pub struct $name {}
29        impl Nat for $name {
30            fn nat() -> u8 {
31                $n
32            }
33        }
34    };
35}
36
37macro_rules! make_nat_serializable_type {
38    ($name:ident) => {
39        impl DamlSerializableType for $name {}
40    };
41}
42
43macro_rules! make_nat_deserializable_type {
44    ($name:ident) => {
45        impl DamlDeserializableType for $name {}
46    };
47}
48
49macro_rules! make_nat_serialize_from {
50    ($name:ident) => {
51        impl DamlSerializeFrom<$name> for DamlValue {
52            fn serialize_from(_: $name) -> DamlValue {
53                Self::new_unit()
54            }
55        }
56    };
57}
58
59macro_rules! make_nat_deserialize_from {
60    ($name:ident) => {
61        impl DamlDeserializeFrom for $name {
62            fn deserialize_from(_: DamlValue) -> DamlResult<Self> {
63                Ok($name {})
64            }
65        }
66    };
67}
68
69make_nat! {Nat0, 0}
70make_nat! {Nat1, 1}
71make_nat! {Nat2, 2}
72make_nat! {Nat3, 3}
73make_nat! {Nat4, 4}
74make_nat! {Nat5, 5}
75make_nat! {Nat6, 6}
76make_nat! {Nat7, 7}
77make_nat! {Nat8, 8}
78make_nat! {Nat9, 9}
79make_nat! {Nat10, 10}
80make_nat! {Nat11, 11}
81make_nat! {Nat12, 12}
82make_nat! {Nat13, 13}
83make_nat! {Nat14, 14}
84make_nat! {Nat15, 15}
85make_nat! {Nat16, 16}
86make_nat! {Nat17, 17}
87make_nat! {Nat18, 18}
88make_nat! {Nat19, 19}
89make_nat! {Nat20, 20}
90make_nat! {Nat21, 21}
91make_nat! {Nat22, 22}
92make_nat! {Nat23, 23}
93make_nat! {Nat24, 24}
94make_nat! {Nat25, 25}
95make_nat! {Nat26, 26}
96make_nat! {Nat27, 27}
97make_nat! {Nat28, 28}
98make_nat! {Nat29, 29}
99make_nat! {Nat30, 30}
100make_nat! {Nat31, 31}
101make_nat! {Nat32, 32}
102make_nat! {Nat33, 33}
103make_nat! {Nat34, 34}
104make_nat! {Nat35, 35}
105make_nat! {Nat36, 36}
106make_nat! {Nat37, 37}