use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Metadata {
#[serde(skip_serializing_if = "Option::is_none")]
pub owner: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub info: Option<MetadataInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub token: Option<TokenInfo>,
#[serde(default)]
pub enums: HashMap<String, HashMap<String, String>>,
#[serde(default)]
pub constants: HashMap<String, serde_json::Value>,
#[serde(rename = "contractName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub contract_name: Option<String>,
#[serde(default)]
pub maps: HashMap<String, MapDefinition>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MetadataInfo {
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(rename = "legalName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub legal_name: Option<String>,
#[serde(rename = "lastUpdate")]
#[serde(skip_serializing_if = "Option::is_none")]
pub last_update: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TokenInfo {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ticker: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub decimals: Option<u8>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MapDefinition {
#[serde(rename = "keyPath")]
#[serde(skip_serializing_if = "Option::is_none")]
pub key_path: Option<String>,
#[serde(default)]
pub entries: HashMap<String, String>,
}