use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize, JsonSchema, clap::Args)]
pub struct ReportInput {
#[arg(long)]
pub request: String,
}
#[derive(Debug, Serialize, JsonSchema)]
pub struct ReportOutput {
pub request: String,
pub chain_id: u64,
pub owner: String,
pub agent: String,
pub receive: ReportToken,
pub max_loss_bps: u16,
pub grant: GrantState,
pub as_of: String,
pub tokens: Vec<ReportRow>,
pub summary: Summary,
pub next: Vec<String>,
pub warnings: Vec<String>,
}
#[derive(Debug, Serialize, JsonSchema)]
pub struct ReportToken {
pub address: String,
pub symbol: String,
pub decimals: u8,
}
#[derive(Debug, Serialize, JsonSchema)]
pub struct GrantState {
pub expiry: u64,
pub expires_at: String,
pub active: bool,
pub generation_matches: bool,
}
#[derive(Debug, Serialize, JsonSchema)]
pub struct ReportRow {
pub token: String,
pub symbol: String,
pub status: String,
pub cap_raw: String,
pub cap: String,
pub sold_raw: String,
pub sold: String,
pub received_raw: Option<String>,
pub received: Option<String>,
pub value_usd: Option<String>,
pub discount_pct: Option<String>,
pub unsold_raw: String,
pub unsold_value_usd: Option<String>,
pub open_until: Option<String>,
pub fills: Vec<FillRow>,
}
#[derive(Debug, Serialize, JsonSchema)]
pub struct FillRow {
pub intent_id: String,
pub amount_in_raw: String,
pub received_raw: Option<String>,
pub tx_hash: Option<String>,
pub filled_at: Option<String>,
}
#[derive(Debug, Serialize, JsonSchema)]
pub struct Summary {
pub tokens_sold: usize,
pub tokens_total: usize,
pub received_raw: String,
pub received: String,
pub received_usd: Option<String>,
pub sold_value_usd: String,
pub known_proceeds_tokens: usize,
pub known_proceeds_value_usd: String,
pub unknown_proceeds_tokens: usize,
pub unknown_proceeds_value_usd: String,
pub average_discount_pct: Option<String>,
pub worst_discount_pct: Option<String>,
pub worst_discount_token: Option<String>,
pub unsold_value_usd: String,
pub open_intents: usize,
}