use serde::{Deserialize, Serialize};
use crate::error::ErrorCode;
use crate::ids::MessageId;
pub use crate::messages::{PingPayload, PongPayload};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct AckPayload {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub note: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct NackPayload {
pub code: ErrorCode,
pub message: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub details: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum CancelTargetKind {
Job,
Stream,
Session,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct CancelPayload {
pub target: CancelTargetKind,
pub target_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub deadline_ms: Option<u64>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct CancelAcceptedPayload {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub target_id: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct CancelRefusedPayload {
pub target_id: String,
pub reason: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct InterruptPayload {
pub target: CancelTargetKind,
pub target_id: String,
pub prompt: String,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct ResumePayload {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub after_message_id: Option<MessageId>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub checkpoint_id: Option<String>,
#[serde(default, skip_serializing_if = "is_false")]
pub include_open_streams: bool,
}
#[allow(clippy::trivially_copy_pass_by_ref)]
const fn is_false(b: &bool) -> bool {
!*b
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct BackpressurePayload {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub desired_rate_per_second: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub buffer_remaining_bytes: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
}