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 pub check_extension: bool,
19 pub include_header: bool,
20 pub batch_size: NonZeroUsize,
21 pub serialize_options: Arc<SerializeOptions>,
22}
23
24impl Default for CsvWriterOptions {
25 fn default() -> Self {
26 Self {
27 include_bom: false,
28 compression: ExternalCompression::default(),
29 check_extension: true,
30 include_header: true,
31 batch_size: NonZeroUsize::new(1024).unwrap(),
32 serialize_options: SerializeOptions::default().into(),
33 }
34 }
35}
36
37#[derive(Clone, Debug, Eq, Hash, PartialEq)]
41#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
42#[cfg_attr(feature = "dsl-schema", derive(schemars::JsonSchema))]
43pub struct SerializeOptions {
44 pub date_format: Option<PlSmallStr>,
46 pub time_format: Option<PlSmallStr>,
48 pub datetime_format: Option<PlSmallStr>,
50 pub float_scientific: Option<bool>,
53 pub float_precision: Option<usize>,
54 pub decimal_comma: bool,
56 pub separator: u8,
58 pub quote_char: u8,
60 pub null: PlSmallStr,
62 pub line_terminator: PlSmallStr,
64 pub quote_style: QuoteStyle,
66}
67
68impl Default for SerializeOptions {
69 fn default() -> Self {
70 Self {
71 date_format: None,
72 time_format: None,
73 datetime_format: None,
74 float_scientific: None,
75 float_precision: None,
76 decimal_comma: false,
77 separator: b',',
78 quote_char: b'"',
79 null: PlSmallStr::EMPTY,
80 line_terminator: "\n".into(),
81 quote_style: Default::default(),
82 }
83 }
84}
85
86#[derive(Copy, Clone, Debug, Default, Eq, Hash, PartialEq)]
88#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
89#[cfg_attr(feature = "dsl-schema", derive(schemars::JsonSchema))]
90pub enum QuoteStyle {
91 #[default]
98 Necessary,
99 Always,
101 NonNumeric,
106 Never,
108}