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)]
75#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
76#[cfg_attr(feature = "schemars", derive(JsonSchema))]
77pub struct ChannelMessageEnvelope {
78 pub id: String,
80 pub tenant: TenantCtx,
82 pub channel: String,
84 pub session_id: String,
86 #[cfg_attr(
88 feature = "serde",
89 serde(default, skip_serializing_if = "Option::is_none")
90 )]
91 pub reply_scope: Option<ReplyScope>,
92 #[cfg_attr(
94 feature = "serde",
95 serde(default, skip_serializing_if = "Option::is_none")
96 )]
97 pub from: Option<Actor>,
98 #[cfg_attr(
100 feature = "serde",
101 serde(default, skip_serializing_if = "Vec::is_empty")
102 )]
103 pub to: Vec<Destination>,
104 #[cfg_attr(
106 feature = "serde",
107 serde(default, skip_serializing_if = "Option::is_none")
108 )]
109 pub correlation_id: Option<String>,
110 #[cfg_attr(
112 feature = "serde",
113 serde(default, skip_serializing_if = "Option::is_none")
114 )]
115 pub text: Option<String>,
116 #[cfg_attr(
118 feature = "serde",
119 serde(default, skip_serializing_if = "Vec::is_empty")
120 )]
121 pub attachments: Vec<Attachment>,
122 #[cfg_attr(feature = "serde", serde(default))]
124 pub metadata: MessageMetadata,
125 #[cfg_attr(
131 feature = "serde",
132 serde(default, skip_serializing_if = "BTreeMap::is_empty")
133 )]
134 pub extensions: alloc::collections::BTreeMap<String, serde_json::Value>,
135}
136
137pub mod extensions;
138pub mod rendering;
139pub mod universal_dto;