use std::num::NonZeroUsize;
use std::sync::Arc;
use polars_utils::pl_str::PlSmallStr;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use crate::ExternalCompression;
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "dsl-schema", derive(schemars::JsonSchema))]
pub struct CsvWriterOptions {
pub include_bom: bool,
#[cfg_attr(feature = "serde", serde(default))]
pub compression: ExternalCompression,
#[cfg_attr(feature = "serde", serde(default))]
pub check_extension: bool,
pub include_header: bool,
pub batch_size: NonZeroUsize,
pub serialize_options: Arc<SerializeOptions>,
}
impl Default for CsvWriterOptions {
fn default() -> Self {
Self {
include_bom: false,
compression: ExternalCompression::default(),
check_extension: true,
include_header: true,
batch_size: NonZeroUsize::new(1024).unwrap(),
serialize_options: SerializeOptions::default().into(),
}
}
}
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "dsl-schema", derive(schemars::JsonSchema))]
pub struct SerializeOptions {
pub date_format: Option<PlSmallStr>,
pub time_format: Option<PlSmallStr>,
pub datetime_format: Option<PlSmallStr>,
pub float_scientific: Option<bool>,
pub float_precision: Option<usize>,
pub decimal_comma: bool,
pub separator: u8,
pub quote_char: u8,
pub null: PlSmallStr,
pub line_terminator: PlSmallStr,
pub quote_style: QuoteStyle,
}
impl Default for SerializeOptions {
fn default() -> Self {
Self {
date_format: None,
time_format: None,
datetime_format: None,
float_scientific: None,
float_precision: None,
decimal_comma: false,
separator: b',',
quote_char: b'"',
null: PlSmallStr::EMPTY,
line_terminator: "\n".into(),
quote_style: Default::default(),
}
}
}
#[derive(Copy, Clone, Debug, Default, Eq, Hash, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "dsl-schema", derive(schemars::JsonSchema))]
pub enum QuoteStyle {
#[default]
Necessary,
Always,
NonNumeric,
Never,
}