use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Clone, Debug, Default)]
#[serde(rename_all = "PascalCase")]
pub struct IdCard {
pub display_name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub data: Option<OpaqueData>,
}
pub type OpaqueData = serde_json::Value;
#[derive(Serialize, Deserialize, Clone, Debug, Default)]
#[serde(rename_all = "PascalCase")]
pub struct TradeOrder {
pub requests: Vec<TradeRequest>,
pub all_or_nothing: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub note: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
#[serde(rename_all = "PascalCase")]
pub struct TradeResponse {
pub order: TradeOrder,
pub trades: Vec<TradeRequest>,
#[serde(skip_serializing_if = "Option::is_none")]
pub note: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default)]
#[serde(rename_all = "PascalCase")]
pub struct TradeRequest {
pub id: String,
pub wanted: Vec<Item>,
pub offered: Vec<Item>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data: Option<OpaqueData>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default)]
#[serde(rename_all = "PascalCase")]
pub struct Item {
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
pub attributes: Vec<AttributeModifier>,
pub amount: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub data: Option<OpaqueData>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default)]
#[serde(rename_all = "PascalCase")]
pub struct AttributeModifier {
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
pub amount: i32,
pub kind: ModifierKind,
#[serde(skip_serializing_if = "Option::is_none")]
pub data: Option<OpaqueData>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default)]
#[serde(rename_all = "PascalCase")]
pub enum ModifierKind {
#[default]
Flat,
Percent,
}