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::TenantCtx;
11
12pub type MessageMetadata = BTreeMap<String, String>;
14
15#[derive(Clone, Debug, PartialEq, Eq)]
17#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
18#[cfg_attr(feature = "schemars", derive(JsonSchema))]
19pub struct Attachment {
20 pub mime_type: String,
22 pub url: String,
24 #[cfg_attr(
26 feature = "serde",
27 serde(default, skip_serializing_if = "Option::is_none")
28 )]
29 pub name: Option<String>,
30 #[cfg_attr(
32 feature = "serde",
33 serde(default, skip_serializing_if = "Option::is_none")
34 )]
35 pub size_bytes: Option<u64>,
36}
37
38#[derive(Clone, Debug, PartialEq, Eq)]
40#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
41#[cfg_attr(feature = "schemars", derive(JsonSchema))]
42pub struct ChannelMessageEnvelope {
43 pub id: String,
45 pub tenant: TenantCtx,
47 pub channel: String,
49 pub session_id: String,
51 #[cfg_attr(
53 feature = "serde",
54 serde(default, skip_serializing_if = "Option::is_none")
55 )]
56 pub user_id: Option<String>,
57 #[cfg_attr(
59 feature = "serde",
60 serde(default, skip_serializing_if = "Option::is_none")
61 )]
62 pub text: Option<String>,
63 #[cfg_attr(
65 feature = "serde",
66 serde(default, skip_serializing_if = "Vec::is_empty")
67 )]
68 pub attachments: Vec<Attachment>,
69 #[cfg_attr(feature = "serde", serde(default))]
71 pub metadata: MessageMetadata,
72}