feldera_types/format/
csv.rs1use std::fmt::Debug;
2
3use serde::{Deserialize, Serialize};
4use utoipa::ToSchema;
5
6#[derive(Clone, Debug, Deserialize, Serialize, ToSchema)]
7#[serde(default)]
8pub struct CsvParserConfig {
9 pub delimiter: char,
13
14 pub headers: bool,
16}
17
18impl CsvParserConfig {
19 pub fn delimiter(&self) -> CsvDelimiter {
20 self.delimiter.into()
21 }
22}
23
24impl Default for CsvParserConfig {
25 fn default() -> Self {
26 Self {
27 delimiter: CsvDelimiter::default().0.into(),
28 headers: false,
29 }
30 }
31}
32
33#[derive(Copy, Clone)]
35pub struct CsvDelimiter(pub u8);
36
37impl CsvDelimiter {
38 pub const DEFAULT: CsvDelimiter = CsvDelimiter(b',');
39}
40
41impl Default for CsvDelimiter {
42 fn default() -> Self {
43 Self::DEFAULT
44 }
45}
46
47impl Debug for CsvDelimiter {
48 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
49 f.debug_tuple("CsvDelimiter")
50 .field(&char::from(self.0))
51 .finish()
52 }
53}
54
55impl From<char> for CsvDelimiter {
56 fn from(value: char) -> Self {
57 Self(value.try_into().unwrap_or(b','))
58 }
59}
60
61#[derive(Debug, Deserialize, Serialize, ToSchema)]
62#[serde(default)]
63pub struct CsvEncoderConfig {
64 pub delimiter: char,
68
69 pub buffer_size_records: usize,
70}
71
72impl Default for CsvEncoderConfig {
73 fn default() -> Self {
74 Self {
75 delimiter: CsvDelimiter::default().0.into(),
76 buffer_size_records: 10_000,
77 }
78 }
79}