arcp_core/messages/
control.rs1use serde::{Deserialize, Serialize};
4
5use crate::error::ErrorCode;
6use crate::ids::MessageId;
7
8pub use crate::messages::{PingPayload, PongPayload};
9
10#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
12pub struct AckPayload {
13 #[serde(default, skip_serializing_if = "Option::is_none")]
15 pub note: Option<String>,
16}
17
18#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
20pub struct NackPayload {
21 pub code: ErrorCode,
23 pub message: String,
25 #[serde(default, skip_serializing_if = "Option::is_none")]
27 pub details: Option<serde_json::Value>,
28}
29
30#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
32#[serde(rename_all = "snake_case")]
33pub enum CancelTargetKind {
34 Job,
36 Stream,
38 Session,
40}
41
42#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
44pub struct CancelPayload {
45 pub target: CancelTargetKind,
47 pub target_id: String,
49 #[serde(default, skip_serializing_if = "Option::is_none")]
51 pub reason: Option<String>,
52 #[serde(default, skip_serializing_if = "Option::is_none")]
54 pub deadline_ms: Option<u64>,
55}
56
57#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
59pub struct CancelAcceptedPayload {
60 #[serde(default, skip_serializing_if = "Option::is_none")]
62 pub target_id: Option<String>,
63}
64
65#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
67pub struct CancelRefusedPayload {
68 pub target_id: String,
70 pub reason: String,
72}
73
74#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
76pub struct InterruptPayload {
77 pub target: CancelTargetKind,
79 pub target_id: String,
81 pub prompt: String,
83}
84
85#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
87pub struct ResumePayload {
88 #[serde(default, skip_serializing_if = "Option::is_none")]
90 pub after_message_id: Option<MessageId>,
91 #[serde(default, skip_serializing_if = "Option::is_none")]
93 pub checkpoint_id: Option<String>,
94 #[serde(default, skip_serializing_if = "is_false")]
96 pub include_open_streams: bool,
97}
98
99#[allow(clippy::trivially_copy_pass_by_ref)]
100const fn is_false(b: &bool) -> bool {
101 !*b
102}
103
104#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
106pub struct BackpressurePayload {
107 #[serde(default, skip_serializing_if = "Option::is_none")]
109 pub desired_rate_per_second: Option<u32>,
110 #[serde(default, skip_serializing_if = "Option::is_none")]
112 pub buffer_remaining_bytes: Option<u64>,
113 #[serde(default, skip_serializing_if = "Option::is_none")]
115 pub reason: Option<String>,
116}