use chrono::{DateTime, Utc};
use rust_decimal::Decimal;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Vault {
pub id: u32,
pub vault_token: String,
pub symbol: String,
pub mints_enabled: bool,
pub redeems_enabled: bool,
pub min_mint_quantity: Decimal,
pub min_redeem_tokens: Decimal,
pub redeem_delay_ms: i64,
pub token_step_size: Decimal,
pub remaining_mint_quantity: Decimal,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VaultMintRequest {
pub vault_id: u32,
pub symbol: String,
pub quantity: Decimal,
pub auto_borrow: Option<bool>,
pub auto_lend_redeem: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VaultRedeemRequest {
pub vault_id: u32,
pub vault_token_quantity: Option<Decimal>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VaultMint {
pub id: String,
pub vault_id: u32,
pub vault_token: String,
pub symbol: String,
pub quantity: Decimal,
pub vault_tokens_minted: Decimal,
pub nav: Decimal,
pub timestamp: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VaultRedeemCancelRequest {
pub vault_id: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VaultHistory {
pub vault_id: u32,
pub timestamp: DateTime<Utc>,
pub nav: Option<Decimal>,
pub vault_equity: Option<Decimal>,
pub token_circulating_supply: Option<Decimal>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum VaultHistoryInterval {
#[serde(rename = "1d")]
OneDay,
#[serde(rename = "1w")]
OneWeek,
#[serde(rename = "1month")]
OneMonth,
#[serde(rename = "1year")]
OneYear,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VaultHistoryParams {
pub interval: VaultHistoryInterval,
#[serde(skip_serializing_if = "Option::is_none")]
pub vault_id: Option<u32>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VaultMintHistoryParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub subaccount_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vault_id: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<u64>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VaultRedeemHistoryParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub subaccount_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vault_id: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<u64>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum VaultRedeemStatus {
Requested,
Redeemed,
Cancelled,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VaultRedeem {
pub status: VaultRedeemStatus,
pub id: String,
pub vault_id: u32,
pub vault_token_quantity: Decimal,
pub vault_token: Option<String>,
pub symbol: Option<String>,
pub quantity: Option<Decimal>,
pub nav: Option<Decimal>,
pub reason: Option<String>,
pub timestamp: i64,
}