greentic_types/
messaging.rs1use alloc::{collections::BTreeMap, string::String, vec::Vec};
4
5#[cfg(feature = "schemars")]
6use schemars::JsonSchema;
7#[cfg(feature = "serde")]
8use serde::{Deserialize, Serialize};
9
10use crate::{ReplyScope, 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 Actor {
17 pub id: String,
19 #[cfg_attr(
21 feature = "serde",
22 serde(default, skip_serializing_if = "Option::is_none")
23 )]
24 pub kind: Option<String>,
25}
26
27#[derive(Clone, Debug, PartialEq, Eq)]
29#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
30#[cfg_attr(feature = "schemars", derive(JsonSchema))]
31pub struct Destination {
32 pub id: String,
34 #[cfg_attr(
36 feature = "serde",
37 serde(default, skip_serializing_if = "Option::is_none")
38 )]
39 pub kind: Option<String>,
40}
41
42pub type MessageMetadata = BTreeMap<String, String>;
44
45#[derive(Clone, Debug, PartialEq, Eq)]
47#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
48#[cfg_attr(feature = "schemars", derive(JsonSchema))]
49pub struct Attachment {
50 pub mime_type: String,
52 pub url: String,
54 #[cfg_attr(
56 feature = "serde",
57 serde(default, skip_serializing_if = "Option::is_none")
58 )]
59 pub name: Option<String>,
60 #[cfg_attr(
62 feature = "serde",
63 serde(default, skip_serializing_if = "Option::is_none")
64 )]
65 pub size_bytes: Option<u64>,
66}
67
68#[derive(Clone, Debug, PartialEq, Eq)]
70#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
71#[cfg_attr(feature = "schemars", derive(JsonSchema))]
72pub struct ChannelMessageEnvelope {
73 pub id: String,
75 pub tenant: TenantCtx,
77 pub channel: String,
79 pub session_id: String,
81 #[cfg_attr(
83 feature = "serde",
84 serde(default, skip_serializing_if = "Option::is_none")
85 )]
86 pub reply_scope: Option<ReplyScope>,
87 #[cfg_attr(
89 feature = "serde",
90 serde(default, skip_serializing_if = "Option::is_none")
91 )]
92 pub from: Option<Actor>,
93 #[cfg_attr(
95 feature = "serde",
96 serde(default, skip_serializing_if = "Vec::is_empty")
97 )]
98 pub to: Vec<Destination>,
99 #[cfg_attr(
101 feature = "serde",
102 serde(default, skip_serializing_if = "Option::is_none")
103 )]
104 pub correlation_id: Option<String>,
105 #[cfg_attr(
107 feature = "serde",
108 serde(default, skip_serializing_if = "Option::is_none")
109 )]
110 pub text: Option<String>,
111 #[cfg_attr(
113 feature = "serde",
114 serde(default, skip_serializing_if = "Vec::is_empty")
115 )]
116 pub attachments: Vec<Attachment>,
117 #[cfg_attr(feature = "serde", serde(default))]
119 pub metadata: MessageMetadata,
120}