datadog_api_client/datadogV2/model/
model_ruleset_resp_data_attributes.rs

1// Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License.
2// This product includes software developed at Datadog (https://www.datadoghq.com/).
3// Copyright 2019-Present Datadog, Inc.
4use serde::de::{Error, MapAccess, Visitor};
5use serde::{Deserialize, Deserializer, Serialize};
6use serde_with::skip_serializing_none;
7use std::fmt::{self, Formatter};
8
9/// The definition of `RulesetRespDataAttributes` object.
10#[non_exhaustive]
11#[skip_serializing_none]
12#[derive(Clone, Debug, PartialEq, Serialize)]
13pub struct RulesetRespDataAttributes {
14    /// The definition of `RulesetRespDataAttributesCreated` object.
15    #[serde(rename = "created")]
16    pub created: crate::datadogV2::model::RulesetRespDataAttributesCreated,
17    /// The `attributes` `enabled`.
18    #[serde(rename = "enabled")]
19    pub enabled: bool,
20    /// The `attributes` `last_modified_user_uuid`.
21    #[serde(rename = "last_modified_user_uuid")]
22    pub last_modified_user_uuid: String,
23    /// The definition of `RulesetRespDataAttributesModified` object.
24    #[serde(rename = "modified")]
25    pub modified: crate::datadogV2::model::RulesetRespDataAttributesModified,
26    /// The `attributes` `name`.
27    #[serde(rename = "name")]
28    pub name: String,
29    /// The `attributes` `position`.
30    #[serde(rename = "position")]
31    pub position: i32,
32    /// The `attributes` `rules`.
33    #[serde(rename = "rules")]
34    pub rules: Vec<crate::datadogV2::model::RulesetRespDataAttributesRulesItems>,
35    /// The `attributes` `version`.
36    #[serde(rename = "version")]
37    pub version: i64,
38    #[serde(flatten)]
39    pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
40    #[serde(skip)]
41    #[serde(default)]
42    pub(crate) _unparsed: bool,
43}
44
45impl RulesetRespDataAttributes {
46    pub fn new(
47        created: crate::datadogV2::model::RulesetRespDataAttributesCreated,
48        enabled: bool,
49        last_modified_user_uuid: String,
50        modified: crate::datadogV2::model::RulesetRespDataAttributesModified,
51        name: String,
52        position: i32,
53        rules: Vec<crate::datadogV2::model::RulesetRespDataAttributesRulesItems>,
54        version: i64,
55    ) -> RulesetRespDataAttributes {
56        RulesetRespDataAttributes {
57            created,
58            enabled,
59            last_modified_user_uuid,
60            modified,
61            name,
62            position,
63            rules,
64            version,
65            additional_properties: std::collections::BTreeMap::new(),
66            _unparsed: false,
67        }
68    }
69
70    pub fn additional_properties(
71        mut self,
72        value: std::collections::BTreeMap<String, serde_json::Value>,
73    ) -> Self {
74        self.additional_properties = value;
75        self
76    }
77}
78
79impl<'de> Deserialize<'de> for RulesetRespDataAttributes {
80    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
81    where
82        D: Deserializer<'de>,
83    {
84        struct RulesetRespDataAttributesVisitor;
85        impl<'a> Visitor<'a> for RulesetRespDataAttributesVisitor {
86            type Value = RulesetRespDataAttributes;
87
88            fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result {
89                f.write_str("a mapping")
90            }
91
92            fn visit_map<M>(self, mut map: M) -> Result<Self::Value, M::Error>
93            where
94                M: MapAccess<'a>,
95            {
96                let mut created: Option<crate::datadogV2::model::RulesetRespDataAttributesCreated> =
97                    None;
98                let mut enabled: Option<bool> = None;
99                let mut last_modified_user_uuid: Option<String> = None;
100                let mut modified: Option<
101                    crate::datadogV2::model::RulesetRespDataAttributesModified,
102                > = None;
103                let mut name: Option<String> = None;
104                let mut position: Option<i32> = None;
105                let mut rules: Option<
106                    Vec<crate::datadogV2::model::RulesetRespDataAttributesRulesItems>,
107                > = None;
108                let mut version: Option<i64> = None;
109                let mut additional_properties: std::collections::BTreeMap<
110                    String,
111                    serde_json::Value,
112                > = std::collections::BTreeMap::new();
113                let mut _unparsed = false;
114
115                while let Some((k, v)) = map.next_entry::<String, serde_json::Value>()? {
116                    match k.as_str() {
117                        "created" => {
118                            created = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
119                        }
120                        "enabled" => {
121                            enabled = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
122                        }
123                        "last_modified_user_uuid" => {
124                            last_modified_user_uuid =
125                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
126                        }
127                        "modified" => {
128                            modified = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
129                        }
130                        "name" => {
131                            name = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
132                        }
133                        "position" => {
134                            position = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
135                        }
136                        "rules" => {
137                            rules = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
138                        }
139                        "version" => {
140                            version = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
141                        }
142                        &_ => {
143                            if let Ok(value) = serde_json::from_value(v.clone()) {
144                                additional_properties.insert(k, value);
145                            }
146                        }
147                    }
148                }
149                let created = created.ok_or_else(|| M::Error::missing_field("created"))?;
150                let enabled = enabled.ok_or_else(|| M::Error::missing_field("enabled"))?;
151                let last_modified_user_uuid = last_modified_user_uuid
152                    .ok_or_else(|| M::Error::missing_field("last_modified_user_uuid"))?;
153                let modified = modified.ok_or_else(|| M::Error::missing_field("modified"))?;
154                let name = name.ok_or_else(|| M::Error::missing_field("name"))?;
155                let position = position.ok_or_else(|| M::Error::missing_field("position"))?;
156                let rules = rules.ok_or_else(|| M::Error::missing_field("rules"))?;
157                let version = version.ok_or_else(|| M::Error::missing_field("version"))?;
158
159                let content = RulesetRespDataAttributes {
160                    created,
161                    enabled,
162                    last_modified_user_uuid,
163                    modified,
164                    name,
165                    position,
166                    rules,
167                    version,
168                    additional_properties,
169                    _unparsed,
170                };
171
172                Ok(content)
173            }
174        }
175
176        deserializer.deserialize_any(RulesetRespDataAttributesVisitor)
177    }
178}