Path: blob/main/crates/polars-io/src/csv/write/options.rs
6939 views
use std::num::NonZeroUsize;12#[cfg(feature = "serde")]3use serde::{Deserialize, Serialize};45/// Options for writing CSV files.6#[derive(Clone, Debug, Eq, Hash, PartialEq)]7#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]8#[cfg_attr(feature = "dsl-schema", derive(schemars::JsonSchema))]9pub struct CsvWriterOptions {10pub include_bom: bool,11pub include_header: bool,12pub batch_size: NonZeroUsize,13pub serialize_options: SerializeOptions,14}1516impl Default for CsvWriterOptions {17fn default() -> Self {18Self {19include_bom: false,20include_header: true,21batch_size: NonZeroUsize::new(1024).unwrap(),22serialize_options: SerializeOptions::default(),23}24}25}2627/// Options to serialize logical types to CSV.28///29/// The default is to format times and dates as `chrono` crate formats them.30#[derive(Clone, Debug, Eq, Hash, PartialEq)]31#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]32#[cfg_attr(feature = "dsl-schema", derive(schemars::JsonSchema))]33pub struct SerializeOptions {34/// Used for [`DataType::Date`](polars_core::datatypes::DataType::Date).35pub date_format: Option<String>,36/// Used for [`DataType::Time`](polars_core::datatypes::DataType::Time).37pub time_format: Option<String>,38/// Used for [`DataType::Datetime`](polars_core::datatypes::DataType::Datetime).39pub datetime_format: Option<String>,40/// Used for [`DataType::Float64`](polars_core::datatypes::DataType::Float64)41/// and [`DataType::Float32`](polars_core::datatypes::DataType::Float32).42pub float_scientific: Option<bool>,43pub float_precision: Option<usize>,44/// Use comma as the decimal separator.45pub decimal_comma: bool,46/// Used as separator.47pub separator: u8,48/// Quoting character.49pub quote_char: u8,50/// Null value representation.51pub null: String,52/// String appended after every row.53pub line_terminator: String,54/// When to insert quotes.55pub quote_style: QuoteStyle,56}5758impl Default for SerializeOptions {59fn default() -> Self {60Self {61date_format: None,62time_format: None,63datetime_format: None,64float_scientific: None,65float_precision: None,66decimal_comma: false,67separator: b',',68quote_char: b'"',69null: String::new(),70line_terminator: "\n".into(),71quote_style: Default::default(),72}73}74}7576/// Quote style indicating when to insert quotes around a field.77#[derive(Copy, Clone, Debug, Default, Eq, Hash, PartialEq)]78#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]79#[cfg_attr(feature = "dsl-schema", derive(schemars::JsonSchema))]80pub enum QuoteStyle {81/// Quote fields only when necessary.82///83/// Quotes are necessary when fields contain a quote, separator or record terminator.84/// Quotes are also necessary when writing an empty record (which is indistinguishable85/// from arecord with one empty field).86/// This is the default.87#[default]88Necessary,89/// Quote every field. Always.90Always,91/// Quote non-numeric fields.92///93/// When writing a field that does not parse as a valid float or integer,94/// quotes will be used even if they aren't strictly necessary.95NonNumeric,96/// Never quote any fields, even if it would produce invalid CSV data.97Never,98}99100101