dwn_rs_core/
message.rs

1use std::collections::BTreeMap;
2
3use chrono::{DateTime, Utc};
4use libipld_core::ipld::Ipld;
5use serde::{Deserialize, Serialize};
6
7#[derive(Serialize, Deserialize, Debug, Default, PartialEq, Clone)]
8pub struct JWS {
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub payload: Option<String>,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub signatures: Option<Vec<SignatureEntry>>,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub header: Option<BTreeMap<String, Ipld>>,
15    #[serde(flatten)]
16    pub extra: BTreeMap<String, Ipld>,
17}
18
19#[derive(Serialize, Deserialize, Debug, Default, PartialEq, Clone)]
20pub struct SignatureEntry {
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub payload: Option<String>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub protected: Option<String>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub signature: Option<String>,
27    #[serde(flatten)]
28    pub extra: BTreeMap<String, Ipld>,
29}
30
31#[derive(Serialize, Deserialize, Debug, Default, PartialEq, Clone)]
32pub struct Message {
33    pub descriptor: Descriptor,
34    #[serde(rename = "recordId", skip_serializing_if = "Option::is_none")]
35    pub record_id: Option<String>,
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub authorization: Option<JWS>,
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub attestation: Option<JWS>,
40    #[serde(flatten)]
41    pub extra: BTreeMap<String, Ipld>,
42}
43
44#[derive(Serialize, Deserialize, Debug, Default, PartialEq, Clone)]
45pub struct Descriptor {
46    pub interface: String,
47    pub method: String,
48    #[serde(rename = "dataSize", skip_serializing_if = "Option::is_none")]
49    pub data_size: Option<u32>,
50    #[serde(
51        rename = "messageTimestamp",
52        serialize_with = "crate::serde::serialize_optional_datetime",
53        skip_serializing_if = "Option::is_none"
54    )]
55    pub timestamp: Option<DateTime<Utc>>,
56    #[serde(
57        rename = "dateCreated",
58        serialize_with = "crate::serde::serialize_optional_datetime",
59        skip_serializing_if = "Option::is_none"
60    )]
61    pub date_created: Option<DateTime<Utc>>,
62    #[serde(
63        rename = "datePublished",
64        serialize_with = "crate::serde::serialize_optional_datetime",
65        skip_serializing_if = "Option::is_none"
66    )]
67    pub date_published: Option<DateTime<Utc>>,
68    #[serde(skip_serializing_if = "Option::is_none")]
69    pub filter: Option<MessageFilter>,
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub published: Option<bool>,
72    #[serde(flatten)]
73    pub extra: BTreeMap<String, Ipld>,
74}
75
76#[derive(Serialize, Deserialize, Debug, Default, PartialEq, Clone)]
77pub struct MessageFilter {
78    #[serde(rename = "dateCreated", skip_serializing_if = "Option::is_none")]
79    pub date_created: Option<DateTime<Utc>>,
80    #[serde(flatten)]
81    pub extra: BTreeMap<String, Ipld>,
82}