wave-api 0.1.0

Typed Rust client for the Wave Accounting GraphQL API
Documentation
use chrono::NaiveDate;
use rust_decimal::Decimal;
use serde::Serialize;

/// Input for creating a sales tax.
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SalesTaxCreateInput {
    pub business_id: String,
    pub name: String,
    pub abbreviation: String,
    pub rate: Decimal,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub tax_number: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub show_tax_number_on_invoices: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub is_compound: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub is_recoverable: Option<bool>,
}

impl SalesTaxCreateInput {
    pub fn new(
        business_id: impl Into<String>,
        name: impl Into<String>,
        abbreviation: impl Into<String>,
        rate: Decimal,
    ) -> Self {
        Self {
            business_id: business_id.into(),
            name: name.into(),
            abbreviation: abbreviation.into(),
            rate,
            description: None,
            tax_number: None,
            show_tax_number_on_invoices: None,
            is_compound: None,
            is_recoverable: None,
        }
    }

    pub fn description(mut self, v: impl Into<String>) -> Self {
        self.description = Some(v.into());
        self
    }
    pub fn tax_number(mut self, v: impl Into<String>) -> Self {
        self.tax_number = Some(v.into());
        self
    }
}

/// Input for patching a sales tax.
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SalesTaxPatchInput {
    pub id: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub abbreviation: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub tax_number: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub show_tax_number_on_invoices: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub rates: Option<Vec<SalesTaxRateInput>>,
}

impl SalesTaxPatchInput {
    pub fn new(id: impl Into<String>) -> Self {
        Self {
            id: id.into(),
            name: None,
            abbreviation: None,
            description: None,
            tax_number: None,
            show_tax_number_on_invoices: None,
            rates: None,
        }
    }

    pub fn name(mut self, v: impl Into<String>) -> Self {
        self.name = Some(v.into());
        self
    }
}

/// A rate input for sales tax patch.
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SalesTaxRateInput {
    pub effective: NaiveDate,
    pub rate: Decimal,
}

/// Input for archiving a sales tax.
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SalesTaxArchiveInput {
    pub id: String,
}

impl SalesTaxArchiveInput {
    pub fn new(id: impl Into<String>) -> Self {
        Self { id: id.into() }
    }
}