use super::{get_message_id, GenericError, MsgId, Params, RequestPayload, ValidationError};
use crate::jwt::decode::{SubscriptionId, Topic};
use serde::{Deserialize, Serialize};
impl MsgId for Subscription {
fn msg_id(&self) -> String {
get_message_id(&self.data.message)
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct Subscription {
pub id: SubscriptionId,
pub data: SubscriptionData,
}
impl RequestPayload for Subscription {
type Error = GenericError;
type Response = bool;
fn validate(&self) -> Result<(), ValidationError> {
self.id.decode().map_err(ValidationError::SubscriptionIdDecoding)?;
self.data.topic.decode().map_err(ValidationError::TopicDecoding)?;
Ok(())
}
fn into_params(self) -> Params {
Params::Subscription(self)
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SubscriptionData {
pub topic: Topic,
pub message: String,
pub published_at: i64,
pub tag: u32,
}