use rust_decimal::Decimal;
use serde::Serialize;
use crate::{
models::CryptoCurrencyCode,
utils::{serialize_comma_separated_list, serialize_decimal_to_string},
};
#[derive(Debug, Serialize, Default)]
pub struct GetTransfersParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub(crate) asset: Option<CryptoCurrencyCode>,
#[serde(
serialize_with = "serialize_comma_separated_list",
skip_serializing_if = "GetTransfersParams::should_skip_transfer_ids"
)]
pub(crate) transfer_ids: Option<Vec<u64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(crate) spend_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(crate) offset: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(crate) count: Option<u16>,
}
impl GetTransfersParams {
fn should_skip_transfer_ids(ids: &Option<Vec<u64>>) -> bool {
!matches!(ids, Some(ids) if !ids.is_empty())
}
}
#[derive(Debug, Serialize)]
pub struct TransferParams {
pub(crate) user_id: u64,
pub(crate) asset: CryptoCurrencyCode,
#[serde(serialize_with = "serialize_decimal_to_string")]
pub(crate) amount: Decimal,
pub(crate) spend_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub(crate) comment: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub(crate) disable_send_notification: Option<bool>,
}