tx3_sdk/tii/
spec.rs

1use schemars::schema::Schema;
2use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4
5use crate::core::TirEnvelope;
6
7/// Root structure for TII (Transaction Invocation Interface) JSON files
8#[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/// TII version information
30#[derive(Debug, Clone, Serialize, Deserialize)]
31pub struct TiiInfo {
32    pub version: String,
33}
34
35/// Protocol metadata
36#[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/// Transaction definition
49#[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/// Environment definition
65#[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/// Components section containing schemas and other components
78#[derive(Debug, Clone, Serialize, Deserialize)]
79pub struct Components {
80    #[serde(skip_serializing_if = "HashMap::is_empty")]
81    pub schemas: HashMap<String, Schema>,
82}