rust_woocommerce/controllers/
product_shipping_classes.rs1use serde::{Deserialize, Serialize};
2use serde_with::skip_serializing_none;
3#[skip_serializing_none]
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct ShippingClassCreate {
6 name: String,
7 slug: Option<String>,
8 description: Option<String>,
9}
10#[derive(Default)]
11pub struct WithName(String);
12#[derive(Default)]
13pub struct NoName;
14#[derive(Default)]
15pub struct ShippingClassCreateBuilder<N> {
16 name: N,
17 slug: Option<String>,
18 description: Option<String>,
19}
20impl<N> ShippingClassCreateBuilder<N> {
21 pub fn name(self, name: impl Into<String>) -> ShippingClassCreateBuilder<WithName> {
23 ShippingClassCreateBuilder {
24 name: WithName(name.into()),
25 slug: self.slug,
26 description: self.description,
27 }
28 }
29 pub fn slug(mut self, slug: impl Into<String>) -> Self {
31 let _ = self.slug.insert(slug.into());
32 self
33 }
34 pub fn description(mut self, description: impl Into<String>) -> Self {
36 let _ = self.description.insert(description.into());
37 self
38 }
39}
40impl ShippingClassCreateBuilder<WithName> {
41 pub fn build(self) -> ShippingClassCreate {
42 ShippingClassCreate {
43 name: self.name.0,
44 slug: self.slug,
45 description: self.description,
46 }
47 }
48}
49#[skip_serializing_none]
50#[derive(Debug, Clone, Serialize, Deserialize)]
51pub struct ShippingClassUpdate {
52 id: Option<i32>,
53 name: Option<String>,
54 slug: Option<String>,
55 description: Option<String>,
56}
57#[derive(Default)]
58pub struct ShippingClassUpdateBuilder {
59 id: Option<i32>,
60 name: Option<String>,
61 slug: Option<String>,
62 description: Option<String>,
63}
64impl ShippingClassUpdateBuilder {
65 pub fn id(mut self, id: i32) -> Self {
67 let _ = self.id.insert(id);
68 self
69 }
70 pub fn name(mut self, name: impl Into<String>) -> Self {
72 let _ = self.name.insert(name.into());
73 self
74 }
75 pub fn slug(mut self, slug: impl Into<String>) -> Self {
77 let _ = self.slug.insert(slug.into());
78 self
79 }
80 pub fn description(mut self, description: impl Into<String>) -> Self {
82 let _ = self.description.insert(description.into());
83 self
84 }
85 pub fn build(self) -> ShippingClassUpdate {
86 ShippingClassUpdate {
87 id: self.id,
88 name: self.name,
89 slug: self.slug,
90 description: self.description,
91 }
92 }
93}