Skip to content

Commit 2776205

Browse files
skarimonkzou
andauthored
Custom de/serializing handling for enums (#31)
Co-authored-by: Kevin Zou <[email protected]> Co-authored-by: Kevin Zou <[email protected]>
1 parent c5259a3 commit 2776205

File tree

470 files changed

+15767
-2706
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

470 files changed

+15767
-2706
lines changed
Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,20 @@
1-
{%- if model["type"] == "integer" %}
2-
use serde_repr::{Deserialize_repr, Serialize_repr};
3-
{%- else %}
4-
use serde::{Serialize, Deserialize};
5-
{%- endif %}
1+
{%- set dataType = model|simple_type(render_option=False) %}
2+
use serde::{Serialize, Deserialize, Serializer, Deserializer};
63
{% if description is defined %}
74
{{ description | block_comment }}
85
{%- endif %}
96

107
#[non_exhaustive]
11-
{%- if model["type"] == "integer" %}
12-
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize_repr, Deserialize_repr)]
13-
#[repr({{model | simple_type(false, false)}})]
14-
{%- else %}
15-
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
16-
{%- endif %}
17-
pub enum {{name}} {
8+
#[derive(Clone, Debug, Eq, PartialEq)]
9+
pub enum {{ name }} {
1810
{%- for index, value in enumerate(model.enum) %}
19-
{%- if model["type"] == "integer" %}
20-
{{ model["x-enum-varnames"][index] or value.upper() }} = {{value}},
21-
{%- else %}
22-
#[serde(rename = "{{value}}")]
2311
{{ model["x-enum-varnames"][index] or value.upper() }},
24-
{%- endif %}
2512
{%- endfor %}
2613
}
2714

28-
impl ToString for {{name}} {
15+
{%- if not model["type"] == "integer" %}
16+
17+
impl ToString for {{ name }} {
2918
fn to_string(&self) -> String {
3019
match self {
3120
{%- for index, value in enumerate(model.enum) %}
@@ -34,3 +23,41 @@ impl ToString for {{name}} {
3423
}
3524
}
3625
}
26+
{%- endif %}
27+
28+
impl Serialize for {{ name }} {
29+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
30+
where
31+
S: Serializer,
32+
{
33+
match self {
34+
{%- if model["type"] == "string"%}
35+
_ => serializer.serialize_str(self.to_string().as_str()),
36+
{%- else %}
37+
{%- for index, value in enumerate(model.enum) %}
38+
Self::{{ model["x-enum-varnames"][index] or value.upper() }} => serializer.serialize_{{ dataType }}({{ value }}),
39+
{%- endfor %}
40+
{%- endif %}
41+
}
42+
}
43+
}
44+
45+
impl<'de> Deserialize<'de> for {{ name }} {
46+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
47+
where
48+
D: Deserializer<'de>,
49+
{
50+
let s: {{ dataType }} = {{ dataType }}::deserialize(deserializer)?;
51+
Ok(match s{%- if model["type"] == "string" %}.as_str(){% endif %} {
52+
{%- for index, value in enumerate(model.enum) %}
53+
{%- if model["type"] == "string" %}"{%- endif %}{{ value }}{%- if model["type"] == "string" %}"{%- endif %} => Self::{{ model["x-enum-varnames"][index] or value.upper() }},
54+
{%- endfor %}
55+
_ => {
56+
return Err(serde::de::Error::custom(format!(
57+
"Invalid value for SyntheticsDeviceID: {}",
58+
s
59+
)))
60+
}
61+
})
62+
}
63+
}

Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ reqwest = { version = "0.11.24", features = ["multipart"] }
1515
reqwest-middleware = "0.1.6"
1616
serde = { version = "1.0.197", features = ["derive"] }
1717
serde_json = "1.0.114"
18-
serde_repr = "0.1.17"
1918
serde_with = "3.6.1"
2019
url = "2.5.0"
2120

LICENSE-3rdparty.csv

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ schannel,https://github.com/steffengy/schannel-rs,MIT,"Steven Fackler <sfackler@
8484
security-framework,https://github.com/kornelski/rust-security-framework,MIT OR Apache-2.0,"Steven Fackler <[email protected]>, Kornel <[email protected]>"
8585
serde,https://github.com/serde-rs/serde,MIT OR Apache-2.0,"Erick Tryzelaar <[email protected]>, David Tolnay <[email protected]>"
8686
serde_json,https://github.com/serde-rs/json,MIT OR Apache-2.0,"Erick Tryzelaar <[email protected]>, David Tolnay <[email protected]>"
87-
serde_repr,https://github.com/dtolnay/serde-repr,MIT OR Apache-2.0,David Tolnay <[email protected]>
8887
serde_urlencoded,https://github.com/nox/serde_urlencoded,MIT OR Apache-2.0,Anthony Ramine <[email protected]>
8988
serde_with,https://github.com/jonasbb/serde_with,MIT OR Apache-2.0,"Jonas Bushart, Marcin Kaźmierczak"
9089
serde_with_macros,https://github.com/jonasbb/serde_with,MIT OR Apache-2.0,Jonas Bushart

src/datadogV1/model/model_access_role.rs

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,14 @@
22
// This product includes software developed at Datadog (https://www.datadoghq.com/).
33
// Copyright 2019-Present Datadog, Inc.
44

5-
use serde::{Deserialize, Serialize};
5+
use serde::{Deserialize, Deserializer, Serialize, Serializer};
66

77
#[non_exhaustive]
8-
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
8+
#[derive(Clone, Debug, Eq, PartialEq)]
99
pub enum AccessRole {
10-
#[serde(rename = "st")]
1110
STANDARD,
12-
#[serde(rename = "adm")]
1311
ADMIN,
14-
#[serde(rename = "ro")]
1512
READ_ONLY,
16-
#[serde(rename = "ERROR")]
1713
ERROR,
1814
}
1915

@@ -27,3 +23,35 @@ impl ToString for AccessRole {
2723
}
2824
}
2925
}
26+
27+
impl Serialize for AccessRole {
28+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
29+
where
30+
S: Serializer,
31+
{
32+
match self {
33+
_ => serializer.serialize_str(self.to_string().as_str()),
34+
}
35+
}
36+
}
37+
38+
impl<'de> Deserialize<'de> for AccessRole {
39+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
40+
where
41+
D: Deserializer<'de>,
42+
{
43+
let s: String = String::deserialize(deserializer)?;
44+
Ok(match s.as_str() {
45+
"st" => Self::STANDARD,
46+
"adm" => Self::ADMIN,
47+
"ro" => Self::READ_ONLY,
48+
"ERROR" => Self::ERROR,
49+
_ => {
50+
return Err(serde::de::Error::custom(format!(
51+
"Invalid value for SyntheticsDeviceID: {}",
52+
s
53+
)))
54+
}
55+
})
56+
}
57+
}

src/datadogV1/model/model_alert_graph_widget_definition_type.rs

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22
// This product includes software developed at Datadog (https://www.datadoghq.com/).
33
// Copyright 2019-Present Datadog, Inc.
44

5-
use serde::{Deserialize, Serialize};
5+
use serde::{Deserialize, Deserializer, Serialize, Serializer};
66

77
#[non_exhaustive]
8-
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
8+
#[derive(Clone, Debug, Eq, PartialEq)]
99
pub enum AlertGraphWidgetDefinitionType {
10-
#[serde(rename = "alert_graph")]
1110
ALERT_GRAPH,
1211
}
1312

@@ -18,3 +17,32 @@ impl ToString for AlertGraphWidgetDefinitionType {
1817
}
1918
}
2019
}
20+
21+
impl Serialize for AlertGraphWidgetDefinitionType {
22+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
23+
where
24+
S: Serializer,
25+
{
26+
match self {
27+
_ => serializer.serialize_str(self.to_string().as_str()),
28+
}
29+
}
30+
}
31+
32+
impl<'de> Deserialize<'de> for AlertGraphWidgetDefinitionType {
33+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
34+
where
35+
D: Deserializer<'de>,
36+
{
37+
let s: String = String::deserialize(deserializer)?;
38+
Ok(match s.as_str() {
39+
"alert_graph" => Self::ALERT_GRAPH,
40+
_ => {
41+
return Err(serde::de::Error::custom(format!(
42+
"Invalid value for SyntheticsDeviceID: {}",
43+
s
44+
)))
45+
}
46+
})
47+
}
48+
}

