stellar_xdr/generated/
host_function.rs1#[allow(unused_imports, clippy::wildcard_imports)]
2use super::*;
3
4#[cfg_attr(feature = "serde", cfg_eval::cfg_eval)]
22#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
23#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
24#[cfg_attr(
25 all(feature = "serde", feature = "alloc"),
26 serde_with::serde_as,
27 derive(serde::Serialize, serde::Deserialize),
28 serde(rename_all = "snake_case")
29)]
30#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
31#[allow(clippy::large_enum_variant)]
32pub enum HostFunction {
33 InvokeContract(InvokeContractArgs),
34 CreateContract(CreateContractArgs),
35 UploadContractWasm(BytesM),
36 CreateContractV2(CreateContractArgsV2),
37}
38
39#[cfg(feature = "alloc")]
40impl Default for HostFunction {
41 fn default() -> Self {
42 Self::InvokeContract(InvokeContractArgs::default())
43 }
44}
45
46impl HostFunction {
47 const _VARIANTS: &[HostFunctionType] = &[
48 HostFunctionType::InvokeContract,
49 HostFunctionType::CreateContract,
50 HostFunctionType::UploadContractWasm,
51 HostFunctionType::CreateContractV2,
52 ];
53 pub const VARIANTS: [HostFunctionType; Self::_VARIANTS.len()] = {
54 let mut arr = [Self::_VARIANTS[0]; Self::_VARIANTS.len()];
55 let mut i = 1;
56 while i < Self::_VARIANTS.len() {
57 arr[i] = Self::_VARIANTS[i];
58 i += 1;
59 }
60 arr
61 };
62 const _VARIANTS_STR: &[&str] = &[
63 "InvokeContract",
64 "CreateContract",
65 "UploadContractWasm",
66 "CreateContractV2",
67 ];
68 pub const VARIANTS_STR: [&'static str; Self::_VARIANTS_STR.len()] = {
69 let mut arr = [Self::_VARIANTS_STR[0]; Self::_VARIANTS_STR.len()];
70 let mut i = 1;
71 while i < Self::_VARIANTS_STR.len() {
72 arr[i] = Self::_VARIANTS_STR[i];
73 i += 1;
74 }
75 arr
76 };
77
78 #[must_use]
79 pub const fn name(&self) -> &'static str {
80 match self {
81 Self::InvokeContract(_) => "InvokeContract",
82 Self::CreateContract(_) => "CreateContract",
83 Self::UploadContractWasm(_) => "UploadContractWasm",
84 Self::CreateContractV2(_) => "CreateContractV2",
85 }
86 }
87
88 #[must_use]
89 pub const fn discriminant(&self) -> HostFunctionType {
90 #[allow(clippy::match_same_arms)]
91 match self {
92 Self::InvokeContract(_) => HostFunctionType::InvokeContract,
93 Self::CreateContract(_) => HostFunctionType::CreateContract,
94 Self::UploadContractWasm(_) => HostFunctionType::UploadContractWasm,
95 Self::CreateContractV2(_) => HostFunctionType::CreateContractV2,
96 }
97 }
98
99 #[must_use]
100 pub const fn variants() -> [HostFunctionType; Self::_VARIANTS.len()] {
101 Self::VARIANTS
102 }
103}
104
105impl Name for HostFunction {
106 #[must_use]
107 fn name(&self) -> &'static str {
108 Self::name(self)
109 }
110}
111
112impl Discriminant<HostFunctionType> for HostFunction {
113 #[must_use]
114 fn discriminant(&self) -> HostFunctionType {
115 Self::discriminant(self)
116 }
117}
118
119impl Variants<HostFunctionType> for HostFunction {
120 fn variants() -> slice::Iter<'static, HostFunctionType> {
121 Self::VARIANTS.iter()
122 }
123}
124
125impl Union<HostFunctionType> for HostFunction {}
126
127impl ReadXdr for HostFunction {
128 #[cfg(feature = "std")]
129 fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
130 r.with_limited_depth(|r| {
131 let dv: HostFunctionType = <HostFunctionType as ReadXdr>::read_xdr(r)?;
132 #[allow(clippy::match_same_arms, clippy::match_wildcard_for_single_variants)]
133 let v = match dv {
134 HostFunctionType::InvokeContract => {
135 Self::InvokeContract(InvokeContractArgs::read_xdr(r)?)
136 }
137 HostFunctionType::CreateContract => {
138 Self::CreateContract(CreateContractArgs::read_xdr(r)?)
139 }
140 HostFunctionType::UploadContractWasm => {
141 Self::UploadContractWasm(BytesM::read_xdr(r)?)
142 }
143 HostFunctionType::CreateContractV2 => {
144 Self::CreateContractV2(CreateContractArgsV2::read_xdr(r)?)
145 }
146 #[allow(unreachable_patterns)]
147 _ => return Err(Error::Invalid),
148 };
149 Ok(v)
150 })
151 }
152}
153
154impl WriteXdr for HostFunction {
155 #[cfg(feature = "std")]
156 fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
157 w.with_limited_depth(|w| {
158 self.discriminant().write_xdr(w)?;
159 #[allow(clippy::match_same_arms)]
160 match self {
161 Self::InvokeContract(v) => v.write_xdr(w)?,
162 Self::CreateContract(v) => v.write_xdr(w)?,
163 Self::UploadContractWasm(v) => v.write_xdr(w)?,
164 Self::CreateContractV2(v) => v.write_xdr(w)?,
165 };
166 Ok(())
167 })
168 }
169}