use {
crate::models,
serde::{Deserialize, Serialize},
};
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct Quote {
#[serde(rename = "via")]
pub via: models::AccessType,
#[serde(rename = "id")]
pub id: String,
#[serde(rename = "type")]
pub r#type: Type,
#[serde(rename = "quoteAssetId")]
pub quote_asset_id: String,
#[serde(rename = "baseAssetId")]
pub base_asset_id: String,
#[serde(rename = "baseAmount")]
pub base_amount: String,
#[serde(rename = "quoteAmount")]
pub quote_amount: String,
#[serde(rename = "priceImpact", skip_serializing_if = "Option::is_none")]
pub price_impact: Option<f64>,
#[serde(rename = "quoteMinAmount", skip_serializing_if = "Option::is_none")]
pub quote_min_amount: Option<String>,
#[serde(rename = "executionSteps", skip_serializing_if = "Option::is_none")]
pub execution_steps: Option<Vec<models::ExecutionStepDetails>>,
#[serde(rename = "generalFees", skip_serializing_if = "Option::is_none")]
pub general_fees: Option<Vec<models::Fee>>,
#[serde(rename = "side")]
pub side: Side,
#[serde(rename = "expiresAt")]
pub expires_at: String,
}
impl Quote {
pub fn new(
via: models::AccessType,
id: String,
r#type: Type,
quote_asset_id: String,
base_asset_id: String,
base_amount: String,
quote_amount: String,
side: Side,
expires_at: String,
) -> Quote {
Quote {
via,
id,
r#type,
quote_asset_id,
base_asset_id,
base_amount,
quote_amount,
price_impact: None,
quote_min_amount: None,
execution_steps: None,
general_fees: None,
side,
expires_at,
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Type {
#[serde(rename = "INDICATIVE")]
Indicative,
}
impl Default for Type {
fn default() -> Type {
Self::Indicative
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Side {
#[serde(rename = "BUY")]
Buy,
#[serde(rename = "SELL")]
Sell,
}
impl Default for Side {
fn default() -> Side {
Self::Buy
}
}