1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
// Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License.
// This product includes software developed at Datadog (https://www.datadoghq.com/).
// Copyright 2019-Present Datadog, Inc.
use serde::de::{Error, MapAccess, Visitor};
use serde::{Deserialize, Deserializer, Serialize};
use serde_with::skip_serializing_none;
use std::fmt::{self, Formatter};
/// The definition of the `AzureTenant` object.
#[non_exhaustive]
#[skip_serializing_none]
#[derive(Clone, Debug, PartialEq, Serialize)]
pub struct AzureTenant {
/// The Client ID, also known as the Application ID in Azure, is a unique identifier for an application. It's used to identify the application during the authentication process. Your Application (client) ID is listed in the application's overview page. You can navigate to your application via the Azure Directory.
#[serde(rename = "app_client_id")]
pub app_client_id: String,
/// The Client Secret is a confidential piece of information known only to the application and Azure AD. It's used to prove the application's identity. Your Client Secret is available from the application’s secrets page. You can navigate to your application via the Azure Directory.
#[serde(rename = "client_secret")]
pub client_secret: String,
/// If provided, the custom scope to be requested from Microsoft when acquiring an OAuth 2 access token. This custom scope is used only in conjunction with the HTTP action. A resource's scope is constructed by using the identifier URI for the resource and .default, separated by a forward slash (/) as follows:{identifierURI}/.default.
#[serde(rename = "custom_scopes")]
pub custom_scopes: Option<String>,
/// The Tenant ID, also known as the Directory ID in Azure, is a unique identifier that represents an Azure AD instance. Your Tenant ID (Directory ID) is listed in your Active Directory overview page under the 'Tenant information' section.
#[serde(rename = "tenant_id")]
pub tenant_id: String,
/// The definition of the `AzureTenant` object.
#[serde(rename = "type")]
pub type_: crate::datadogV2::model::AzureTenantType,
#[serde(flatten)]
pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
#[serde(skip)]
#[serde(default)]
pub(crate) _unparsed: bool,
}
impl AzureTenant {
pub fn new(
app_client_id: String,
client_secret: String,
tenant_id: String,
type_: crate::datadogV2::model::AzureTenantType,
) -> AzureTenant {
AzureTenant {
app_client_id,
client_secret,
custom_scopes: None,
tenant_id,
type_,
additional_properties: std::collections::BTreeMap::new(),
_unparsed: false,
}
}
pub fn custom_scopes(mut self, value: String) -> Self {
self.custom_scopes = Some(value);
self
}
pub fn additional_properties(
mut self,
value: std::collections::BTreeMap<String, serde_json::Value>,
) -> Self {
self.additional_properties = value;
self
}
}
impl<'de> Deserialize<'de> for AzureTenant {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
struct AzureTenantVisitor;
impl<'a> Visitor<'a> for AzureTenantVisitor {
type Value = AzureTenant;
fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result {
f.write_str("a mapping")
}
fn visit_map<M>(self, mut map: M) -> Result<Self::Value, M::Error>
where
M: MapAccess<'a>,
{
let mut app_client_id: Option<String> = None;
let mut client_secret: Option<String> = None;
let mut custom_scopes: Option<String> = None;
let mut tenant_id: Option<String> = None;
let mut type_: Option<crate::datadogV2::model::AzureTenantType> = None;
let mut additional_properties: std::collections::BTreeMap<
String,
serde_json::Value,
> = std::collections::BTreeMap::new();
let mut _unparsed = false;
while let Some((k, v)) = map.next_entry::<String, serde_json::Value>()? {
match k.as_str() {
"app_client_id" => {
app_client_id =
Some(serde_json::from_value(v).map_err(M::Error::custom)?);
}
"client_secret" => {
client_secret =
Some(serde_json::from_value(v).map_err(M::Error::custom)?);
}
"custom_scopes" => {
if v.is_null() {
continue;
}
custom_scopes =
Some(serde_json::from_value(v).map_err(M::Error::custom)?);
}
"tenant_id" => {
tenant_id = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
}
"type" => {
type_ = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
if let Some(ref _type_) = type_ {
match _type_ {
crate::datadogV2::model::AzureTenantType::UnparsedObject(
_type_,
) => {
_unparsed = true;
}
_ => {}
}
}
}
&_ => {
if let Ok(value) = serde_json::from_value(v.clone()) {
additional_properties.insert(k, value);
}
}
}
}
let app_client_id =
app_client_id.ok_or_else(|| M::Error::missing_field("app_client_id"))?;
let client_secret =
client_secret.ok_or_else(|| M::Error::missing_field("client_secret"))?;
let tenant_id = tenant_id.ok_or_else(|| M::Error::missing_field("tenant_id"))?;
let type_ = type_.ok_or_else(|| M::Error::missing_field("type_"))?;
let content = AzureTenant {
app_client_id,
client_secret,
custom_scopes,
tenant_id,
type_,
additional_properties,
_unparsed,
};
Ok(content)
}
}
deserializer.deserialize_any(AzureTenantVisitor)
}
}