1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
use crate::error; use base64; use serde_derive::Deserialize; #[derive(Deserialize)] pub struct EncodedMessage { data: String, } pub trait FromPubSubMessage where Self: std::marker::Sized, { fn from(message: EncodedMessage) -> Result<Self, error::Error>; } impl EncodedMessage { pub fn decode(&self) -> Result<Vec<u8>, base64::DecodeError> { base64::decode(&self.data) } } #[derive(Deserialize)] pub(crate) struct Message { #[serde(alias = "ackId")] pub(crate) ack_id: String, pub(crate) message: EncodedMessage, }