feldera_types/format/
csv.rsuse std::fmt::Debug;
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
#[derive(Clone, Debug, Deserialize, Serialize, ToSchema)]
#[serde(default)]
pub struct CsvParserConfig {
pub delimiter: char,
pub headers: bool,
}
impl CsvParserConfig {
pub fn delimiter(&self) -> CsvDelimiter {
self.delimiter.into()
}
}
impl Default for CsvParserConfig {
fn default() -> Self {
Self {
delimiter: CsvDelimiter::default().0.into(),
headers: false,
}
}
}
#[derive(Copy, Clone)]
pub struct CsvDelimiter(pub u8);
impl CsvDelimiter {
pub const DEFAULT: CsvDelimiter = CsvDelimiter(b',');
}
impl Default for CsvDelimiter {
fn default() -> Self {
Self::DEFAULT
}
}
impl Debug for CsvDelimiter {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_tuple("CsvDelimiter")
.field(&char::from(self.0))
.finish()
}
}
impl From<char> for CsvDelimiter {
fn from(value: char) -> Self {
Self(value.try_into().unwrap_or(b','))
}
}
#[derive(Debug, Deserialize, Serialize, ToSchema)]
#[serde(default)]
pub struct CsvEncoderConfig {
pub delimiter: char,
pub buffer_size_records: usize,
}
impl Default for CsvEncoderConfig {
fn default() -> Self {
Self {
delimiter: CsvDelimiter::default().0.into(),
buffer_size_records: 10_000,
}
}
}