xmtp_api_d14n/protocol/extractors/
bytes.rs1use prost::Message;
3use xmtp_proto::ConversionError;
4use xmtp_proto::xmtp::mls::api::v1::{
5 group_message::V1 as V3GroupMessage, welcome_message::V1 as V3WelcomeMessage,
6};
7use xmtp_proto::xmtp::xmtpv4::envelopes::OriginatorEnvelope;
8
9use crate::protocol::{EnvelopeVisitor, Extractor};
10
11#[derive(Default, Clone, Debug)]
15pub struct BytesExtractor {
16 buffer: Vec<u8>,
17}
18
19impl BytesExtractor {
20 pub fn new() -> Self {
21 Default::default()
22 }
23}
24
25impl Extractor for BytesExtractor {
26 type Output = Vec<u8>;
27
28 fn get(self) -> Self::Output {
29 self.buffer
30 }
31}
32
33impl EnvelopeVisitor<'_> for BytesExtractor {
34 type Error = ConversionError;
35 fn visit_originator(&mut self, e: &OriginatorEnvelope) -> Result<(), Self::Error> {
36 e.encode(&mut self.buffer)?;
37 Ok(())
38 }
39
40 fn visit_v3_group_message(&mut self, e: &V3GroupMessage) -> Result<(), Self::Error> {
41 e.encode(&mut self.buffer)?;
42 Ok(())
43 }
44
45 fn visit_v3_welcome_message(&mut self, e: &V3WelcomeMessage) -> Result<(), Self::Error> {
46 e.encode(&mut self.buffer)?;
47 Ok(())
48 }
49}