datadog_api_client/datadogV2/model/
model_data_transform.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/// A data transformer, which is custom JavaScript code that executes and transforms data when its inputs change.
10#[non_exhaustive]
11#[skip_serializing_none]
12#[derive(Clone, Debug, PartialEq, Serialize)]
13pub struct DataTransform {
14    /// The ID of the data transformer.
15    #[serde(rename = "id")]
16    pub id: uuid::Uuid,
17    /// A unique identifier for this data transformer. This name is also used to access the transformer's result throughout the app.
18    #[serde(rename = "name")]
19    pub name: String,
20    /// The properties of the data transformer.
21    #[serde(rename = "properties")]
22    pub properties: crate::datadogV2::model::DataTransformProperties,
23    /// The data transform type.
24    #[serde(rename = "type")]
25    pub type_: crate::datadogV2::model::DataTransformType,
26    #[serde(flatten)]
27    pub additional_properties: std::collections::BTreeMap<String, serde_json::Value>,
28    #[serde(skip)]
29    #[serde(default)]
30    pub(crate) _unparsed: bool,
31}
32
33impl DataTransform {
34    pub fn new(
35        id: uuid::Uuid,
36        name: String,
37        properties: crate::datadogV2::model::DataTransformProperties,
38        type_: crate::datadogV2::model::DataTransformType,
39    ) -> DataTransform {
40        DataTransform {
41            id,
42            name,
43            properties,
44            type_,
45            additional_properties: std::collections::BTreeMap::new(),
46            _unparsed: false,
47        }
48    }
49
50    pub fn additional_properties(
51        mut self,
52        value: std::collections::BTreeMap<String, serde_json::Value>,
53    ) -> Self {
54        self.additional_properties = value;
55        self
56    }
57}
58
59impl<'de> Deserialize<'de> for DataTransform {
60    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
61    where
62        D: Deserializer<'de>,
63    {
64        struct DataTransformVisitor;
65        impl<'a> Visitor<'a> for DataTransformVisitor {
66            type Value = DataTransform;
67
68            fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result {
69                f.write_str("a mapping")
70            }
71
72            fn visit_map<M>(self, mut map: M) -> Result<Self::Value, M::Error>
73            where
74                M: MapAccess<'a>,
75            {
76                let mut id: Option<uuid::Uuid> = None;
77                let mut name: Option<String> = None;
78                let mut properties: Option<crate::datadogV2::model::DataTransformProperties> = None;
79                let mut type_: Option<crate::datadogV2::model::DataTransformType> = None;
80                let mut additional_properties: std::collections::BTreeMap<
81                    String,
82                    serde_json::Value,
83                > = std::collections::BTreeMap::new();
84                let mut _unparsed = false;
85
86                while let Some((k, v)) = map.next_entry::<String, serde_json::Value>()? {
87                    match k.as_str() {
88                        "id" => {
89                            id = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
90                        }
91                        "name" => {
92                            name = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
93                        }
94                        "properties" => {
95                            properties = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
96                        }
97                        "type" => {
98                            type_ = Some(serde_json::from_value(v).map_err(M::Error::custom)?);
99                            if let Some(ref _type_) = type_ {
100                                match _type_ {
101                                    crate::datadogV2::model::DataTransformType::UnparsedObject(
102                                        _type_,
103                                    ) => {
104                                        _unparsed = true;
105                                    }
106                                    _ => {}
107                                }
108                            }
109                        }
110                        &_ => {
111                            if let Ok(value) = serde_json::from_value(v.clone()) {
112                                additional_properties.insert(k, value);
113                            }
114                        }
115                    }
116                }
117                let id = id.ok_or_else(|| M::Error::missing_field("id"))?;
118                let name = name.ok_or_else(|| M::Error::missing_field("name"))?;
119                let properties = properties.ok_or_else(|| M::Error::missing_field("properties"))?;
120                let type_ = type_.ok_or_else(|| M::Error::missing_field("type_"))?;
121
122                let content = DataTransform {
123                    id,
124                    name,
125                    properties,
126                    type_,
127                    additional_properties,
128                    _unparsed,
129                };
130
131                Ok(content)
132            }
133        }
134
135        deserializer.deserialize_any(DataTransformVisitor)
136    }
137}