use std::collections::BTreeMap;
use serde::Deserialize;
use serde::Serialize;
use crate::property::StorageProperty;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PubsubMessage {
#[serde(skip_serializing_if = "Option::is_none")]
pub message_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub publish_time: Option<jiff::Timestamp>,
#[serde(skip_serializing_if = "BTreeMap::is_empty")]
#[serde(default)]
pub attributes: BTreeMap<String, String>,
pub data: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReceivedMessage {
pub ack_id: String,
pub message: PubsubMessage,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateTopicRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub storage: Option<StorageProperty>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateTopicResponse {
pub name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PublishMessageRequest {
pub messages: Vec<PubsubMessage>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PublishMessageResponse {
pub message_ids: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateSubscriptionRequest {
pub topic_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreateSubscriptionResponse {
pub topic: String,
pub name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PullMessageRequest {
pub max_messages: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PullMessageResponse {
pub messages: Vec<ReceivedMessage>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AcknowledgeRequest {
pub ack_ids: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AcknowledgeResponse {}