vector/sinks/databend/
encoding.rs1use vector_lib::{
2 codecs::{CsvSerializerConfig, JsonSerializerConfig, encoding::SerializerConfig},
3 configurable::configurable_component,
4};
5
6use crate::codecs::{EncodingConfig, Transformer};
7
8#[configurable_component]
10#[derive(Clone, Debug)]
11#[serde(tag = "codec", rename_all = "snake_case")]
12#[configurable(metadata(docs::enum_tag_description = "The codec to use for encoding events."))]
13pub(super) enum DatabendSerializerConfig {
14 Csv(
19 CsvSerializerConfig,
21 ),
22
23 Json(
27 JsonSerializerConfig,
29 ),
30}
31
32impl From<DatabendSerializerConfig> for SerializerConfig {
33 fn from(config: DatabendSerializerConfig) -> Self {
34 match config {
35 DatabendSerializerConfig::Csv(config) => Self::Csv(config),
36 DatabendSerializerConfig::Json(config) => Self::Json(config),
37 }
38 }
39}
40
41impl Default for DatabendSerializerConfig {
42 fn default() -> Self {
43 Self::Json(JsonSerializerConfig::default())
44 }
45}
46
47#[configurable_component]
49#[derive(Clone, Debug, Default)]
50#[configurable(description = "Configures how events are encoded into raw bytes.")]
51pub struct DatabendEncodingConfig {
52 #[serde(flatten)]
53 encoding: DatabendSerializerConfig,
54
55 #[serde(flatten)]
56 transformer: Transformer,
57}
58
59impl From<DatabendEncodingConfig> for EncodingConfig {
60 fn from(encoding: DatabendEncodingConfig) -> Self {
61 Self::new(encoding.encoding.into(), encoding.transformer)
62 }
63}
64
65impl DatabendEncodingConfig {
66 pub(super) const fn config(&self) -> &DatabendSerializerConfig {
68 &self.encoding
69 }
70}
71
72#[configurable_component]
75#[derive(Clone, Debug)]
76#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
77#[configurable(metadata(docs::enum_tag_description = "How to handle missing fields for NDJson."))]
78#[derive(Default)]
79pub enum DatabendMissingFieldAS {
80 Error,
82
83 #[default]
85 Null,
86
87 FieldDefault,
89
90 TypeDefault,
92}
93
94impl DatabendMissingFieldAS {
95 pub(super) const fn as_str(&self) -> &'static str {
96 match self {
97 Self::Error => "ERROR",
98 Self::Null => "NULL",
99 Self::FieldDefault => "FIELD_DEFAULT",
100 Self::TypeDefault => "TYPE_DEFAULT",
101 }
102 }
103}