Skip to main content

clear_signing/types/
metadata.rs

1//! Descriptor metadata: owner info, token details, enums, constants, and address books.
2
3use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6/// Metadata section of a descriptor.
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct Metadata {
9    /// Owner of this descriptor.
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub owner: Option<String>,
12
13    /// Human-readable info about the descriptor.
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub info: Option<MetadataInfo>,
16
17    /// Token metadata (for descriptors describing token contracts).
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub token: Option<TokenInfo>,
20
21    /// Enum definitions: key → { value → label }.
22    #[serde(default)]
23    pub enums: HashMap<String, HashMap<String, String>>,
24
25    /// Constant definitions: key → value.
26    #[serde(default)]
27    pub constants: HashMap<String, serde_json::Value>,
28
29    /// Contract name for display.
30    #[serde(rename = "contractName")]
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub contract_name: Option<String>,
33
34    /// Named lookup tables (v2).
35    #[serde(default)]
36    pub maps: HashMap<String, MapDefinition>,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct MetadataInfo {
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub url: Option<String>,
43
44    #[serde(rename = "legalName")]
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub legal_name: Option<String>,
47
48    #[serde(rename = "lastUpdate")]
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub last_update: Option<String>,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize)]
54pub struct TokenInfo {
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub name: Option<String>,
57
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub ticker: Option<String>,
60
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub decimals: Option<u8>,
63}
64
65/// A named map definition for value lookup/substitution (v2).
66#[derive(Debug, Clone, Serialize, Deserialize)]
67pub struct MapDefinition {
68    /// Path to the key in calldata (cross-field key resolution).
69    #[serde(rename = "keyPath")]
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub key_path: Option<String>,
72
73    /// The lookup entries: key → display value.
74    #[serde(default)]
75    pub entries: HashMap<String, String>,
76}