Skip to content

Commit 566af62

Browse files
committed
feature: Add attributes to published EncodedMessage
1 parent 7d010a7 commit 566af62

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

src/message.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
use crate::error;
22
use base64;
33
use serde_derive::{Deserialize, Serialize};
4+
use std::collections::HashMap;
45

56
#[derive(Deserialize, Clone, Serialize)]
67
pub struct EncodedMessage {
78
data: String,
9+
attributes: HashMap<String, String>,
810
}
911

1012
pub trait FromPubSubMessage
@@ -19,10 +21,13 @@ impl EncodedMessage {
1921
base64::decode(&self.data)
2022
}
2123

22-
pub fn new<T: serde::Serialize>(data: &T) -> Self {
24+
pub fn new<T: serde::Serialize>(data: &T, attributes: Option<HashMap<String, String>>) -> Self {
2325
let json = serde_json::to_string(data).unwrap();
2426
let data = base64::encode(&json);
25-
EncodedMessage { data }
27+
EncodedMessage {
28+
data,
29+
attributes: attributes.unwrap_or_default(),
30+
}
2631
}
2732
}
2833

src/topic.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,20 @@ impl Topic {
6161
pub async fn publish<T: serde::Serialize>(
6262
&self,
6363
data: T,
64+
) -> Result<PublishMessageResponse, error::Error> {
65+
self.publish_message(EncodedMessage::new(&data, None)).await
66+
}
67+
68+
pub async fn publish_message(
69+
&self,
70+
message: EncodedMessage,
6471
) -> Result<PublishMessageResponse, error::Error> {
6572
let uri: hyper::Uri = format!("{}/v1/{}:publish", *PUBSUB_HOST, self.name)
6673
.parse()
6774
.unwrap();
6875

69-
let new_message = EncodedMessage::new(&data);
7076
let payload = PublishMessageRequest {
71-
messages: vec![new_message],
77+
messages: vec![message],
7278
};
7379

7480
self.perform_request::<PublishMessageRequest, PublishMessageResponse>(

0 commit comments

Comments
 (0)