use serde::{Deserialize, Serialize};
use std::fmt::Display;
use utoipa::ToSchema;
#[derive(Clone, Debug, Default, Deserialize, Serialize, ToSchema)]
#[serde(default)]
pub struct JsonParserConfig {
pub update_format: JsonUpdateFormat,
pub json_flavor: JsonFlavor,
pub array: bool,
pub lines: JsonLines,
}
#[derive(Deserialize, Serialize, Clone, Debug, Default, PartialEq, Eq, ToSchema)]
pub enum JsonLines {
#[default]
#[serde(rename = "multiple")]
Multiple,
#[serde(rename = "single")]
Single,
}
#[derive(Deserialize, Serialize, Clone, Debug, Default, PartialEq, Eq, ToSchema)]
pub enum JsonUpdateFormat {
#[default]
#[serde(rename = "insert_delete")]
InsertDelete,
#[serde(rename = "weighted")]
Weighted,
#[serde(rename = "debezium")]
Debezium,
#[serde(rename = "snowflake")]
Snowflake,
#[serde(rename = "raw")]
Raw,
#[serde(rename = "redis")]
Redis,
}
impl Display for JsonUpdateFormat {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
JsonUpdateFormat::InsertDelete => write!(f, "insert_delete"),
JsonUpdateFormat::Weighted => write!(f, "weighted"),
JsonUpdateFormat::Debezium => write!(f, "debezium"),
JsonUpdateFormat::Snowflake => write!(f, "snowflake"),
JsonUpdateFormat::Raw => write!(f, "raw"),
JsonUpdateFormat::Redis => write!(f, "redis"),
}
}
}
#[derive(Clone, Default, Deserialize, Serialize, Debug, PartialEq, Eq, ToSchema)]
pub enum JsonFlavor {
#[default]
#[serde(rename = "default")]
Default,
#[serde(rename = "debezium_mysql")]
DebeziumMySql,
#[serde(rename = "debezium_postgres")]
DebeziumPostgres,
#[serde(rename = "snowflake")]
Snowflake,
#[serde(rename = "kafka_connect_json_converter")]
KafkaConnectJsonConverter,
#[serde(rename = "pandas")]
Pandas,
#[serde(rename = "blockchain")]
Blockchain,
#[serde(rename = "c_hex")]
CHex,
#[serde(skip)]
ParquetConverter,
ClockInput,
#[serde(rename = "datagen")]
Datagen,
#[serde(rename = "postgres")]
Postgres,
}
#[derive(Deserialize, Serialize, ToSchema)]
#[serde(default)]
pub struct JsonEncoderConfig {
pub update_format: JsonUpdateFormat,
pub json_flavor: Option<JsonFlavor>,
pub buffer_size_records: usize,
pub array: bool,
pub key_fields: Option<Vec<String>>,
}
impl Default for JsonEncoderConfig {
fn default() -> Self {
Self {
update_format: JsonUpdateFormat::default(),
json_flavor: None,
buffer_size_records: 10_000,
array: false,
key_fields: None,
}
}
}