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 context_id: Option<String>,
20 pub data: Option<data::Data>,
21 pub descriptor: descriptor::Descriptor,
22 pub attestation: Option<Jws>,
23 pub authorization: Option<Jws>,
24}
25
26#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
27pub struct Jws {
28 pub payload: String,
30 pub signatures: Vec<Signature>,
31}
32
33#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
34pub struct Signature {
35 pub header: Header,
36 pub signature: String,
38}
39
40#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
41pub struct Header {
42 pub alg: Signing,
43 pub kid: DidUrl,
44}
45
46#[skip_serializing_none]
47#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
48#[serde(rename_all = "camelCase")]
49pub struct AuthPayload {
50 pub descriptor_cid: String,
51 pub permissions_grant_cid: Option<String>,
52 pub attestation_cid: Option<String>,
53}