datadog_api_client/datadogV1/model/
model_aws_event_bridge_create_request.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/// An object used to create an EventBridge source.
10#[non_exhaustive]
11#[skip_serializing_none]
12#[derive(Clone, Debug, PartialEq, Serialize)]
13pub struct AWSEventBridgeCreateRequest {
14    /// Your AWS Account ID without dashes.
15    #[serde(rename = "account_id")]
16    pub account_id: Option<String>,
17    /// True if Datadog should create the event bus in addition to the event
18    /// source. Requires the `events:CreateEventBus` permission.
19    #[serde(rename = "create_event_bus")]
20    pub create_event_bus: Option<bool>,
21    /// The given part of the event source name, which is then combined with an
22    /// assigned suffix to form the full name.
23    #[serde(rename = "event_generator_name")]
24    pub event_generator_name: Option<String>,
25    /// The event source's [AWS region](<https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints>).
26    #[serde(rename = "region")]
27    pub region: Option<String>,
28    #[serde(flatten)]
29    pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
30    #[serde(skip)]
31    #[serde(default)]
32    pub(crate) _unparsed: bool,
33}
34
35impl AWSEventBridgeCreateRequest {
36    pub fn new() -> AWSEventBridgeCreateRequest {
37        AWSEventBridgeCreateRequest {
38            account_id: None,
39            create_event_bus: None,
40            event_generator_name: None,
41            region: None,
42            additional_properties: std::collections::BTreeMap::new(),
43            _unparsed: false,
44        }
45    }
46
47    pub fn account_id(mut self, value: String) -> Self {
48        self.account_id = Some(value);
49        self
50    }
51
52    pub fn create_event_bus(mut self, value: bool) -> Self {
53        self.create_event_bus = Some(value);
54        self
55    }
56
57    pub fn event_generator_name(mut self, value: String) -> Self {
58        self.event_generator_name = Some(value);
59        self
60    }
61
62    pub fn region(mut self, value: String) -> Self {
63        self.region = Some(value);
64        self
65    }
66
67    pub fn additional_properties(
68        mut self,
69        value: std::collections::BTreeMap<String, serde_json::Value>,
70    ) -> Self {
71        self.additional_properties = value;
72        self
73    }
74}
75
76impl Default for AWSEventBridgeCreateRequest {
77    fn default() -> Self {
78        Self::new()
79    }
80}
81
82impl<'de> Deserialize<'de> for AWSEventBridgeCreateRequest {
83    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
84    where
85        D: Deserializer<'de>,
86    {
87        struct AWSEventBridgeCreateRequestVisitor;
88        impl<'a> Visitor<'a> for AWSEventBridgeCreateRequestVisitor {
89            type Value = AWSEventBridgeCreateRequest;
90
91            fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result {
92                f.write_str("a mapping")
93            }
94
95            fn visit_map<M>(self, mut map: M) -> Result<Self::Value, M::Error>
96            where
97                M: MapAccess<'a>,
98            {
99                let mut account_id: Option<String> = None;
100                let mut create_event_bus: Option<bool> = None;
101                let mut event_generator_name: Option<String> = None;
102                let mut region: Option<String> = None;
103                let mut additional_properties: std::collections::BTreeMap<
104                    String,
105                    serde_json::Value,
106                > = std::collections::BTreeMap::new();
107                let mut _unparsed = false;
108
109                while let Some((k, v)) = map.next_entry::<String, serde_json::Value>()? {
110                    match k.as_str() {
111                        "account_id" => {
112                            if v.is_null() {
113                                continue;
114                            }
115                            account_id = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
116                        }
117                        "create_event_bus" => {
118                            if v.is_null() {
119                                continue;
120                            }
121                            create_event_bus =
122                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
123                        }
124                        "event_generator_name" => {
125                            if v.is_null() {
126                                continue;
127                            }
128                            event_generator_name =
129                                Some(serde_json::from_value(v).map_err(M::Error::custom)?);
130                        }
131                        "region" => {
132                            if v.is_null() {
133                                continue;
134                            }
135                            region = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
136                        }
137                        &_ => {
138                            if let Ok(value) = serde_json::from_value(v.clone()) {
139                                additional_properties.insert(k, value);
140                            }
141                        }
142                    }
143                }
144
145                let content = AWSEventBridgeCreateRequest {
146                    account_id,
147                    create_event_bus,
148                    event_generator_name,
149                    region,
150                    additional_properties,
151                    _unparsed,
152                };
153
154                Ok(content)
155            }
156        }
157
158        deserializer.deserialize_any(AWSEventBridgeCreateRequestVisitor)
159    }
160}