use chrono::{DateTime, NaiveDate, Utc};
use rmcp::schemars;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, Serialize, Deserialize, schemars::JsonSchema, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum AssetClass {
Equity,
Bond,
Fx,
Commodity,
Rate,
Energy,
Index,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct Instrument {
pub id: String,
pub symbol: String,
pub name: String,
pub asset_class: AssetClass,
pub currency: String,
pub unit: String,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct Quote {
pub instrument_id: String,
pub bid: f64,
pub ask: f64,
pub last: f64,
pub at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct Bar {
pub instrument_id: String,
pub date: NaiveDate,
pub open: f64,
pub high: f64,
pub low: f64,
pub close: f64,
pub volume: f64,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, schemars::JsonSchema, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum CurveKind {
Yield,
Forward,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct CurvePoint {
pub tenor: f64,
pub value: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct Curve {
pub id: String,
pub name: String,
pub kind: CurveKind,
pub currency: String,
pub unit: String,
pub points: Vec<CurvePoint>,
pub as_of: NaiveDate,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct Benchmark {
pub id: String,
pub name: String,
pub members: Vec<String>,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct Watchlist {
pub id: String,
pub name: String,
pub owner: String,
pub instrument_ids: Vec<String>,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, schemars::JsonSchema, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum AlertCondition {
Above,
Below,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, schemars::JsonSchema, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum AlertStatus {
Armed,
Triggered,
Disabled,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct Alert {
pub id: String,
pub instrument_id: String,
pub condition: AlertCondition,
pub threshold: f64,
pub status: AlertStatus,
pub created_by: String,
pub created_at: DateTime<Utc>,
pub triggered_at: Option<DateTime<Utc>>,
pub triggered_value: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct OfficialMark {
pub id: String,
pub instrument_id: String,
pub price: f64,
pub currency: String,
pub as_of: NaiveDate,
pub source: String,
pub published_by: String,
pub published_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct AuditEntry {
pub at: DateTime<Utc>,
pub actor: String,
pub action: String,
pub detail: String,
}