btcpay 0.3.0

Rust BTCPayServer client
Documentation
use std::collections::HashMap;

use serde::{Deserialize, Serialize};

use super::invoice::SupportedCurrency;

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PairClientResponse {
    pub merchant: String,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GetInvoicesArgs {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub status: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub order_id: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub item_code: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub date_start: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub date_end: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub limit: Option<usize>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub offset: Option<usize>,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CreateInvoiceArgs {
    pub currency: String,
    pub price: f32,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub order_id: Option<OrderId>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub expiration_time: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub item_desc: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub item_code: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub pos_data: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub status: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none", rename = "redirectURL")]
    pub redirect_url: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub transaction_speed: Option<TransactionSpeed>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub physical: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub supported_transaction_currencies: Option<HashMap<String, SupportedCurrency>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub refundable: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub tax_included: Option<f32>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub redirect_automatically: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub notification_email: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub notification_url: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub extended_notifications: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub full_notifications: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub buyer_email: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub buyer_phone: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub buyer_country: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub buyer_zip: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub buyer_state: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub buyer_city: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub buyer_address2: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub buyer_address1: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub buyer_name: Option<String>,
}

impl CreateInvoiceArgs {
    pub fn new(currency: &str, price: f32) -> Self {
        CreateInvoiceArgs {
            currency: currency.to_string(),
            price,
            ..Default::default()
        }
    }
}

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum OrderId {
    String(String),
    Number(usize),
}

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum TransactionSpeed {
    Low,
    LowMedium,
    Medium,
    High,
}