wave-api 0.1.0

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

/// Input for creating a product.
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ProductCreateInput {
    pub business_id: String,
    pub name: String,
    pub unit_price: Decimal,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub default_sales_tax_ids: Option<Vec<String>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub income_account_id: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub expense_account_id: Option<String>,
}

impl ProductCreateInput {
    pub fn new(
        business_id: impl Into<String>,
        name: impl Into<String>,
        unit_price: Decimal,
    ) -> Self {
        Self {
            business_id: business_id.into(),
            name: name.into(),
            unit_price,
            description: None,
            default_sales_tax_ids: None,
            income_account_id: None,
            expense_account_id: None,
        }
    }

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

/// Input for patching a product.
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ProductPatchInput {
    pub id: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub unit_price: Option<Decimal>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub default_sales_tax_ids: Option<Vec<String>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub income_account_id: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub expense_account_id: Option<String>,
}

impl ProductPatchInput {
    pub fn new(id: impl Into<String>) -> Self {
        Self {
            id: id.into(),
            name: None,
            description: None,
            unit_price: None,
            default_sales_tax_ids: None,
            income_account_id: None,
            expense_account_id: None,
        }
    }

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

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

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