use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
pub use bot_engine::{
ArbitrageConfigJson, BuilderFeeConfig, DCAConfigJson, GridConfigJson, MMConfigJson,
OrchestratorConfigJson, SyncConfigJson,
};
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct BotConfig {
pub environment: String,
pub private_key: String,
pub address: String,
#[serde(default)]
pub vault_address: Option<String>,
#[serde(default)]
pub base_url_override: Option<String>,
pub strategy_type: String,
#[serde(default)]
pub markets: Vec<MarketConfig>,
#[serde(default = "default_poll_delay_ms")]
pub poll_delay_ms: u64,
#[serde(default)]
pub grid: Option<GridConfigJson>,
#[serde(default)]
pub mm: Option<MMConfigJson>,
#[serde(default)]
pub dca: Option<DCAConfigJson>,
#[serde(default)]
pub arbitrage: Option<ArbitrageConfigJson>,
#[serde(default)]
pub orchestrator: Option<OrchestratorConfigJson>,
#[serde(default)]
pub builder_fee: Option<BuilderFeeConfig>,
#[serde(default)]
pub hip3: Option<Hip3ConfigJson>,
#[serde(default)]
pub sync: Option<SyncConfigJson>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct MarketConfig {
pub exchange: String,
#[serde(rename = "type")]
pub market_type: String,
pub base: String,
#[serde(default)]
pub quote: Option<String>,
#[serde(default)]
pub index: Option<u32>,
#[serde(default)]
pub dex: Option<String>,
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub outcome_id: Option<u32>,
#[serde(default)]
pub side: Option<u8>,
#[serde(default)]
pub instrument_meta: Option<InstrumentMetaConfig>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct Hip3ConfigJson {
pub dex_name: String,
pub dex_index: u32,
#[serde(default = "default_quote_currency")]
pub quote_currency: String,
#[serde(default)]
pub asset_index: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct InstrumentMetaConfig {
pub tick_size: String,
pub lot_size: String,
#[serde(default)]
pub min_qty: Option<String>,
#[serde(default)]
pub min_notional: Option<String>,
}
fn default_poll_delay_ms() -> u64 {
500
}
fn default_quote_currency() -> String {
"USDC".to_string()
}