use serde::{Deserialize, Serialize};
use crate::envelope::Priority;
use crate::error::ErrorCode;
use crate::ids::{JobId, MessageId, SessionId, StreamId, SubscriptionId, TraceId};
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct SubscriptionFilter {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub session_id: Vec<SessionId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub trace_id: Vec<TraceId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub job_id: Vec<JobId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub stream_id: Vec<StreamId>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub types: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub min_priority: Option<Priority>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct SubscriptionSince {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub after_message_id: Option<MessageId>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct SubscribePayload {
#[serde(default)]
pub filter: SubscriptionFilter,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub since: Option<SubscriptionSince>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SubscribeAcceptedPayload {
pub subscription_id: SubscriptionId,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SubscribeEventPayload {
pub event: serde_json::Value,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct UnsubscribePayload {
pub subscription_id: SubscriptionId,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SubscribeClosedPayload {
pub subscription_id: SubscriptionId,
pub code: ErrorCode,
pub reason: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct JobSubscribePayload {
pub job_id: JobId,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub from_event_seq: Option<u64>,
#[serde(default, skip_serializing_if = "is_false")]
pub history: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct JobSubscribedPayload {
pub job_id: JobId,
pub current_status: String,
pub agent: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub parent_job_id: Option<JobId>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub trace_id: Option<String>,
pub subscribed_from: u64,
#[serde(default, skip_serializing_if = "is_false")]
pub replayed: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct JobUnsubscribePayload {
pub job_id: JobId,
}
#[allow(clippy::trivially_copy_pass_by_ref)]
const fn is_false(b: &bool) -> bool {
!*b
}