stellar_xdr/curr/
tx_auths.rs

1use super::{
2    FeeBumpTransaction, FeeBumpTransactionEnvelope, FeeBumpTransactionInnerTx,
3    InvokeHostFunctionOp, Operation, OperationBody, SorobanAuthorizationEntry, Transaction,
4    TransactionEnvelope, TransactionV0, TransactionV0Envelope, TransactionV1Envelope, VecM,
5};
6
7impl TransactionEnvelope {
8    pub fn auths(&self) -> FlatMapOperationToSorobanAuthorizationEntryIter<'_> {
9        match self {
10            TransactionEnvelope::TxV0(e) => e.auths(),
11            TransactionEnvelope::Tx(e) => e.auths(),
12            TransactionEnvelope::TxFeeBump(e) => e.auths(),
13        }
14    }
15
16    #[cfg(feature = "alloc")]
17    pub fn auths_mut(&mut self) -> FlatMapOperationToSorobanAuthorizationEntryIterMut<'_> {
18        match self {
19            TransactionEnvelope::TxV0(e) => e.auths_mut(),
20            TransactionEnvelope::Tx(e) => e.auths_mut(),
21            TransactionEnvelope::TxFeeBump(e) => e.auths_mut(),
22        }
23    }
24}
25
26impl FeeBumpTransactionEnvelope {
27    pub fn auths(&self) -> FlatMapOperationToSorobanAuthorizationEntryIter<'_> {
28        self.tx.auths()
29    }
30
31    #[cfg(feature = "alloc")]
32    pub fn auths_mut(&mut self) -> FlatMapOperationToSorobanAuthorizationEntryIterMut<'_> {
33        self.tx.auths_mut()
34    }
35}
36
37impl FeeBumpTransaction {
38    pub fn auths(&self) -> FlatMapOperationToSorobanAuthorizationEntryIter<'_> {
39        self.inner_tx.auths()
40    }
41
42    #[cfg(feature = "alloc")]
43    pub fn auths_mut(&mut self) -> FlatMapOperationToSorobanAuthorizationEntryIterMut<'_> {
44        self.inner_tx.auths_mut()
45    }
46}
47
48impl FeeBumpTransactionInnerTx {
49    pub fn auths(&self) -> FlatMapOperationToSorobanAuthorizationEntryIter<'_> {
50        match self {
51            FeeBumpTransactionInnerTx::Tx(e) => e.auths(),
52        }
53    }
54
55    #[cfg(feature = "alloc")]
56    pub fn auths_mut(&mut self) -> FlatMapOperationToSorobanAuthorizationEntryIterMut<'_> {
57        match self {
58            FeeBumpTransactionInnerTx::Tx(e) => e.auths_mut(),
59        }
60    }
61}
62
63impl TransactionV1Envelope {
64    pub fn auths(&self) -> FlatMapOperationToSorobanAuthorizationEntryIter<'_> {
65        self.tx.auths()
66    }
67
68    #[cfg(feature = "alloc")]
69    pub fn auths_mut(&mut self) -> FlatMapOperationToSorobanAuthorizationEntryIterMut<'_> {
70        self.tx.auths_mut()
71    }
72}
73
74impl TransactionV0Envelope {
75    pub fn auths(&self) -> FlatMapOperationToSorobanAuthorizationEntryIter<'_> {
76        self.tx.auths()
77    }
78
79    #[cfg(feature = "alloc")]
80    pub fn auths_mut(&mut self) -> FlatMapOperationToSorobanAuthorizationEntryIterMut<'_> {
81        self.tx.auths_mut()
82    }
83}
84
85impl Transaction {
86    pub fn auths(&self) -> FlatMapOperationToSorobanAuthorizationEntryIter<'_> {
87        self.operations.auths()
88    }
89
90    #[cfg(feature = "alloc")]
91    pub fn auths_mut(&mut self) -> FlatMapOperationToSorobanAuthorizationEntryIterMut<'_> {
92        self.operations.auths_mut()
93    }
94}
95
96impl TransactionV0 {
97    pub fn auths(&self) -> FlatMapOperationToSorobanAuthorizationEntryIter<'_> {
98        self.operations.auths()
99    }
100
101    #[cfg(feature = "alloc")]
102    pub fn auths_mut(&mut self) -> FlatMapOperationToSorobanAuthorizationEntryIterMut<'_> {
103        self.operations.auths_mut()
104    }
105}
106
107type FlatMapOperationToSorobanAuthorizationEntryIter<'a> = core::iter::FlatMap<
108    core::slice::Iter<'a, Operation>,
109    core::slice::Iter<'a, SorobanAuthorizationEntry>,
110    fn(&'a Operation) -> core::slice::Iter<'a, SorobanAuthorizationEntry>,
111>;
112
113#[cfg(feature = "alloc")]
114type FlatMapOperationToSorobanAuthorizationEntryIterMut<'a> = core::iter::FlatMap<
115    core::slice::IterMut<'a, Operation>,
116    core::slice::IterMut<'a, SorobanAuthorizationEntry>,
117    fn(&'a mut Operation) -> core::slice::IterMut<'a, SorobanAuthorizationEntry>,
118>;
119
120impl<const MAX: u32> VecM<Operation, MAX> {
121    pub fn auths(&self) -> FlatMapOperationToSorobanAuthorizationEntryIter<'_> {
122        self.iter().flat_map(Operation::auths)
123    }
124
125    #[cfg(feature = "alloc")]
126    pub fn auths_mut(&mut self) -> FlatMapOperationToSorobanAuthorizationEntryIterMut<'_> {
127        self.iter_mut().flat_map(Operation::auths_mut)
128    }
129}
130
131impl Operation {
132    pub fn auths(&self) -> core::slice::Iter<'_, SorobanAuthorizationEntry> {
133        self.body.auths()
134    }
135
136    #[cfg(feature = "alloc")]
137    pub fn auths_mut(&mut self) -> core::slice::IterMut<'_, SorobanAuthorizationEntry> {
138        self.body.auths_mut()
139    }
140}
141
142impl OperationBody {
143    pub fn auths(&self) -> core::slice::Iter<'_, SorobanAuthorizationEntry> {
144        match self {
145            OperationBody::InvokeHostFunction(op) => op.auths(),
146            _ => [].iter(),
147        }
148    }
149
150    #[cfg(feature = "alloc")]
151    pub fn auths_mut(&mut self) -> core::slice::IterMut<'_, SorobanAuthorizationEntry> {
152        match self {
153            OperationBody::InvokeHostFunction(op) => op.auths_mut(),
154            _ => [].iter_mut(),
155        }
156    }
157}
158
159impl InvokeHostFunctionOp {
160    pub fn auths(&self) -> core::slice::Iter<'_, SorobanAuthorizationEntry> {
161        self.auth.iter()
162    }
163
164    #[cfg(feature = "alloc")]
165    pub fn auths_mut(&mut self) -> core::slice::IterMut<'_, SorobanAuthorizationEntry> {
166        self.auth.iter_mut()
167    }
168}