arcp_core/messages/
streaming.rs1use serde::{Deserialize, Serialize};
4
5use crate::error::ErrorCode;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
9#[serde(rename_all = "lowercase")]
10pub enum StreamKind {
11 Text,
13 Binary,
15 Event,
17 Log,
19 Metric,
21 Thought,
23}
24
25#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
27pub struct StreamOpenPayload {
28 pub kind: StreamKind,
30 #[serde(default, skip_serializing_if = "Option::is_none")]
32 pub content_type: Option<String>,
33 #[serde(default, skip_serializing_if = "Option::is_none")]
35 pub encoding: Option<String>,
36}
37
38#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
40pub struct StreamChunkPayload {
41 pub sequence: u64,
43 pub data: serde_json::Value,
49 #[serde(default, skip_serializing_if = "Option::is_none")]
51 pub content_type: Option<String>,
52 #[serde(default, skip_serializing_if = "Option::is_none")]
54 pub sha256: Option<String>,
55 #[serde(default, skip_serializing_if = "is_false")]
57 pub redacted: bool,
58 #[serde(default, skip_serializing_if = "Option::is_none")]
60 pub role: Option<String>,
61}
62
63#[allow(clippy::trivially_copy_pass_by_ref)]
64const fn is_false(b: &bool) -> bool {
65 !*b
66}
67
68#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
70pub struct StreamClosePayload {
71 #[serde(default, skip_serializing_if = "Option::is_none")]
73 pub final_sequence: Option<u64>,
74}
75
76#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
78pub struct StreamErrorPayload {
79 pub code: ErrorCode,
81 pub message: String,
83}