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