xmtp_api_d14n/protocol/extractors/
orphaned_envelope.rs

1//! turns an envelope back into its protobuf `Body` bytes
2use crate::protocol::{
3    BytesExtractor, CursorExtractor, DependsOnExtractor, ExtractionError, Extractor,
4    GroupMessageExtractor,
5};
6use xmtp_proto::types::OrphanedEnvelope;
7
8/// Extract an [`OrphanedEnvelope`] from a envelope
9#[derive(Default, Clone, Debug)]
10pub struct OrphanExtractor {
11    inner: (
12        CursorExtractor,
13        DependsOnExtractor,
14        BytesExtractor,
15        GroupMessageExtractor,
16    ),
17}
18
19delegate_envelope_visitor!(OrphanExtractor);
20
21impl Extractor for OrphanExtractor {
22    type Output = Result<OrphanedEnvelope, ExtractionError>;
23
24    fn get(self) -> Self::Output {
25        let extracted = self.inner;
26        let mut envelope = OrphanedEnvelope::builder();
27        envelope.cursor(extracted.0.get()?);
28        envelope.depends_on(extracted.1.get().unwrap_or_default());
29        envelope.payload(extracted.2.get());
30        envelope.group_id(extracted.3.get()?.group_id);
31        Ok(envelope.build()?)
32    }
33}