use rust_decimal::Decimal;
use serde::Serialize;
#[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
}
}
#[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
}
}
#[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() }
}
}