1use alloc::{string::String, vec::Vec};
4
5#[cfg(feature = "schemars")]
6use schemars::JsonSchema;
7#[cfg(feature = "serde")]
8use serde::{Deserialize, Serialize};
9
10use crate::TenantCtx;
11
12#[derive(Clone, Debug, PartialEq, Eq)]
14#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
15#[cfg_attr(feature = "schemars", derive(JsonSchema))]
16pub struct WorkerRequest {
17 pub version: String,
19 pub tenant: TenantCtx,
21 pub worker_id: String,
23 #[cfg_attr(
25 feature = "serde",
26 serde(default, skip_serializing_if = "Option::is_none")
27 )]
28 pub correlation_id: Option<String>,
29 #[cfg_attr(
31 feature = "serde",
32 serde(default, skip_serializing_if = "Option::is_none")
33 )]
34 pub session_id: Option<String>,
35 #[cfg_attr(
37 feature = "serde",
38 serde(default, skip_serializing_if = "Option::is_none")
39 )]
40 pub thread_id: Option<String>,
41 pub payload_json: String,
43 pub timestamp_utc: String,
45}
46
47#[derive(Clone, Debug, PartialEq, Eq)]
49#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
50#[cfg_attr(feature = "schemars", derive(JsonSchema))]
51pub struct WorkerMessage {
52 pub kind: String,
54 pub payload_json: String,
56}
57
58#[derive(Clone, Debug, PartialEq, Eq)]
60#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
61#[cfg_attr(feature = "schemars", derive(JsonSchema))]
62pub struct WorkerResponse {
63 pub version: String,
65 pub tenant: TenantCtx,
67 pub worker_id: String,
69 #[cfg_attr(
71 feature = "serde",
72 serde(default, skip_serializing_if = "Option::is_none")
73 )]
74 pub correlation_id: Option<String>,
75 #[cfg_attr(
77 feature = "serde",
78 serde(default, skip_serializing_if = "Option::is_none")
79 )]
80 pub session_id: Option<String>,
81 #[cfg_attr(
83 feature = "serde",
84 serde(default, skip_serializing_if = "Option::is_none")
85 )]
86 pub thread_id: Option<String>,
87 #[cfg_attr(
89 feature = "serde",
90 serde(default, skip_serializing_if = "Vec::is_empty")
91 )]
92 pub messages: Vec<WorkerMessage>,
93 pub timestamp_utc: String,
95}