src/datadogV1/model/model_alert_value_widget_definition_type.rs

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22
// This product includes software developed at Datadog (https://www.datadoghq.com/).
33
// Copyright 2019-Present Datadog, Inc.
44

5-
use serde::{Deserialize, Serialize};
5+
use serde::{Deserialize, Deserializer, Serialize, Serializer};
66

77
#[non_exhaustive]
8-
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
8+
#[derive(Clone, Debug, Eq, PartialEq)]
99
pub enum AlertValueWidgetDefinitionType {
10-
#[serde(rename = "alert_value")]
1110
ALERT_VALUE,
1211
}
1312

@@ -18,3 +17,32 @@ impl ToString for AlertValueWidgetDefinitionType {
1817
}
1918
}
2019
}
20+
21+
impl Serialize for AlertValueWidgetDefinitionType {
22+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
23+
where
24+
S: Serializer,
25+
{
26+
match self {
27+
_ => serializer.serialize_str(self.to_string().as_str()),
28+
}
29+
}
30+
}
31+
32+
impl<'de> Deserialize<'de> for AlertValueWidgetDefinitionType {
33+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
34+
where
35+
D: Deserializer<'de>,
36+
{
37+
let s: String = String::deserialize(deserializer)?;
38+
Ok(match s.as_str() {
39+
"alert_value" => Self::ALERT_VALUE,
40+
_ => {
41+
return Err(serde::de::Error::custom(format!(
42+
"Invalid value for SyntheticsDeviceID: {}",
43+
s
44+
)))
45+
}
46+
})
47+
}
48+
}

