rust_woocommerce/controllers/
product_shipping_classes.rs

1use 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    /// Shipping class name.
22    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    /// An alphanumeric identifier for the resource unique to its type.
30    pub fn slug(mut self, slug: impl Into<String>) -> Self {
31        let _ = self.slug.insert(slug.into());
32        self
33    }
34    /// HTML description of the resource.
35    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    /// Unique identifier for the resource.
66    pub fn id(mut self, id: i32) -> Self {
67        let _ = self.id.insert(id);
68        self
69    }
70    /// Shipping class name.
71    pub fn name(mut self, name: impl Into<String>) -> Self {
72        let _ = self.name.insert(name.into());
73        self
74    }
75    /// An alphanumeric identifier for the resource unique to its type.
76    pub fn slug(mut self, slug: impl Into<String>) -> Self {
77        let _ = self.slug.insert(slug.into());
78        self
79    }
80    /// HTML description of the resource.
81    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}