gcp_pubsub/presenters/
encoded_message.rs1use crate::error;
2use base64;
3use chrono::{DateTime, Utc};
4use serde::Serialize;
5use serde_derive::Deserialize;
6
7#[derive(Deserialize, Clone, Serialize, Debug)]
8pub struct EncodedMessage {
9 pub data: String,
10 #[serde(skip_serializing, alias = "messageId")]
11 pub message_id: String,
12 #[serde(skip_serializing, alias = "publishTime")]
13 pub publish_time: DateTime<Utc>,
14}
15
16pub trait FromPubSubMessage
17where
18 Self: std::marker::Sized,
19{
20 fn from(message: EncodedMessage) -> Result<Self, error::Error>;
21}
22
23impl EncodedMessage {
24 pub fn decode(&self) -> Result<Vec<u8>, base64::DecodeError> {
25 base64::decode(&self.data)
26 }
27
28 pub fn new<T: serde::Serialize>(data: &T) -> Self {
29 let json = serde_json::to_string(data).unwrap();
30 let data = base64::encode(&json);
31 EncodedMessage {
32 message_id: "".to_owned(),
33 publish_time: Utc::now(),
34 data,
35 }
36 }
37}