datadog_api_client/datadogV2/model/
model_dataset_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/// Create request for a dataset.
10#[non_exhaustive]
11#[skip_serializing_none]
12#[derive(Clone, Debug, PartialEq, Serialize)]
13pub struct DatasetCreateRequest {
14    /// **Datasets Object Constraints**
15    /// - **Tag limit per dataset**:
16    ///   - Each restricted dataset supports a maximum of 10 key:value pairs per product.
17    ///
18    /// - **Tag key rules per telemetry type**:
19    ///   - Only one tag key or attribute may be used to define access within a single telemetry type.
20    ///   - The same or different tag key may be used across different telemetry types.
21    ///
22    /// - **Tag value uniqueness**:
23    ///   - Tag values must be unique within a single dataset.
24    ///   - A tag value used in one dataset cannot be reused in another dataset of the same telemetry type.
25    #[serde(rename = "data")]
26    pub data: crate::datadogV2::model::DatasetRequest,
27    #[serde(flatten)]
28    pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
29    #[serde(skip)]
30    #[serde(default)]
31    pub(crate) _unparsed: bool,
32}
33
34impl DatasetCreateRequest {
35    pub fn new(data: crate::datadogV2::model::DatasetRequest) -> DatasetCreateRequest {
36        DatasetCreateRequest {
37            data,
38            additional_properties: std::collections::BTreeMap::new(),
39            _unparsed: false,
40        }
41    }
42
43    pub fn additional_properties(
44        mut self,
45        value: std::collections::BTreeMap<String, serde_json::Value>,
46    ) -> Self {
47        self.additional_properties = value;
48        self
49    }
50}
51
52impl<'de> Deserialize<'de> for DatasetCreateRequest {
53    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
54    where
55        D: Deserializer<'de>,
56    {
57        struct DatasetCreateRequestVisitor;
58        impl<'a> Visitor<'a> for DatasetCreateRequestVisitor {
59            type Value = DatasetCreateRequest;
60
61            fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result {
62                f.write_str("a mapping")
63            }
64
65            fn visit_map<M>(self, mut map: M) -> Result<Self::Value, M::Error>
66            where
67                M: MapAccess<'a>,
68            {
69                let mut data: Option<crate::datadogV2::model::DatasetRequest> = None;
70                let mut additional_properties: std::collections::BTreeMap<
71                    String,
72                    serde_json::Value,
73                > = std::collections::BTreeMap::new();
74                let mut _unparsed = false;
75
76                while let Some((k, v)) = map.next_entry::<String, serde_json::Value>()? {
77                    match k.as_str() {
78                        "data" => {
79                            data = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
80                        }
81                        &_ => {
82                            if let Ok(value) = serde_json::from_value(v.clone()) {
83                                additional_properties.insert(k, value);
84                            }
85                        }
86                    }
87                }
88                let data = data.ok_or_else(|| M::Error::missing_field("data"))?;
89
90                let content = DatasetCreateRequest {
91                    data,
92                    additional_properties,
93                    _unparsed,
94                };
95
96                Ok(content)
97            }
98        }
99
100        deserializer.deserialize_any(DatasetCreateRequestVisitor)
101    }
102}