1use schemars::schema::Schema;
2use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4
5use crate::core::TirEnvelope;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct TiiFile {
10 pub tii: TiiInfo,
11
12 pub protocol: Protocol,
13
14 #[serde(default, skip_serializing_if = "Option::is_none")]
15 pub environment: Option<Schema>,
16
17 #[serde(default, skip_serializing_if = "HashMap::is_empty")]
18 pub parties: HashMap<String, Party>,
19
20 pub transactions: HashMap<String, Transaction>,
21
22 #[serde(default, skip_serializing_if = "HashMap::is_empty")]
23 pub profiles: HashMap<String, Profile>,
24
25 #[serde(default, skip_serializing_if = "Option::is_none")]
26 pub components: Option<Components>,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
31pub struct TiiInfo {
32 pub version: String,
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize)]
37pub struct Protocol {
38 pub name: String,
39 pub version: String,
40
41 #[serde(default)]
42 pub scope: String,
43
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub description: Option<String>,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
50pub struct Transaction {
51 pub tir: TirEnvelope,
52 pub params: Schema,
53
54 #[serde(skip_serializing_if = "Option::is_none")]
55 pub description: Option<String>,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize)]
59pub struct Party {
60 #[serde(default, skip_serializing_if = "Option::is_none")]
61 pub description: Option<String>,
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize, Default)]
66pub struct Profile {
67 #[serde(skip_serializing_if = "Option::is_none")]
68 pub description: Option<String>,
69
70 #[serde(default)]
71 pub environment: serde_json::Value,
72
73 #[serde(default, skip_serializing_if = "HashMap::is_empty")]
74 pub parties: HashMap<String, String>,
75}
76
77#[derive(Debug, Clone, Serialize, Deserialize)]
79pub struct Components {
80 #[serde(skip_serializing_if = "HashMap::is_empty")]
81 pub schemas: HashMap<String, Schema>,
82}