1use chrono::{DateTime, Utc};
2use rust_decimal::Decimal;
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7#[serde(rename_all = "camelCase")]
8pub struct Vault {
9 pub id: u32,
11 pub vault_token: String,
13 pub symbol: String,
15 pub mints_enabled: bool,
17 pub redeems_enabled: bool,
19 pub min_mint_quantity: Decimal,
21 pub min_redeem_tokens: Decimal,
23 pub redeem_delay_ms: i64,
25 pub token_step_size: Decimal,
27 pub remaining_mint_quantity: Decimal,
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize)]
33#[serde(rename_all = "camelCase")]
34pub struct VaultMintRequest {
35 pub vault_id: u32,
37 pub symbol: String,
39 pub quantity: Decimal,
41 pub auto_borrow: Option<bool>,
43 pub auto_lend_redeem: Option<bool>,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize)]
49#[serde(rename_all = "camelCase")]
50pub struct VaultRedeemRequest {
51 pub vault_id: u32,
53 pub vault_token_quantity: Option<Decimal>,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize)]
60#[serde(rename_all = "camelCase")]
61pub struct VaultMint {
62 pub id: String,
64 pub vault_id: u32,
66 pub vault_token: String,
68 pub symbol: String,
70 pub quantity: Decimal,
72 pub vault_tokens_minted: Decimal,
74 pub nav: Decimal,
76 pub timestamp: i64,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize)]
82#[serde(rename_all = "camelCase")]
83pub struct VaultRedeemCancelRequest {
84 pub vault_id: u32,
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize)]
90#[serde(rename_all = "camelCase")]
91pub struct VaultHistory {
92 pub vault_id: u32,
94 pub timestamp: DateTime<Utc>,
96 pub nav: Option<Decimal>,
98 pub vault_equity: Option<Decimal>,
100 pub token_circulating_supply: Option<Decimal>,
102}
103
104#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
106#[serde(rename_all = "camelCase")]
107pub enum VaultHistoryInterval {
108 #[serde(rename = "1d")]
109 OneDay,
110 #[serde(rename = "1w")]
111 OneWeek,
112 #[serde(rename = "1month")]
113 OneMonth,
114 #[serde(rename = "1year")]
115 OneYear,
116}
117
118#[derive(Debug, Clone, Serialize, Deserialize)]
120#[serde(rename_all = "camelCase")]
121pub struct VaultHistoryParams {
122 pub interval: VaultHistoryInterval,
124 #[serde(skip_serializing_if = "Option::is_none")]
126 pub vault_id: Option<u32>,
127}
128
129#[derive(Debug, Clone, Default, Serialize, Deserialize)]
131#[serde(rename_all = "camelCase")]
132pub struct VaultMintHistoryParams {
133 #[serde(skip_serializing_if = "Option::is_none")]
135 pub subaccount_id: Option<i32>,
136 #[serde(skip_serializing_if = "Option::is_none")]
138 pub vault_id: Option<u32>,
139 #[serde(skip_serializing_if = "Option::is_none")]
141 pub limit: Option<u64>,
142 #[serde(skip_serializing_if = "Option::is_none")]
144 pub offset: Option<u64>,
145}
146
147#[derive(Debug, Clone, Default, Serialize, Deserialize)]
149#[serde(rename_all = "camelCase")]
150pub struct VaultRedeemHistoryParams {
151 #[serde(skip_serializing_if = "Option::is_none")]
153 pub subaccount_id: Option<i32>,
154 #[serde(skip_serializing_if = "Option::is_none")]
156 pub vault_id: Option<u32>,
157 #[serde(skip_serializing_if = "Option::is_none")]
159 pub limit: Option<u64>,
160 #[serde(skip_serializing_if = "Option::is_none")]
162 pub offset: Option<u64>,
163}
164
165#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
166pub enum VaultRedeemStatus {
167 Requested,
168 Redeemed,
169 Cancelled,
170}
171
172#[derive(Debug, Clone, Serialize, Deserialize)]
173#[serde(rename_all = "camelCase")]
174pub struct VaultRedeem {
175 pub status: VaultRedeemStatus,
176 pub id: String,
177 pub vault_id: u32,
178 pub vault_token_quantity: Decimal,
179 pub vault_token: Option<String>,
180 pub symbol: Option<String>,
181 pub quantity: Option<Decimal>,
182 pub nav: Option<Decimal>,
183 pub reason: Option<String>,
184 pub timestamp: i64,
185}