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 pub protocol: Protocol,
12 #[serde(skip_serializing_if = "Option::is_none")]
13 pub environment: Option<Schema>,
14 #[serde(default)]
15 pub parties: HashMap<String, Party>,
16 pub transactions: HashMap<String, Transaction>,
17 #[serde(skip_serializing_if = "HashMap::is_empty")]
18 pub profiles: HashMap<String, Profile>,
19 #[serde(skip_serializing_if = "Option::is_none")]
20 pub components: Option<Components>,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct TiiInfo {
26 pub version: String,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
31pub struct Protocol {
32 pub scope: String,
33 pub name: String,
34 pub version: String,
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub description: Option<String>,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct Transaction {
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub description: Option<String>,
44 pub tir: TirEnvelope,
45 pub params: Schema,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
49pub struct Party {
50 pub description: Option<String>,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize, Default)]
55pub struct Profile {
56 #[serde(skip_serializing_if = "Option::is_none")]
57 pub description: Option<String>,
58 pub environment: serde_json::Value,
59 #[serde(default)]
60 pub parties: HashMap<String, String>,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize)]
65pub struct Components {
66 #[serde(skip_serializing_if = "HashMap::is_empty")]
67 pub schemas: HashMap<String, Schema>,
68}