polars_io/csv/write/
options.rs1use std::num::NonZeroUsize;
2use std::sync::Arc;
3
4use polars_utils::pl_str::PlSmallStr;
5#[cfg(feature = "serde")]
6use serde::{Deserialize, Serialize};
7
8use crate::ExternalCompression;
9
10#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
13#[cfg_attr(feature = "dsl-schema", derive(schemars::JsonSchema))]
14pub struct CsvWriterOptions {
15 pub include_bom: bool,
16 #[cfg_attr(feature = "serde", serde(default))]
17 pub compression: ExternalCompression,
18 #[cfg_attr(feature = "serde", serde(default))]
19 pub check_extension: bool,
20 pub include_header: bool,
21 pub batch_size: NonZeroUsize,
22 pub serialize_options: Arc<SerializeOptions>,
23}
24
25impl Default for CsvWriterOptions {
26 fn default() -> Self {
27 Self {
28 include_bom: false,
29 compression: ExternalCompression::default(),
30 check_extension: true,
31 include_header: true,
32 batch_size: NonZeroUsize::new(1024).unwrap(),
33 serialize_options: SerializeOptions::default().into(),
34 }
35 }
36}
37
38#[derive(Clone, Debug, Eq, Hash, PartialEq)]
42#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
43#[cfg_attr(feature = "dsl-schema", derive(schemars::JsonSchema))]
44pub struct SerializeOptions {
45 pub date_format: Option<PlSmallStr>,
47 pub time_format: Option<PlSmallStr>,
49 pub datetime_format: Option<PlSmallStr>,
51 pub float_scientific: Option<bool>,
54 pub float_precision: Option<usize>,
55 pub decimal_comma: bool,
57 pub separator: u8,
59 pub quote_char: u8,
61 pub null: PlSmallStr,
63 pub line_terminator: PlSmallStr,
65 pub quote_style: QuoteStyle,
67}
68
69impl Default for SerializeOptions {
70 fn default() -> Self {
71 Self {
72 date_format: None,
73 time_format: None,
74 datetime_format: None,
75 float_scientific: None,
76 float_precision: None,
77 decimal_comma: false,
78 separator: b',',
79 quote_char: b'"',
80 null: PlSmallStr::EMPTY,
81 line_terminator: "\n".into(),
82 quote_style: Default::default(),
83 }
84 }
85}
86
87#[derive(Copy, Clone, Debug, Default, Eq, Hash, PartialEq)]
89#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
90#[cfg_attr(feature = "dsl-schema", derive(schemars::JsonSchema))]
91pub enum QuoteStyle {
92 #[default]
99 Necessary,
100 Always,
102 NonNumeric,
107 Never,
109}