use serde::Serialize;
use super::AddressInput;
use crate::enums::CurrencyCode;
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CustomerShippingDetailsInput {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub address: Option<AddressInput>,
#[serde(skip_serializing_if = "Option::is_none")]
pub phone: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub instructions: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CustomerCreateInput {
pub business_id: String,
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub first_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub phone: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mobile: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fax: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub toll_free: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub website: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub display_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub internal_notes: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub address: Option<AddressInput>,
#[serde(skip_serializing_if = "Option::is_none")]
pub currency: Option<CurrencyCode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub shipping_details: Option<CustomerShippingDetailsInput>,
}
impl CustomerCreateInput {
pub fn new(business_id: impl Into<String>, name: impl Into<String>) -> Self {
Self {
business_id: business_id.into(),
name: name.into(),
first_name: None,
last_name: None,
email: None,
phone: None,
mobile: None,
fax: None,
toll_free: None,
website: None,
display_id: None,
internal_notes: None,
address: None,
currency: None,
shipping_details: None,
}
}
pub fn first_name(mut self, v: impl Into<String>) -> Self {
self.first_name = Some(v.into());
self
}
pub fn last_name(mut self, v: impl Into<String>) -> Self {
self.last_name = Some(v.into());
self
}
pub fn email(mut self, v: impl Into<String>) -> Self {
self.email = Some(v.into());
self
}
pub fn phone(mut self, v: impl Into<String>) -> Self {
self.phone = Some(v.into());
self
}
pub fn address(mut self, v: AddressInput) -> Self {
self.address = Some(v);
self
}
pub fn currency(mut self, v: CurrencyCode) -> Self {
self.currency = Some(v);
self
}
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CustomerPatchInput {
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub first_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub phone: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mobile: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fax: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub toll_free: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub website: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub display_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub internal_notes: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub address: Option<AddressInput>,
#[serde(skip_serializing_if = "Option::is_none")]
pub currency: Option<CurrencyCode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub shipping_details: Option<CustomerShippingDetailsInput>,
}
impl CustomerPatchInput {
pub fn new(id: impl Into<String>) -> Self {
Self {
id: id.into(),
name: None,
first_name: None,
last_name: None,
email: None,
phone: None,
mobile: None,
fax: None,
toll_free: None,
website: None,
display_id: None,
internal_notes: None,
address: None,
currency: None,
shipping_details: None,
}
}
pub fn name(mut self, v: impl Into<String>) -> Self {
self.name = Some(v.into());
self
}
pub fn email(mut self, v: impl Into<String>) -> Self {
self.email = Some(v.into());
self
}
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CustomerDeleteInput {
pub id: String,
}
impl CustomerDeleteInput {
pub fn new(id: impl Into<String>) -> Self {
Self { id: id.into() }
}
}