stellar-xdr 26.0.0

Stellar XDR types, encoding, and decoding.
Documentation
use super::{
    FeeBumpTransaction, FeeBumpTransactionEnvelope, FeeBumpTransactionInnerTx,
    InvokeHostFunctionOp, Operation, OperationBody, SorobanAuthorizationEntry, Transaction,
    TransactionEnvelope, TransactionV0, TransactionV0Envelope, TransactionV1Envelope, VecM,
};

impl TransactionEnvelope {
    pub fn auths(&self) -> FlatMapOperationToSorobanAuthorizationEntryIter<'_> {
        match self {
            TransactionEnvelope::TxV0(e) => e.auths(),
            TransactionEnvelope::Tx(e) => e.auths(),
            TransactionEnvelope::TxFeeBump(e) => e.auths(),
        }
    }

    #[cfg(feature = "alloc")]
    pub fn auths_mut(&mut self) -> FlatMapOperationToSorobanAuthorizationEntryIterMut<'_> {
        match self {
            TransactionEnvelope::TxV0(e) => e.auths_mut(),
            TransactionEnvelope::Tx(e) => e.auths_mut(),
            TransactionEnvelope::TxFeeBump(e) => e.auths_mut(),
        }
    }
}

impl FeeBumpTransactionEnvelope {
    pub fn auths(&self) -> FlatMapOperationToSorobanAuthorizationEntryIter<'_> {
        self.tx.auths()
    }

    #[cfg(feature = "alloc")]
    pub fn auths_mut(&mut self) -> FlatMapOperationToSorobanAuthorizationEntryIterMut<'_> {
        self.tx.auths_mut()
    }
}

impl FeeBumpTransaction {
    pub fn auths(&self) -> FlatMapOperationToSorobanAuthorizationEntryIter<'_> {
        self.inner_tx.auths()
    }

    #[cfg(feature = "alloc")]
    pub fn auths_mut(&mut self) -> FlatMapOperationToSorobanAuthorizationEntryIterMut<'_> {
        self.inner_tx.auths_mut()
    }
}

impl FeeBumpTransactionInnerTx {
    pub fn auths(&self) -> FlatMapOperationToSorobanAuthorizationEntryIter<'_> {
        match self {
            FeeBumpTransactionInnerTx::Tx(e) => e.auths(),
        }
    }

    #[cfg(feature = "alloc")]
    pub fn auths_mut(&mut self) -> FlatMapOperationToSorobanAuthorizationEntryIterMut<'_> {
        match self {
            FeeBumpTransactionInnerTx::Tx(e) => e.auths_mut(),
        }
    }
}

impl TransactionV1Envelope {
    pub fn auths(&self) -> FlatMapOperationToSorobanAuthorizationEntryIter<'_> {
        self.tx.auths()
    }

    #[cfg(feature = "alloc")]
    pub fn auths_mut(&mut self) -> FlatMapOperationToSorobanAuthorizationEntryIterMut<'_> {
        self.tx.auths_mut()
    }
}

impl TransactionV0Envelope {
    pub fn auths(&self) -> FlatMapOperationToSorobanAuthorizationEntryIter<'_> {
        self.tx.auths()
    }

    #[cfg(feature = "alloc")]
    pub fn auths_mut(&mut self) -> FlatMapOperationToSorobanAuthorizationEntryIterMut<'_> {
        self.tx.auths_mut()
    }
}

impl Transaction {
    pub fn auths(&self) -> FlatMapOperationToSorobanAuthorizationEntryIter<'_> {
        self.operations.auths()
    }

    #[cfg(feature = "alloc")]
    pub fn auths_mut(&mut self) -> FlatMapOperationToSorobanAuthorizationEntryIterMut<'_> {
        self.operations.auths_mut()
    }
}

impl TransactionV0 {
    pub fn auths(&self) -> FlatMapOperationToSorobanAuthorizationEntryIter<'_> {
        self.operations.auths()
    }

    #[cfg(feature = "alloc")]
    pub fn auths_mut(&mut self) -> FlatMapOperationToSorobanAuthorizationEntryIterMut<'_> {
        self.operations.auths_mut()
    }
}

type FlatMapOperationToSorobanAuthorizationEntryIter<'a> = core::iter::FlatMap<
    core::slice::Iter<'a, Operation>,
    core::slice::Iter<'a, SorobanAuthorizationEntry>,
    fn(&'a Operation) -> core::slice::Iter<'a, SorobanAuthorizationEntry>,
>;

#[cfg(feature = "alloc")]
type FlatMapOperationToSorobanAuthorizationEntryIterMut<'a> = core::iter::FlatMap<
    core::slice::IterMut<'a, Operation>,
    core::slice::IterMut<'a, SorobanAuthorizationEntry>,
    fn(&'a mut Operation) -> core::slice::IterMut<'a, SorobanAuthorizationEntry>,
>;

impl<const MAX: u32> VecM<Operation, MAX> {
    pub fn auths(&self) -> FlatMapOperationToSorobanAuthorizationEntryIter<'_> {
        self.iter().flat_map(Operation::auths)
    }

    #[cfg(feature = "alloc")]
    pub fn auths_mut(&mut self) -> FlatMapOperationToSorobanAuthorizationEntryIterMut<'_> {
        self.iter_mut().flat_map(Operation::auths_mut)
    }
}

impl Operation {
    pub fn auths(&self) -> core::slice::Iter<'_, SorobanAuthorizationEntry> {
        self.body.auths()
    }

    #[cfg(feature = "alloc")]
    pub fn auths_mut(&mut self) -> core::slice::IterMut<'_, SorobanAuthorizationEntry> {
        self.body.auths_mut()
    }
}

impl OperationBody {
    pub fn auths(&self) -> core::slice::Iter<'_, SorobanAuthorizationEntry> {
        match self {
            OperationBody::InvokeHostFunction(op) => op.auths(),
            _ => [].iter(),
        }
    }

    #[cfg(feature = "alloc")]
    pub fn auths_mut(&mut self) -> core::slice::IterMut<'_, SorobanAuthorizationEntry> {
        match self {
            OperationBody::InvokeHostFunction(op) => op.auths_mut(),
            _ => [].iter_mut(),
        }
    }
}

impl InvokeHostFunctionOp {
    pub fn auths(&self) -> core::slice::Iter<'_, SorobanAuthorizationEntry> {
        self.auth.iter()
    }

    #[cfg(feature = "alloc")]
    pub fn auths_mut(&mut self) -> core::slice::IterMut<'_, SorobanAuthorizationEntry> {
        self.auth.iter_mut()
    }
}