diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index d2192b748..f81d82c0f 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -35455,6 +35455,37 @@ components: role session. type: string type: object + ObservabilityPipelineCloudPremDestination: + description: The `cloud_prem` destination sends logs to Datadog CloudPrem. + properties: + id: + description: The unique identifier for this component. + example: cloud-prem-destination + type: string + inputs: + description: A list of component IDs whose output is used as the `input` + for this component. + example: + - filter-processor + items: + type: string + type: array + type: + $ref: '#/components/schemas/ObservabilityPipelineCloudPremDestinationType' + required: + - id + - type + - inputs + type: object + ObservabilityPipelineCloudPremDestinationType: + default: cloud_prem + description: The destination type. The value should always be `cloud_prem`. + enum: + - cloud_prem + example: cloud_prem + type: string + x-enum-varnames: + - CLOUD_PREM ObservabilityPipelineComponentDisplayName: description: The display name for a component. example: my component @@ -35510,6 +35541,7 @@ components: description: A destination for the pipeline. oneOf: - $ref: '#/components/schemas/ObservabilityPipelineDatadogLogsDestination' + - $ref: '#/components/schemas/ObservabilityPipelineCloudPremDestination' - $ref: '#/components/schemas/ObservabilityPipelineAmazonS3Destination' - $ref: '#/components/schemas/ObservabilityPipelineGoogleCloudStorageDestination' - $ref: '#/components/schemas/ObservabilityPipelineSplunkHecDestination' @@ -35528,6 +35560,7 @@ components: - $ref: '#/components/schemas/ObservabilityPipelineAmazonSecurityLakeDestination' - $ref: '#/components/schemas/ObservabilityPipelineCrowdStrikeNextGenSiemDestination' - $ref: '#/components/schemas/ObservabilityPipelineGooglePubSubDestination' + - $ref: '#/components/schemas/ObservabilityPipelineKafkaDestination' ObservabilityPipelineConfigProcessorGroup: description: A group of processors. example: @@ -36826,6 +36859,151 @@ components: type: string x-enum-varnames: - HTTP_SERVER + ObservabilityPipelineKafkaDestination: + description: The `kafka` destination sends logs to Apache Kafka topics. + properties: + compression: + $ref: '#/components/schemas/ObservabilityPipelineKafkaDestinationCompression' + encoding: + $ref: '#/components/schemas/ObservabilityPipelineKafkaDestinationEncoding' + headers_key: + description: The field name to use for Kafka message headers. + example: headers + type: string + id: + description: The unique identifier for this component. + example: kafka-destination + type: string + inputs: + description: A list of component IDs whose output is used as the `input` + for this component. + example: + - filter-processor + items: + type: string + type: array + key_field: + description: The field name to use as the Kafka message key. + example: message_id + type: string + librdkafka_options: + description: Optional list of advanced Kafka producer configuration options, + defined as key-value pairs. + items: + $ref: '#/components/schemas/ObservabilityPipelineKafkaLibrdkafkaOption' + type: array + message_timeout_ms: + description: Maximum time in milliseconds to wait for message delivery confirmation. + example: 300000 + format: int64 + minimum: 1 + type: integer + rate_limit_duration_secs: + description: Duration in seconds for the rate limit window. + example: 1 + format: int64 + minimum: 1 + type: integer + rate_limit_num: + description: Maximum number of messages allowed per rate limit duration. + example: 1000 + format: int64 + minimum: 1 + type: integer + sasl: + $ref: '#/components/schemas/ObservabilityPipelineKafkaSasl' + socket_timeout_ms: + description: Socket timeout in milliseconds for network requests. + example: 60000 + format: int64 + maximum: 300000 + minimum: 10 + type: integer + tls: + $ref: '#/components/schemas/ObservabilityPipelineTls' + topic: + description: The Kafka topic name to publish logs to. + example: logs-topic + type: string + type: + $ref: '#/components/schemas/ObservabilityPipelineKafkaDestinationType' + required: + - id + - type + - inputs + - topic + - encoding + type: object + ObservabilityPipelineKafkaDestinationCompression: + description: Compression codec for Kafka messages. + enum: + - none + - gzip + - snappy + - lz4 + - zstd + example: gzip + type: string + x-enum-varnames: + - NONE + - GZIP + - SNAPPY + - LZ4 + - ZSTD + ObservabilityPipelineKafkaDestinationEncoding: + description: Encoding format for log events. + enum: + - json + - raw_message + example: json + type: string + x-enum-varnames: + - JSON + - RAW_MESSAGE + ObservabilityPipelineKafkaDestinationType: + default: kafka + description: The destination type. The value should always be `kafka`. + enum: + - kafka + example: kafka + type: string + x-enum-varnames: + - KAFKA + ObservabilityPipelineKafkaLibrdkafkaOption: + description: Represents a key-value pair used to configure low-level `librdkafka` + client options for Kafka source and destination, such as timeouts, buffer + sizes, and security settings. + properties: + name: + description: The name of the `librdkafka` configuration option to set. + example: fetch.message.max.bytes + type: string + value: + description: The value assigned to the specified `librdkafka` configuration + option. + example: '1048576' + type: string + required: + - name + - value + type: object + ObservabilityPipelineKafkaSasl: + description: Specifies the SASL mechanism for authenticating with a Kafka cluster. + properties: + mechanism: + $ref: '#/components/schemas/ObservabilityPipelineKafkaSaslMechanism' + type: object + ObservabilityPipelineKafkaSaslMechanism: + description: SASL mechanism used for Kafka authentication. + enum: + - PLAIN + - SCRAM-SHA-256 + - SCRAM-SHA-512 + type: string + x-enum-varnames: + - PLAIN + - SCRAMNOT_SHANOT_256 + - SCRAMNOT_SHANOT_512 ObservabilityPipelineKafkaSource: description: The `kafka` source ingests data from Apache Kafka topics. properties: @@ -36843,10 +37021,10 @@ components: description: Optional list of advanced Kafka client configuration options, defined as key-value pairs. items: - $ref: '#/components/schemas/ObservabilityPipelineKafkaSourceLibrdkafkaOption' + $ref: '#/components/schemas/ObservabilityPipelineKafkaLibrdkafkaOption' type: array sasl: - $ref: '#/components/schemas/ObservabilityPipelineKafkaSourceSasl' + $ref: '#/components/schemas/ObservabilityPipelineKafkaSasl' tls: $ref: '#/components/schemas/ObservabilityPipelineTls' topics: @@ -36866,30 +37044,6 @@ components: - group_id - topics type: object - ObservabilityPipelineKafkaSourceLibrdkafkaOption: - description: Represents a key-value pair used to configure low-level `librdkafka` - client options for Kafka sources, such as timeouts, buffer sizes, and security - settings. - properties: - name: - description: The name of the `librdkafka` configuration option to set. - example: fetch.message.max.bytes - type: string - value: - description: The value assigned to the specified `librdkafka` configuration - option. - example: '1048576' - type: string - required: - - name - - value - type: object - ObservabilityPipelineKafkaSourceSasl: - description: Specifies the SASL mechanism for authenticating with a Kafka cluster. - properties: - mechanism: - $ref: '#/components/schemas/ObservabilityPipelinePipelineKafkaSourceSaslMechanism' - type: object ObservabilityPipelineKafkaSourceType: default: kafka description: The source type. The value should always be `kafka`. @@ -37279,17 +37433,6 @@ components: type: string x-enum-varnames: - PARSE_JSON - ObservabilityPipelinePipelineKafkaSourceSaslMechanism: - description: SASL mechanism used for Kafka authentication. - enum: - - PLAIN - - SCRAM-SHA-256 - - SCRAM-SHA-512 - type: string - x-enum-varnames: - - PLAIN - - SCRAMNOT_SHANOT_256 - - SCRAMNOT_SHANOT_512 ObservabilityPipelineQuotaProcessor: description: The Quota Processor measures logging traffic for logs that match a specified filter. When the configured daily quota is met, the processor diff --git a/src/datadogV2/model/mod.rs b/src/datadogV2/model/mod.rs index 5bc89fdeb..969cc5d79 100644 --- a/src/datadogV2/model/mod.rs +++ b/src/datadogV2/model/mod.rs @@ -5016,6 +5016,10 @@ pub mod model_observability_pipeline_datadog_logs_destination; pub use self::model_observability_pipeline_datadog_logs_destination::ObservabilityPipelineDatadogLogsDestination; pub mod model_observability_pipeline_datadog_logs_destination_type; pub use self::model_observability_pipeline_datadog_logs_destination_type::ObservabilityPipelineDatadogLogsDestinationType; +pub mod model_observability_pipeline_cloud_prem_destination; +pub use self::model_observability_pipeline_cloud_prem_destination::ObservabilityPipelineCloudPremDestination; +pub mod model_observability_pipeline_cloud_prem_destination_type; +pub use self::model_observability_pipeline_cloud_prem_destination_type::ObservabilityPipelineCloudPremDestinationType; pub mod model_observability_pipeline_amazon_s3_destination; pub use self::model_observability_pipeline_amazon_s3_destination::ObservabilityPipelineAmazonS3Destination; pub mod model_observability_pipeline_aws_auth; @@ -5146,6 +5150,20 @@ pub mod model_observability_pipeline_google_pub_sub_destination_encoding; pub use self::model_observability_pipeline_google_pub_sub_destination_encoding::ObservabilityPipelineGooglePubSubDestinationEncoding; pub mod model_observability_pipeline_google_pub_sub_destination_type; pub use self::model_observability_pipeline_google_pub_sub_destination_type::ObservabilityPipelineGooglePubSubDestinationType; +pub mod model_observability_pipeline_kafka_destination; +pub use self::model_observability_pipeline_kafka_destination::ObservabilityPipelineKafkaDestination; +pub mod model_observability_pipeline_kafka_destination_compression; +pub use self::model_observability_pipeline_kafka_destination_compression::ObservabilityPipelineKafkaDestinationCompression; +pub mod model_observability_pipeline_kafka_destination_encoding; +pub use self::model_observability_pipeline_kafka_destination_encoding::ObservabilityPipelineKafkaDestinationEncoding; +pub mod model_observability_pipeline_kafka_librdkafka_option; +pub use self::model_observability_pipeline_kafka_librdkafka_option::ObservabilityPipelineKafkaLibrdkafkaOption; +pub mod model_observability_pipeline_kafka_sasl; +pub use self::model_observability_pipeline_kafka_sasl::ObservabilityPipelineKafkaSasl; +pub mod model_observability_pipeline_kafka_sasl_mechanism; +pub use self::model_observability_pipeline_kafka_sasl_mechanism::ObservabilityPipelineKafkaSaslMechanism; +pub mod model_observability_pipeline_kafka_destination_type; +pub use self::model_observability_pipeline_kafka_destination_type::ObservabilityPipelineKafkaDestinationType; pub mod model_observability_pipeline_config_destination_item; pub use self::model_observability_pipeline_config_destination_item::ObservabilityPipelineConfigDestinationItem; pub mod model_observability_pipeline_config_processor_group; @@ -5348,12 +5366,6 @@ pub mod model_observability_pipeline_config_processor_item; pub use self::model_observability_pipeline_config_processor_item::ObservabilityPipelineConfigProcessorItem; pub mod model_observability_pipeline_kafka_source; pub use self::model_observability_pipeline_kafka_source::ObservabilityPipelineKafkaSource; -pub mod model_observability_pipeline_kafka_source_librdkafka_option; -pub use self::model_observability_pipeline_kafka_source_librdkafka_option::ObservabilityPipelineKafkaSourceLibrdkafkaOption; -pub mod model_observability_pipeline_kafka_source_sasl; -pub use self::model_observability_pipeline_kafka_source_sasl::ObservabilityPipelineKafkaSourceSasl; -pub mod model_observability_pipeline_pipeline_kafka_source_sasl_mechanism; -pub use self::model_observability_pipeline_pipeline_kafka_source_sasl_mechanism::ObservabilityPipelinePipelineKafkaSourceSaslMechanism; pub mod model_observability_pipeline_kafka_source_type; pub use self::model_observability_pipeline_kafka_source_type::ObservabilityPipelineKafkaSourceType; pub mod model_observability_pipeline_datadog_agent_source; diff --git a/src/datadogV2/model/model_observability_pipeline_cloud_prem_destination.rs b/src/datadogV2/model/model_observability_pipeline_cloud_prem_destination.rs new file mode 100644 index 000000000..25925e4b2 --- /dev/null +++ b/src/datadogV2/model/model_observability_pipeline_cloud_prem_destination.rs @@ -0,0 +1,126 @@ +// 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 `cloud_prem` destination sends logs to Datadog CloudPrem. +#[non_exhaustive] +#[skip_serializing_none] +#[derive(Clone, Debug, PartialEq, Serialize)] +pub struct ObservabilityPipelineCloudPremDestination { + /// The unique identifier for this component. + #[serde(rename = "id")] + pub id: String, + /// A list of component IDs whose output is used as the `input` for this component. + #[serde(rename = "inputs")] + pub inputs: Vec, + /// The destination type. The value should always be `cloud_prem`. + #[serde(rename = "type")] + pub type_: crate::datadogV2::model::ObservabilityPipelineCloudPremDestinationType, + #[serde(flatten)] + pub additional_properties: std::collections::BTreeMap, + #[serde(skip)] + #[serde(default)] + pub(crate) _unparsed: bool, +} + +impl ObservabilityPipelineCloudPremDestination { + pub fn new( + id: String, + inputs: Vec, + type_: crate::datadogV2::model::ObservabilityPipelineCloudPremDestinationType, + ) -> ObservabilityPipelineCloudPremDestination { + ObservabilityPipelineCloudPremDestination { + id, + inputs, + type_, + additional_properties: std::collections::BTreeMap::new(), + _unparsed: false, + } + } + + pub fn additional_properties( + mut self, + value: std::collections::BTreeMap, + ) -> Self { + self.additional_properties = value; + self + } +} + +impl<'de> Deserialize<'de> for ObservabilityPipelineCloudPremDestination { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + struct ObservabilityPipelineCloudPremDestinationVisitor; + impl<'a> Visitor<'a> for ObservabilityPipelineCloudPremDestinationVisitor { + type Value = ObservabilityPipelineCloudPremDestination; + + fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result { + f.write_str("a mapping") + } + + fn visit_map(self, mut map: M) -> Result + where + M: MapAccess<'a>, + { + let mut id: Option = None; + let mut inputs: Option> = None; + let mut type_: Option< + crate::datadogV2::model::ObservabilityPipelineCloudPremDestinationType, + > = 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::()? { + match k.as_str() { + "id" => { + id = Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + "inputs" => { + inputs = 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::ObservabilityPipelineCloudPremDestinationType::UnparsedObject(_type_) => { + _unparsed = true; + }, + _ => {} + } + } + } + &_ => { + if let Ok(value) = serde_json::from_value(v.clone()) { + additional_properties.insert(k, value); + } + } + } + } + let id = id.ok_or_else(|| M::Error::missing_field("id"))?; + let inputs = inputs.ok_or_else(|| M::Error::missing_field("inputs"))?; + let type_ = type_.ok_or_else(|| M::Error::missing_field("type_"))?; + + let content = ObservabilityPipelineCloudPremDestination { + id, + inputs, + type_, + additional_properties, + _unparsed, + }; + + Ok(content) + } + } + + deserializer.deserialize_any(ObservabilityPipelineCloudPremDestinationVisitor) + } +} diff --git a/src/datadogV2/model/model_observability_pipeline_cloud_prem_destination_type.rs b/src/datadogV2/model/model_observability_pipeline_cloud_prem_destination_type.rs new file mode 100644 index 000000000..5d30914a6 --- /dev/null +++ b/src/datadogV2/model/model_observability_pipeline_cloud_prem_destination_type.rs @@ -0,0 +1,48 @@ +// 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::{Deserialize, Deserializer, Serialize, Serializer}; + +#[non_exhaustive] +#[derive(Clone, Debug, Eq, PartialEq)] +pub enum ObservabilityPipelineCloudPremDestinationType { + CLOUD_PREM, + UnparsedObject(crate::datadog::UnparsedObject), +} + +impl ToString for ObservabilityPipelineCloudPremDestinationType { + fn to_string(&self) -> String { + match self { + Self::CLOUD_PREM => String::from("cloud_prem"), + Self::UnparsedObject(v) => v.value.to_string(), + } + } +} + +impl Serialize for ObservabilityPipelineCloudPremDestinationType { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + match self { + Self::UnparsedObject(v) => v.serialize(serializer), + _ => serializer.serialize_str(self.to_string().as_str()), + } + } +} + +impl<'de> Deserialize<'de> for ObservabilityPipelineCloudPremDestinationType { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let s: String = String::deserialize(deserializer)?; + Ok(match s.as_str() { + "cloud_prem" => Self::CLOUD_PREM, + _ => Self::UnparsedObject(crate::datadog::UnparsedObject { + value: serde_json::Value::String(s.into()), + }), + }) + } +} diff --git a/src/datadogV2/model/model_observability_pipeline_config_destination_item.rs b/src/datadogV2/model/model_observability_pipeline_config_destination_item.rs index 767c70f3e..fbb3929ae 100644 --- a/src/datadogV2/model/model_observability_pipeline_config_destination_item.rs +++ b/src/datadogV2/model/model_observability_pipeline_config_destination_item.rs @@ -11,6 +11,9 @@ pub enum ObservabilityPipelineConfigDestinationItem { ObservabilityPipelineDatadogLogsDestination( Box, ), + ObservabilityPipelineCloudPremDestination( + Box, + ), ObservabilityPipelineAmazonS3Destination( Box, ), @@ -61,6 +64,9 @@ pub enum ObservabilityPipelineConfigDestinationItem { ObservabilityPipelineGooglePubSubDestination( Box, ), + ObservabilityPipelineKafkaDestination( + Box, + ), UnparsedObject(crate::datadog::UnparsedObject), } @@ -78,6 +84,14 @@ impl<'de> Deserialize<'de> for ObservabilityPipelineConfigDestinationItem { return Ok(ObservabilityPipelineConfigDestinationItem::ObservabilityPipelineDatadogLogsDestination(_v)); } } + if let Ok(_v) = serde_json::from_value::< + Box, + >(value.clone()) + { + if !_v._unparsed { + return Ok(ObservabilityPipelineConfigDestinationItem::ObservabilityPipelineCloudPremDestination(_v)); + } + } if let Ok(_v) = serde_json::from_value::< Box, >(value.clone()) @@ -224,6 +238,14 @@ impl<'de> Deserialize<'de> for ObservabilityPipelineConfigDestinationItem { return Ok(ObservabilityPipelineConfigDestinationItem::ObservabilityPipelineGooglePubSubDestination(_v)); } } + if let Ok(_v) = serde_json::from_value::< + Box, + >(value.clone()) + { + if !_v._unparsed { + return Ok(ObservabilityPipelineConfigDestinationItem::ObservabilityPipelineKafkaDestination(_v)); + } + } return Ok(ObservabilityPipelineConfigDestinationItem::UnparsedObject( crate::datadog::UnparsedObject { value }, diff --git a/src/datadogV2/model/model_observability_pipeline_kafka_destination.rs b/src/datadogV2/model/model_observability_pipeline_kafka_destination.rs new file mode 100644 index 000000000..b2bab0e1d --- /dev/null +++ b/src/datadogV2/model/model_observability_pipeline_kafka_destination.rs @@ -0,0 +1,356 @@ +// 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 `kafka` destination sends logs to Apache Kafka topics. +#[non_exhaustive] +#[skip_serializing_none] +#[derive(Clone, Debug, PartialEq, Serialize)] +pub struct ObservabilityPipelineKafkaDestination { + /// Compression codec for Kafka messages. + #[serde(rename = "compression")] + pub compression: + Option, + /// Encoding format for log events. + #[serde(rename = "encoding")] + pub encoding: crate::datadogV2::model::ObservabilityPipelineKafkaDestinationEncoding, + /// The field name to use for Kafka message headers. + #[serde(rename = "headers_key")] + pub headers_key: Option, + /// The unique identifier for this component. + #[serde(rename = "id")] + pub id: String, + /// A list of component IDs whose output is used as the `input` for this component. + #[serde(rename = "inputs")] + pub inputs: Vec, + /// The field name to use as the Kafka message key. + #[serde(rename = "key_field")] + pub key_field: Option, + /// Optional list of advanced Kafka producer configuration options, defined as key-value pairs. + #[serde(rename = "librdkafka_options")] + pub librdkafka_options: + Option>, + /// Maximum time in milliseconds to wait for message delivery confirmation. + #[serde(rename = "message_timeout_ms")] + pub message_timeout_ms: Option, + /// Duration in seconds for the rate limit window. + #[serde(rename = "rate_limit_duration_secs")] + pub rate_limit_duration_secs: Option, + /// Maximum number of messages allowed per rate limit duration. + #[serde(rename = "rate_limit_num")] + pub rate_limit_num: Option, + /// Specifies the SASL mechanism for authenticating with a Kafka cluster. + #[serde(rename = "sasl")] + pub sasl: Option, + /// Socket timeout in milliseconds for network requests. + #[serde(rename = "socket_timeout_ms")] + pub socket_timeout_ms: Option, + /// Configuration for enabling TLS encryption between the pipeline component and external services. + #[serde(rename = "tls")] + pub tls: Option, + /// The Kafka topic name to publish logs to. + #[serde(rename = "topic")] + pub topic: String, + /// The destination type. The value should always be `kafka`. + #[serde(rename = "type")] + pub type_: crate::datadogV2::model::ObservabilityPipelineKafkaDestinationType, + #[serde(flatten)] + pub additional_properties: std::collections::BTreeMap, + #[serde(skip)] + #[serde(default)] + pub(crate) _unparsed: bool, +} + +impl ObservabilityPipelineKafkaDestination { + pub fn new( + encoding: crate::datadogV2::model::ObservabilityPipelineKafkaDestinationEncoding, + id: String, + inputs: Vec, + topic: String, + type_: crate::datadogV2::model::ObservabilityPipelineKafkaDestinationType, + ) -> ObservabilityPipelineKafkaDestination { + ObservabilityPipelineKafkaDestination { + compression: None, + encoding, + headers_key: None, + id, + inputs, + key_field: None, + librdkafka_options: None, + message_timeout_ms: None, + rate_limit_duration_secs: None, + rate_limit_num: None, + sasl: None, + socket_timeout_ms: None, + tls: None, + topic, + type_, + additional_properties: std::collections::BTreeMap::new(), + _unparsed: false, + } + } + + pub fn compression( + mut self, + value: crate::datadogV2::model::ObservabilityPipelineKafkaDestinationCompression, + ) -> Self { + self.compression = Some(value); + self + } + + pub fn headers_key(mut self, value: String) -> Self { + self.headers_key = Some(value); + self + } + + pub fn key_field(mut self, value: String) -> Self { + self.key_field = Some(value); + self + } + + pub fn librdkafka_options( + mut self, + value: Vec, + ) -> Self { + self.librdkafka_options = Some(value); + self + } + + pub fn message_timeout_ms(mut self, value: i64) -> Self { + self.message_timeout_ms = Some(value); + self + } + + pub fn rate_limit_duration_secs(mut self, value: i64) -> Self { + self.rate_limit_duration_secs = Some(value); + self + } + + pub fn rate_limit_num(mut self, value: i64) -> Self { + self.rate_limit_num = Some(value); + self + } + + pub fn sasl(mut self, value: crate::datadogV2::model::ObservabilityPipelineKafkaSasl) -> Self { + self.sasl = Some(value); + self + } + + pub fn socket_timeout_ms(mut self, value: i64) -> Self { + self.socket_timeout_ms = Some(value); + self + } + + pub fn tls(mut self, value: crate::datadogV2::model::ObservabilityPipelineTls) -> Self { + self.tls = Some(value); + self + } + + pub fn additional_properties( + mut self, + value: std::collections::BTreeMap, + ) -> Self { + self.additional_properties = value; + self + } +} + +impl<'de> Deserialize<'de> for ObservabilityPipelineKafkaDestination { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + struct ObservabilityPipelineKafkaDestinationVisitor; + impl<'a> Visitor<'a> for ObservabilityPipelineKafkaDestinationVisitor { + type Value = ObservabilityPipelineKafkaDestination; + + fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result { + f.write_str("a mapping") + } + + fn visit_map(self, mut map: M) -> Result + where + M: MapAccess<'a>, + { + let mut compression: Option< + crate::datadogV2::model::ObservabilityPipelineKafkaDestinationCompression, + > = None; + let mut encoding: Option< + crate::datadogV2::model::ObservabilityPipelineKafkaDestinationEncoding, + > = None; + let mut headers_key: Option = None; + let mut id: Option = None; + let mut inputs: Option> = None; + let mut key_field: Option = None; + let mut librdkafka_options: Option< + Vec, + > = None; + let mut message_timeout_ms: Option = None; + let mut rate_limit_duration_secs: Option = None; + let mut rate_limit_num: Option = None; + let mut sasl: Option = + None; + let mut socket_timeout_ms: Option = None; + let mut tls: Option = None; + let mut topic: Option = None; + let mut type_: Option< + crate::datadogV2::model::ObservabilityPipelineKafkaDestinationType, + > = 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::()? { + match k.as_str() { + "compression" => { + if v.is_null() { + continue; + } + compression = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + if let Some(ref _compression) = compression { + match _compression { + crate::datadogV2::model::ObservabilityPipelineKafkaDestinationCompression::UnparsedObject(_compression) => { + _unparsed = true; + }, + _ => {} + } + } + } + "encoding" => { + encoding = Some(serde_json::from_value(v).map_err(M::Error::custom)?); + if let Some(ref _encoding) = encoding { + match _encoding { + crate::datadogV2::model::ObservabilityPipelineKafkaDestinationEncoding::UnparsedObject(_encoding) => { + _unparsed = true; + }, + _ => {} + } + } + } + "headers_key" => { + if v.is_null() { + continue; + } + headers_key = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + "id" => { + id = Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + "inputs" => { + inputs = Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + "key_field" => { + if v.is_null() { + continue; + } + key_field = Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + "librdkafka_options" => { + if v.is_null() { + continue; + } + librdkafka_options = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + "message_timeout_ms" => { + if v.is_null() { + continue; + } + message_timeout_ms = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + "rate_limit_duration_secs" => { + if v.is_null() { + continue; + } + rate_limit_duration_secs = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + "rate_limit_num" => { + if v.is_null() { + continue; + } + rate_limit_num = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + "sasl" => { + if v.is_null() { + continue; + } + sasl = Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + "socket_timeout_ms" => { + if v.is_null() { + continue; + } + socket_timeout_ms = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + "tls" => { + if v.is_null() { + continue; + } + tls = Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + "topic" => { + topic = 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::ObservabilityPipelineKafkaDestinationType::UnparsedObject(_type_) => { + _unparsed = true; + }, + _ => {} + } + } + } + &_ => { + if let Ok(value) = serde_json::from_value(v.clone()) { + additional_properties.insert(k, value); + } + } + } + } + let encoding = encoding.ok_or_else(|| M::Error::missing_field("encoding"))?; + let id = id.ok_or_else(|| M::Error::missing_field("id"))?; + let inputs = inputs.ok_or_else(|| M::Error::missing_field("inputs"))?; + let topic = topic.ok_or_else(|| M::Error::missing_field("topic"))?; + let type_ = type_.ok_or_else(|| M::Error::missing_field("type_"))?; + + let content = ObservabilityPipelineKafkaDestination { + compression, + encoding, + headers_key, + id, + inputs, + key_field, + librdkafka_options, + message_timeout_ms, + rate_limit_duration_secs, + rate_limit_num, + sasl, + socket_timeout_ms, + tls, + topic, + type_, + additional_properties, + _unparsed, + }; + + Ok(content) + } + } + + deserializer.deserialize_any(ObservabilityPipelineKafkaDestinationVisitor) + } +} diff --git a/src/datadogV2/model/model_observability_pipeline_kafka_destination_compression.rs b/src/datadogV2/model/model_observability_pipeline_kafka_destination_compression.rs new file mode 100644 index 000000000..7394485f1 --- /dev/null +++ b/src/datadogV2/model/model_observability_pipeline_kafka_destination_compression.rs @@ -0,0 +1,60 @@ +// 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::{Deserialize, Deserializer, Serialize, Serializer}; + +#[non_exhaustive] +#[derive(Clone, Debug, Eq, PartialEq)] +pub enum ObservabilityPipelineKafkaDestinationCompression { + NONE, + GZIP, + SNAPPY, + LZ4, + ZSTD, + UnparsedObject(crate::datadog::UnparsedObject), +} + +impl ToString for ObservabilityPipelineKafkaDestinationCompression { + fn to_string(&self) -> String { + match self { + Self::NONE => String::from("none"), + Self::GZIP => String::from("gzip"), + Self::SNAPPY => String::from("snappy"), + Self::LZ4 => String::from("lz4"), + Self::ZSTD => String::from("zstd"), + Self::UnparsedObject(v) => v.value.to_string(), + } + } +} + +impl Serialize for ObservabilityPipelineKafkaDestinationCompression { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + match self { + Self::UnparsedObject(v) => v.serialize(serializer), + _ => serializer.serialize_str(self.to_string().as_str()), + } + } +} + +impl<'de> Deserialize<'de> for ObservabilityPipelineKafkaDestinationCompression { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let s: String = String::deserialize(deserializer)?; + Ok(match s.as_str() { + "none" => Self::NONE, + "gzip" => Self::GZIP, + "snappy" => Self::SNAPPY, + "lz4" => Self::LZ4, + "zstd" => Self::ZSTD, + _ => Self::UnparsedObject(crate::datadog::UnparsedObject { + value: serde_json::Value::String(s.into()), + }), + }) + } +} diff --git a/src/datadogV2/model/model_observability_pipeline_kafka_destination_encoding.rs b/src/datadogV2/model/model_observability_pipeline_kafka_destination_encoding.rs new file mode 100644 index 000000000..5937f001d --- /dev/null +++ b/src/datadogV2/model/model_observability_pipeline_kafka_destination_encoding.rs @@ -0,0 +1,51 @@ +// 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::{Deserialize, Deserializer, Serialize, Serializer}; + +#[non_exhaustive] +#[derive(Clone, Debug, Eq, PartialEq)] +pub enum ObservabilityPipelineKafkaDestinationEncoding { + JSON, + RAW_MESSAGE, + UnparsedObject(crate::datadog::UnparsedObject), +} + +impl ToString for ObservabilityPipelineKafkaDestinationEncoding { + fn to_string(&self) -> String { + match self { + Self::JSON => String::from("json"), + Self::RAW_MESSAGE => String::from("raw_message"), + Self::UnparsedObject(v) => v.value.to_string(), + } + } +} + +impl Serialize for ObservabilityPipelineKafkaDestinationEncoding { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + match self { + Self::UnparsedObject(v) => v.serialize(serializer), + _ => serializer.serialize_str(self.to_string().as_str()), + } + } +} + +impl<'de> Deserialize<'de> for ObservabilityPipelineKafkaDestinationEncoding { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let s: String = String::deserialize(deserializer)?; + Ok(match s.as_str() { + "json" => Self::JSON, + "raw_message" => Self::RAW_MESSAGE, + _ => Self::UnparsedObject(crate::datadog::UnparsedObject { + value: serde_json::Value::String(s.into()), + }), + }) + } +} diff --git a/src/datadogV2/model/model_observability_pipeline_kafka_destination_type.rs b/src/datadogV2/model/model_observability_pipeline_kafka_destination_type.rs new file mode 100644 index 000000000..38fdb3964 --- /dev/null +++ b/src/datadogV2/model/model_observability_pipeline_kafka_destination_type.rs @@ -0,0 +1,48 @@ +// 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::{Deserialize, Deserializer, Serialize, Serializer}; + +#[non_exhaustive] +#[derive(Clone, Debug, Eq, PartialEq)] +pub enum ObservabilityPipelineKafkaDestinationType { + KAFKA, + UnparsedObject(crate::datadog::UnparsedObject), +} + +impl ToString for ObservabilityPipelineKafkaDestinationType { + fn to_string(&self) -> String { + match self { + Self::KAFKA => String::from("kafka"), + Self::UnparsedObject(v) => v.value.to_string(), + } + } +} + +impl Serialize for ObservabilityPipelineKafkaDestinationType { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + match self { + Self::UnparsedObject(v) => v.serialize(serializer), + _ => serializer.serialize_str(self.to_string().as_str()), + } + } +} + +impl<'de> Deserialize<'de> for ObservabilityPipelineKafkaDestinationType { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let s: String = String::deserialize(deserializer)?; + Ok(match s.as_str() { + "kafka" => Self::KAFKA, + _ => Self::UnparsedObject(crate::datadog::UnparsedObject { + value: serde_json::Value::String(s.into()), + }), + }) + } +} diff --git a/src/datadogV2/model/model_observability_pipeline_kafka_source_librdkafka_option.rs b/src/datadogV2/model/model_observability_pipeline_kafka_librdkafka_option.rs similarity index 80% rename from src/datadogV2/model/model_observability_pipeline_kafka_source_librdkafka_option.rs rename to src/datadogV2/model/model_observability_pipeline_kafka_librdkafka_option.rs index 7ff22eb0f..1ec941c93 100644 --- a/src/datadogV2/model/model_observability_pipeline_kafka_source_librdkafka_option.rs +++ b/src/datadogV2/model/model_observability_pipeline_kafka_librdkafka_option.rs @@ -6,11 +6,11 @@ use serde::{Deserialize, Deserializer, Serialize}; use serde_with::skip_serializing_none; use std::fmt::{self, Formatter}; -/// Represents a key-value pair used to configure low-level `librdkafka` client options for Kafka sources, such as timeouts, buffer sizes, and security settings. +/// Represents a key-value pair used to configure low-level `librdkafka` client options for Kafka source and destination, such as timeouts, buffer sizes, and security settings. #[non_exhaustive] #[skip_serializing_none] #[derive(Clone, Debug, PartialEq, Serialize)] -pub struct ObservabilityPipelineKafkaSourceLibrdkafkaOption { +pub struct ObservabilityPipelineKafkaLibrdkafkaOption { /// The name of the `librdkafka` configuration option to set. #[serde(rename = "name")] pub name: String, @@ -24,9 +24,9 @@ pub struct ObservabilityPipelineKafkaSourceLibrdkafkaOption { pub(crate) _unparsed: bool, } -impl ObservabilityPipelineKafkaSourceLibrdkafkaOption { - pub fn new(name: String, value: String) -> ObservabilityPipelineKafkaSourceLibrdkafkaOption { - ObservabilityPipelineKafkaSourceLibrdkafkaOption { +impl ObservabilityPipelineKafkaLibrdkafkaOption { + pub fn new(name: String, value: String) -> ObservabilityPipelineKafkaLibrdkafkaOption { + ObservabilityPipelineKafkaLibrdkafkaOption { name, value, additional_properties: std::collections::BTreeMap::new(), @@ -43,14 +43,14 @@ impl ObservabilityPipelineKafkaSourceLibrdkafkaOption { } } -impl<'de> Deserialize<'de> for ObservabilityPipelineKafkaSourceLibrdkafkaOption { +impl<'de> Deserialize<'de> for ObservabilityPipelineKafkaLibrdkafkaOption { fn deserialize(deserializer: D) -> Result where D: Deserializer<'de>, { - struct ObservabilityPipelineKafkaSourceLibrdkafkaOptionVisitor; - impl<'a> Visitor<'a> for ObservabilityPipelineKafkaSourceLibrdkafkaOptionVisitor { - type Value = ObservabilityPipelineKafkaSourceLibrdkafkaOption; + struct ObservabilityPipelineKafkaLibrdkafkaOptionVisitor; + impl<'a> Visitor<'a> for ObservabilityPipelineKafkaLibrdkafkaOptionVisitor { + type Value = ObservabilityPipelineKafkaLibrdkafkaOption; fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result { f.write_str("a mapping") @@ -86,7 +86,7 @@ impl<'de> Deserialize<'de> for ObservabilityPipelineKafkaSourceLibrdkafkaOption let name = name.ok_or_else(|| M::Error::missing_field("name"))?; let value = value.ok_or_else(|| M::Error::missing_field("value"))?; - let content = ObservabilityPipelineKafkaSourceLibrdkafkaOption { + let content = ObservabilityPipelineKafkaLibrdkafkaOption { name, value, additional_properties, @@ -97,6 +97,6 @@ impl<'de> Deserialize<'de> for ObservabilityPipelineKafkaSourceLibrdkafkaOption } } - deserializer.deserialize_any(ObservabilityPipelineKafkaSourceLibrdkafkaOptionVisitor) + deserializer.deserialize_any(ObservabilityPipelineKafkaLibrdkafkaOptionVisitor) } } diff --git a/src/datadogV2/model/model_observability_pipeline_kafka_source_sasl.rs b/src/datadogV2/model/model_observability_pipeline_kafka_sasl.rs similarity index 78% rename from src/datadogV2/model/model_observability_pipeline_kafka_source_sasl.rs rename to src/datadogV2/model/model_observability_pipeline_kafka_sasl.rs index 91216f442..da017d93e 100644 --- a/src/datadogV2/model/model_observability_pipeline_kafka_source_sasl.rs +++ b/src/datadogV2/model/model_observability_pipeline_kafka_sasl.rs @@ -10,11 +10,10 @@ use std::fmt::{self, Formatter}; #[non_exhaustive] #[skip_serializing_none] #[derive(Clone, Debug, PartialEq, Serialize)] -pub struct ObservabilityPipelineKafkaSourceSasl { +pub struct ObservabilityPipelineKafkaSasl { /// SASL mechanism used for Kafka authentication. #[serde(rename = "mechanism")] - pub mechanism: - Option, + pub mechanism: Option, #[serde(flatten)] pub additional_properties: std::collections::BTreeMap, #[serde(skip)] @@ -22,9 +21,9 @@ pub struct ObservabilityPipelineKafkaSourceSasl { pub(crate) _unparsed: bool, } -impl ObservabilityPipelineKafkaSourceSasl { - pub fn new() -> ObservabilityPipelineKafkaSourceSasl { - ObservabilityPipelineKafkaSourceSasl { +impl ObservabilityPipelineKafkaSasl { + pub fn new() -> ObservabilityPipelineKafkaSasl { + ObservabilityPipelineKafkaSasl { mechanism: None, additional_properties: std::collections::BTreeMap::new(), _unparsed: false, @@ -33,7 +32,7 @@ impl ObservabilityPipelineKafkaSourceSasl { pub fn mechanism( mut self, - value: crate::datadogV2::model::ObservabilityPipelinePipelineKafkaSourceSaslMechanism, + value: crate::datadogV2::model::ObservabilityPipelineKafkaSaslMechanism, ) -> Self { self.mechanism = Some(value); self @@ -48,20 +47,20 @@ impl ObservabilityPipelineKafkaSourceSasl { } } -impl Default for ObservabilityPipelineKafkaSourceSasl { +impl Default for ObservabilityPipelineKafkaSasl { fn default() -> Self { Self::new() } } -impl<'de> Deserialize<'de> for ObservabilityPipelineKafkaSourceSasl { +impl<'de> Deserialize<'de> for ObservabilityPipelineKafkaSasl { fn deserialize(deserializer: D) -> Result where D: Deserializer<'de>, { - struct ObservabilityPipelineKafkaSourceSaslVisitor; - impl<'a> Visitor<'a> for ObservabilityPipelineKafkaSourceSaslVisitor { - type Value = ObservabilityPipelineKafkaSourceSasl; + struct ObservabilityPipelineKafkaSaslVisitor; + impl<'a> Visitor<'a> for ObservabilityPipelineKafkaSaslVisitor { + type Value = ObservabilityPipelineKafkaSasl; fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result { f.write_str("a mapping") @@ -72,7 +71,7 @@ impl<'de> Deserialize<'de> for ObservabilityPipelineKafkaSourceSasl { M: MapAccess<'a>, { let mut mechanism: Option< - crate::datadogV2::model::ObservabilityPipelinePipelineKafkaSourceSaslMechanism, + crate::datadogV2::model::ObservabilityPipelineKafkaSaslMechanism, > = None; let mut additional_properties: std::collections::BTreeMap< String, @@ -89,7 +88,7 @@ impl<'de> Deserialize<'de> for ObservabilityPipelineKafkaSourceSasl { mechanism = Some(serde_json::from_value(v).map_err(M::Error::custom)?); if let Some(ref _mechanism) = mechanism { match _mechanism { - crate::datadogV2::model::ObservabilityPipelinePipelineKafkaSourceSaslMechanism::UnparsedObject(_mechanism) => { + crate::datadogV2::model::ObservabilityPipelineKafkaSaslMechanism::UnparsedObject(_mechanism) => { _unparsed = true; }, _ => {} @@ -104,7 +103,7 @@ impl<'de> Deserialize<'de> for ObservabilityPipelineKafkaSourceSasl { } } - let content = ObservabilityPipelineKafkaSourceSasl { + let content = ObservabilityPipelineKafkaSasl { mechanism, additional_properties, _unparsed, @@ -114,6 +113,6 @@ impl<'de> Deserialize<'de> for ObservabilityPipelineKafkaSourceSasl { } } - deserializer.deserialize_any(ObservabilityPipelineKafkaSourceSaslVisitor) + deserializer.deserialize_any(ObservabilityPipelineKafkaSaslVisitor) } } diff --git a/src/datadogV2/model/model_observability_pipeline_pipeline_kafka_source_sasl_mechanism.rs b/src/datadogV2/model/model_observability_pipeline_kafka_sasl_mechanism.rs similarity index 84% rename from src/datadogV2/model/model_observability_pipeline_pipeline_kafka_source_sasl_mechanism.rs rename to src/datadogV2/model/model_observability_pipeline_kafka_sasl_mechanism.rs index de010e683..4eccd28d3 100644 --- a/src/datadogV2/model/model_observability_pipeline_pipeline_kafka_source_sasl_mechanism.rs +++ b/src/datadogV2/model/model_observability_pipeline_kafka_sasl_mechanism.rs @@ -6,14 +6,14 @@ use serde::{Deserialize, Deserializer, Serialize, Serializer}; #[non_exhaustive] #[derive(Clone, Debug, Eq, PartialEq)] -pub enum ObservabilityPipelinePipelineKafkaSourceSaslMechanism { +pub enum ObservabilityPipelineKafkaSaslMechanism { PLAIN, SCRAMNOT_SHANOT_256, SCRAMNOT_SHANOT_512, UnparsedObject(crate::datadog::UnparsedObject), } -impl ToString for ObservabilityPipelinePipelineKafkaSourceSaslMechanism { +impl ToString for ObservabilityPipelineKafkaSaslMechanism { fn to_string(&self) -> String { match self { Self::PLAIN => String::from("PLAIN"), @@ -24,7 +24,7 @@ impl ToString for ObservabilityPipelinePipelineKafkaSourceSaslMechanism { } } -impl Serialize for ObservabilityPipelinePipelineKafkaSourceSaslMechanism { +impl Serialize for ObservabilityPipelineKafkaSaslMechanism { fn serialize(&self, serializer: S) -> Result where S: Serializer, @@ -36,7 +36,7 @@ impl Serialize for ObservabilityPipelinePipelineKafkaSourceSaslMechanism { } } -impl<'de> Deserialize<'de> for ObservabilityPipelinePipelineKafkaSourceSaslMechanism { +impl<'de> Deserialize<'de> for ObservabilityPipelineKafkaSaslMechanism { fn deserialize(deserializer: D) -> Result where D: Deserializer<'de>, diff --git a/src/datadogV2/model/model_observability_pipeline_kafka_source.rs b/src/datadogV2/model/model_observability_pipeline_kafka_source.rs index a2cb75f12..da26ad5f8 100644 --- a/src/datadogV2/model/model_observability_pipeline_kafka_source.rs +++ b/src/datadogV2/model/model_observability_pipeline_kafka_source.rs @@ -20,10 +20,10 @@ pub struct ObservabilityPipelineKafkaSource { /// Optional list of advanced Kafka client configuration options, defined as key-value pairs. #[serde(rename = "librdkafka_options")] pub librdkafka_options: - Option>, + Option>, /// Specifies the SASL mechanism for authenticating with a Kafka cluster. #[serde(rename = "sasl")] - pub sasl: Option, + pub sasl: Option, /// Configuration for enabling TLS encryption between the pipeline component and external services. #[serde(rename = "tls")] pub tls: Option, @@ -62,16 +62,13 @@ impl ObservabilityPipelineKafkaSource { pub fn librdkafka_options( mut self, - value: Vec, + value: Vec, ) -> Self { self.librdkafka_options = Some(value); self } - pub fn sasl( - mut self, - value: crate::datadogV2::model::ObservabilityPipelineKafkaSourceSasl, - ) -> Self { + pub fn sasl(mut self, value: crate::datadogV2::model::ObservabilityPipelineKafkaSasl) -> Self { self.sasl = Some(value); self } @@ -110,11 +107,10 @@ impl<'de> Deserialize<'de> for ObservabilityPipelineKafkaSource { let mut group_id: Option = None; let mut id: Option = None; let mut librdkafka_options: Option< - Vec, - > = None; - let mut sasl: Option< - crate::datadogV2::model::ObservabilityPipelineKafkaSourceSasl, + Vec, > = None; + let mut sasl: Option = + None; let mut tls: Option = None; let mut topics: Option> = None; let mut type_: Option<