use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
#[skip_serializing_none]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaxRateCreate {
country: Option<String>,
state: Option<String>,
postcodes: Option<Vec<String>>,
cities: Option<Vec<String>>,
rate: Option<String>,
name: Option<String>,
priority: Option<i32>,
compound: Option<bool>,
shipping: Option<bool>,
order: Option<i32>,
class: Option<String>,
}
#[derive(Default)]
pub struct TaxRateCreateBuilder {
country: Option<String>,
state: Option<String>,
postcodes: Option<Vec<String>>,
cities: Option<Vec<String>>,
rate: Option<String>,
name: Option<String>,
priority: Option<i32>,
compound: Option<bool>,
shipping: Option<bool>,
order: Option<i32>,
class: Option<String>,
}
impl TaxRateCreateBuilder {
pub fn country(&mut self, country_iso: impl Into<String>) -> &mut Self {
let _ = self.country.insert(country_iso.into());
self
}
pub fn state(&mut self, state_code: impl Into<String>) -> &mut Self {
let _ = self.state.insert(state_code.into());
self
}
pub fn postcode(&mut self, post_code: impl Into<String>) -> &mut Self {
self.postcodes.get_or_insert(vec![]).push(post_code.into());
self
}
pub fn city(&mut self, city: impl Into<String>) -> &mut Self {
self.cities.get_or_insert(vec![]).push(city.into());
self
}
pub fn rate(&mut self, rate: impl Into<String>) -> &mut Self {
let _ = self.rate.insert(rate.into());
self
}
pub fn name(&mut self, name: impl Into<String>) -> &mut Self {
let _ = self.name.insert(name.into());
self
}
pub fn priority(&mut self, priority: i32) -> &mut Self {
let _ = self.priority.insert(priority);
self
}
pub fn compound(&mut self) -> &mut Self {
let _ = self.compound.insert(true);
self
}
pub fn disable_shipping(&mut self) -> &mut Self {
let _ = self.shipping.insert(false);
self
}
pub fn order(&mut self, order: i32) -> &mut Self {
let _ = self.order.insert(order);
self
}
pub fn class(&mut self, class: impl Into<String>) -> &mut Self {
let _ = self.class.insert(class.into());
self
}
pub fn build(&self) -> TaxRateCreate {
TaxRateCreate {
country: self.country.to_owned(),
state: self.state.to_owned(),
postcodes: self.postcodes.to_owned(),
cities: self.cities.to_owned(),
rate: self.rate.to_owned(),
name: self.name.to_owned(),
priority: self.priority,
compound: self.compound,
shipping: self.shipping,
order: self.order,
class: self.class.to_owned(),
}
}
}
#[skip_serializing_none]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaxRateUpdate {
id: Option<i32>,
country: Option<String>,
state: Option<String>,
postcodes: Option<Vec<String>>,
cities: Option<Vec<String>>,
rate: Option<String>,
name: Option<String>,
priority: Option<i32>,
compound: Option<bool>,
shipping: Option<bool>,
order: Option<i32>,
class: Option<String>,
}
#[derive(Default)]
pub struct TaxRateUpdateBuilder {
id: Option<i32>,
country: Option<String>,
state: Option<String>,
postcodes: Option<Vec<String>>,
cities: Option<Vec<String>>,
rate: Option<String>,
name: Option<String>,
priority: Option<i32>,
compound: Option<bool>,
shipping: Option<bool>,
order: Option<i32>,
class: Option<String>,
}
impl TaxRateUpdateBuilder {
pub fn id(&mut self, id: i32) -> &mut Self {
let _ = self.id.insert(id);
self
}
pub fn country(&mut self, country_iso: impl Into<String>) -> &mut Self {
let _ = self.country.insert(country_iso.into());
self
}
pub fn state(&mut self, state_code: impl Into<String>) -> &mut Self {
let _ = self.state.insert(state_code.into());
self
}
pub fn postcode(&mut self, post_code: impl Into<String>) -> &mut Self {
self.postcodes.get_or_insert(vec![]).push(post_code.into());
self
}
pub fn city(&mut self, city: impl Into<String>) -> &mut Self {
self.cities.get_or_insert(vec![]).push(city.into());
self
}
pub fn rate(&mut self, rate: impl Into<String>) -> &mut Self {
let _ = self.rate.insert(rate.into());
self
}
pub fn name(&mut self, name: impl Into<String>) -> &mut Self {
let _ = self.name.insert(name.into());
self
}
pub fn priority(&mut self, priority: i32) -> &mut Self {
let _ = self.priority.insert(priority);
self
}
pub fn compound(&mut self) -> &mut Self {
let _ = self.compound.insert(true);
self
}
pub fn disable_shipping(&mut self) -> &mut Self {
let _ = self.shipping.insert(false);
self
}
pub fn order(&mut self, order: i32) -> &mut Self {
let _ = self.order.insert(order);
self
}
pub fn class(&mut self, class: impl Into<String>) -> &mut Self {
let _ = self.class.insert(class.into());
self
}
pub fn build(&self) -> TaxRateUpdate {
TaxRateUpdate {
id: self.id,
country: self.country.to_owned(),
state: self.state.to_owned(),
postcodes: self.postcodes.to_owned(),
cities: self.cities.to_owned(),
rate: self.rate.to_owned(),
name: self.name.to_owned(),
priority: self.priority,
compound: self.compound,
shipping: self.shipping,
order: self.order,
class: self.class.to_owned(),
}
}
}