use crate::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct QuoteRequest {
#[serde(rename = "dry")]
pub dry: bool,
#[serde(rename = "swapType")]
pub swap_type: SwapType,
#[serde(rename = "slippageTolerance")]
pub slippage_tolerance: f64,
#[serde(rename = "originAsset")]
pub origin_asset: String,
#[serde(rename = "depositType")]
pub deposit_type: DepositType,
#[serde(rename = "destinationAsset")]
pub destination_asset: String,
#[serde(rename = "amount")]
pub amount: String,
#[serde(rename = "refundTo")]
pub refund_to: String,
#[serde(rename = "refundType")]
pub refund_type: RefundType,
#[serde(rename = "recipient")]
pub recipient: String,
#[serde(rename = "recipientType")]
pub recipient_type: RecipientType,
#[serde(rename = "deadline")]
pub deadline: String,
#[serde(rename = "referral", skip_serializing_if = "Option::is_none")]
pub referral: Option<String>,
#[serde(rename = "quoteWaitingTimeMs", skip_serializing_if = "Option::is_none")]
pub quote_waiting_time_ms: Option<f64>,
#[serde(rename = "appFees", skip_serializing_if = "Option::is_none")]
pub app_fees: Option<Vec<models::AppFee>>,
}
impl QuoteRequest {
pub fn new(dry: bool, swap_type: SwapType, slippage_tolerance: f64, origin_asset: String, deposit_type: DepositType, destination_asset: String, amount: String, refund_to: String, refund_type: RefundType, recipient: String, recipient_type: RecipientType, deadline: String) -> QuoteRequest {
QuoteRequest {
dry,
swap_type,
slippage_tolerance,
origin_asset,
deposit_type,
destination_asset,
amount,
refund_to,
refund_type,
recipient,
recipient_type,
deadline,
referral: None,
quote_waiting_time_ms: None,
app_fees: None,
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum SwapType {
#[serde(rename = "EXACT_INPUT")]
ExactInput,
#[serde(rename = "EXACT_OUTPUT")]
ExactOutput,
}
impl Default for SwapType {
fn default() -> SwapType {
Self::ExactInput
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum DepositType {
#[serde(rename = "ORIGIN_CHAIN")]
OriginChain,
#[serde(rename = "INTENTS")]
Intents,
}
impl Default for DepositType {
fn default() -> DepositType {
Self::OriginChain
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum RefundType {
#[serde(rename = "ORIGIN_CHAIN")]
OriginChain,
#[serde(rename = "INTENTS")]
Intents,
}
impl Default for RefundType {
fn default() -> RefundType {
Self::OriginChain
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum RecipientType {
#[serde(rename = "DESTINATION_CHAIN")]
DestinationChain,
#[serde(rename = "INTENTS")]
Intents,
}
impl Default for RecipientType {
fn default() -> RecipientType {
Self::DestinationChain
}
}