#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ExportFormat {
Csv,
Json,
Tsv,
Table,
Insert,
Parquet,
Markdown,
}
impl ExportFormat {
pub fn from_token(token: &str) -> Option<Self> {
match token.to_ascii_lowercase().as_str() {
"csv" => Some(Self::Csv),
"json" => Some(Self::Json),
"tsv" => Some(Self::Tsv),
"table" | "tbl" => Some(Self::Table),
"insert" | "sql" => Some(Self::Insert),
"parquet" | "pq" => Some(Self::Parquet),
"markdown" | "md" => Some(Self::Markdown),
_ => None,
}
}
pub const fn default_extension(self) -> &'static str {
match self {
Self::Csv => "csv",
Self::Json => "json",
Self::Tsv => "tsv",
Self::Table => "txt",
Self::Insert => "sql",
Self::Parquet => "parquet",
Self::Markdown => "md",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum ParquetCompression {
#[default]
Snappy,
Zstd,
None,
}
impl ParquetCompression {
pub fn from_token(token: &str) -> Option<Self> {
match token.to_ascii_lowercase().as_str() {
"snappy" | "snap" => Some(Self::Snappy),
"zstd" | "zst" => Some(Self::Zstd),
"none" | "uncompressed" => Some(Self::None),
_ => None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct MarkdownOptions {
pub row_limit: Option<usize>,
}
impl Default for MarkdownOptions {
fn default() -> Self {
Self {
row_limit: Some(1000),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[non_exhaustive]
pub struct ExportOptions {
pub parquet_compression: ParquetCompression,
pub markdown: MarkdownOptions,
}
impl ExportOptions {
#[must_use]
pub const fn parquet(compression: ParquetCompression) -> Self {
Self {
parquet_compression: compression,
markdown: MarkdownOptions {
row_limit: Some(1000),
},
}
}
#[must_use]
pub const fn markdown_full() -> Self {
Self {
parquet_compression: ParquetCompression::Snappy,
markdown: MarkdownOptions { row_limit: None },
}
}
}
pub use narwhal_domain::export::QualifiedName;