bullet_exchange_interface/
macros.rs1#[macro_export]
3macro_rules! define_struct {
4 ($(#[$structmeta:meta])* struct $type_name:ident$(<$a:ident>)?{$($(#[$meta:meta])*$name:ident : $type:ty),* $(,)?}) => {
5 #[derive(
6 Clone,
7 Debug,
8 Eq,
9 Hash,
10 Ord,
11 PartialEq,
12 PartialOrd,
13 borsh::BorshDeserialize,
14 borsh::BorshSerialize,
15 schemars::JsonSchema,
16 serde::Deserialize,
17 serde::Serialize,
18 )]
19 #[cfg_attr(feature="schema", derive(sov_universal_wallet::UniversalWallet))]
20 $(#[$structmeta])*
21 pub struct $type_name$(<$a>)* {
22 $($(#[$meta])*
23 pub $name : $type),*
24 }
25 };
26}
27
28#[macro_export]
29macro_rules! define_simple_type {
30 ($(#[$enummeta:meta])* $name:ident($inner:ty)) => {
31 define_simple_type!(
32 $(#[$enummeta])*
33 #[cfg_attr(feature="schema", derive(sov_universal_wallet::UniversalWallet))]
34 $name($inner) + Default + Debug);
35 impl std::fmt::Display for $name {
36 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
37 write!(f, "{}", self.0)
38 }
39 }
40 impl Copy for $name {}
41 impl std::str::FromStr for $name {
42 type Err = $crate::error::ConfigError;
43
44 fn from_str(s: &str) -> Result<Self, Self::Err> {
45 let id = s
46 .parse()
47 .map_err(|_| $crate::error::ConfigError::FailedToParseInput {
48 input: s.to_string(),
49 reason: format!("Provided string value for {} cannot be converted to the underlying type ({})", stringify!($type_name), stringify!($inner)),
50 })?;
51
52 Ok($name(id))
53 }
54 }
55 };
56 ($(#[$enummeta:meta])* $name:ident($(#[$innermeta:meta])* $inner:ty) $(+ $derive:path)*) => {
57 #[derive(
58 Clone,
59 Eq,
60 Hash,
61 Ord,
62 PartialEq,
63 PartialOrd,
64 borsh::BorshDeserialize,
65 borsh::BorshSerialize,
66 schemars::JsonSchema,
67 serde::Deserialize,
68 serde::Serialize,
69 $($derive),*
70 )]
71 #[serde(transparent)]
72 $(#[$enummeta])*
73 pub struct $name(
74 $(#[$innermeta])*
75 pub $inner);
76 };
77}
78
79#[macro_export]
80macro_rules! define_simple_enum {
81 ($(#[$enummeta:meta])* $type_name:ident{$($(#[$meta:meta])* $name:ident $(= $value:literal)?),*$(,)?}) => {
82 $crate::define_enum!(
83 $(#[$enummeta])*
84 #[derive(Copy, strum::Display, strum::FromRepr)]
85 enum $type_name{$($(#[$meta])* $name $(= $value)*),*});
86 }
87}
88
89#[macro_export]
90macro_rules! define_enum {
91 ($(#[$enummeta:meta])* enum $type_name:ident $(<$a:ident>)?{$($(#[$meta:meta])*$name:ident $({$($arg_name:ident: $arg_type1:ty),*$(,)?})? $(($($arg_type2:ty),*))? $(= $value:literal)?),+$(,)?}) => {
92 $(#[$enummeta])*
93 #[derive(
94 Clone,
95 Debug,
96 Eq,
97 Hash,
98 Ord,
99 PartialEq,
100 PartialOrd,
101 borsh::BorshDeserialize,
102 borsh::BorshSerialize,
103 serde::Deserialize,
104 serde::Serialize,
105 schemars::JsonSchema,
106 strum::AsRefStr,
107 )]
108 #[cfg_attr(feature="schema", derive(sov_universal_wallet::UniversalWallet))]
109 #[derive(strum::EnumDiscriminants)]
110 #[strum_discriminants(derive(strum::EnumIter, strum::EnumString, strum::Display))]
111 #[repr(u8)]
112 #[serde(rename_all = "snake_case")]
113 #[borsh(use_discriminant = true)]
114 pub enum $type_name$(<$a>)* {
115 $($(#[$meta])*
116 $name $({$($arg_name: $arg_type1),* })* $(($($arg_type2),*))* $(= $value)*),*
117 }
118 }
119}