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    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/// TII version information
24#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct TiiInfo {
26    pub version: String,
27}
28
29/// Protocol metadata
30#[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/// Transaction definition
40#[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/// Environment definition
54#[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/// Components section containing schemas and other components
64#[derive(Debug, Clone, Serialize, Deserialize)]
65pub struct Components {
66    #[serde(skip_serializing_if = "HashMap::is_empty")]
67    pub schemas: HashMap<String, Schema>,
68}