src/datadogV1/model/model_apm_stats_query_row_type.rs

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,13 @@
22
// This product includes software developed at Datadog (https://www.datadoghq.com/).
33
// Copyright 2019-Present Datadog, Inc.
44

5-
use serde::{Deserialize, Serialize};
5+
use serde::{Deserialize, Deserializer, Serialize, Serializer};
66

77
#[non_exhaustive]
8-
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
8+
#[derive(Clone, Debug, Eq, PartialEq)]
99
pub enum ApmStatsQueryRowType {
10-
#[serde(rename = "service")]
1110
SERVICE,
12-
#[serde(rename = "resource")]
1311
RESOURCE,
14-
#[serde(rename = "span")]
1512
SPAN,
1613
}
1714

@@ -24,3 +21,34 @@ impl ToString for ApmStatsQueryRowType {
2421
}
2522
}
2623
}
24+
25+
impl Serialize for ApmStatsQueryRowType {
26+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
27+
where
28+
S: Serializer,
29+
{
30+
match self {
31+
_ => serializer.serialize_str(self.to_string().as_str()),
32+
}
33+
}
34+
}
35+
36+
impl<'de> Deserialize<'de> for ApmStatsQueryRowType {
37+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
38+
where
39+
D: Deserializer<'de>,
40+
{
41+
let s: String = String::deserialize(deserializer)?;
42+
Ok(match s.as_str() {
43+
"service" => Self::SERVICE,
44+
"resource" => Self::RESOURCE,
45+
"span" => Self::SPAN,
46+
_ => {
47+
return Err(serde::de::Error::custom(format!(
48+
"Invalid value for SyntheticsDeviceID: {}",
49+
s
50+
)))
51+
}
52+
})
53+
}
54+
}

src/datadogV1/model/model_aws_event_bridge_create_status.rs

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22
// This product includes software developed at Datadog (https://www.datadoghq.com/).
33
// Copyright 2019-Present Datadog, Inc.
44

5-
use serde::{Deserialize, Serialize};
5+
use serde::{Deserialize, Deserializer, Serialize, Serializer};
66

77
#[non_exhaustive]
8-
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
8+
#[derive(Clone, Debug, Eq, PartialEq)]
99
pub enum AWSEventBridgeCreateStatus {
10-
#[serde(rename = "created")]
1110
CREATED,
1211
}
1312

@@ -18,3 +17,32 @@ impl ToString for AWSEventBridgeCreateStatus {
1817
}
1918
}
2019
}
20+
21+
impl Serialize for AWSEventBridgeCreateStatus {
22+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
23+
where
24+
S: Serializer,
25+
{
26+
match self {
27+
_ => serializer.serialize_str(self.to_string().as_str()),
28+
}
29+
}
30+
}
31+
32+
impl<'de> Deserialize<'de> for AWSEventBridgeCreateStatus {
33+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
34+
where
35+
D: Deserializer<'de>,
36+
{
37+
let s: String = String::deserialize(deserializer)?;
38+
Ok(match s.as_str() {
39+
"created" => Self::CREATED,
40+
_ => {
41+
return Err(serde::de::Error::custom(format!(
42+
"Invalid value for SyntheticsDeviceID: {}",
43+
s
44+
)))
45+
}
46+
})
47+
}
48+
}

src/datadogV1/model/model_aws_event_bridge_delete_status.rs

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22
// This product includes software developed at Datadog (https://www.datadoghq.com/).
33
// Copyright 2019-Present Datadog, Inc.
44

5-
use serde::{Deserialize, Serialize};
5+
use serde::{Deserialize, Deserializer, Serialize, Serializer};
66

77
#[non_exhaustive]
8-
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
8+
#[derive(Clone, Debug, Eq, PartialEq)]
99
pub enum AWSEventBridgeDeleteStatus {
10-
#[serde(rename = "empty")]
1110
EMPTY,
1211
}
1312

@@ -18,3 +17,32 @@ impl ToString for AWSEventBridgeDeleteStatus {
1817
}
1918
}
2019
}
20+
21+
impl Serialize for AWSEventBridgeDeleteStatus {
22+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
23+
where
24+
S: Serializer,
25+
{
26+
match self {
27+
_ => serializer.serialize_str(self.to_string().as_str()),
28+
}
29+
}
30+
}
31+
32+
impl<'de> Deserialize<'de> for AWSEventBridgeDeleteStatus {
33+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
34+
where
35+
D: Deserializer<'de>,
36+
{
37+
let s: String = String::deserialize(deserializer)?;
38+
Ok(match s.as_str() {
39+
"empty" => Self::EMPTY,
40+
_ => {
41+
return Err(serde::de::Error::custom(format!(
42+
"Invalid value for SyntheticsDeviceID: {}",
43+
s
44+
)))
45+
}
46+
})
47+
}
48+
}

0 commit comments

Comments
 (0)