1use jose_jwa::Signing;
2use serde::{Deserialize, Serialize};
3use serde_with::skip_serializing_none;
4
5pub use mime;
6pub use semver::Version;
7pub use time::OffsetDateTime;
8use xdid::core::did_url::DidUrl;
9
10pub mod cid;
11pub mod data;
12pub mod descriptor;
13
14#[skip_serializing_none]
15#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
16#[serde(rename_all = "camelCase")]
17pub struct Message {
18 pub record_id: String,
19 pub data: Option<data::Data>,
20 pub descriptor: descriptor::Descriptor,
21 pub attestation: Option<Jws>,
22 pub authorization: Option<Jws>,
23}
24
25#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
26pub struct Jws {
27 pub payload: String,
29 pub signatures: Vec<Signature>,
30}
31
32#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
33pub struct Signature {
34 pub header: Header,
35 pub signature: String,
37}
38
39#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
40pub struct Header {
41 pub alg: Signing,
42 pub kid: DidUrl,
43}
44
45#[skip_serializing_none]
46#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
47#[serde(rename_all = "camelCase")]
48pub struct AuthPayload {
49 pub descriptor_cid: String,
50 pub permissions_grant_cid: Option<String>,
51 pub attestation_cid: Option<String>,
52}