polars_view/
file_extension.rs

1use crate::PathExtension;
2use std::path::Path;
3
4/// Represents the extension of a file.
5#[derive(Debug, Clone, PartialEq, Eq)]
6pub enum FileExtension {
7    /// CSV file extension.
8    Csv,
9    /// Json file extension.
10    Json,
11    /// Newline-Delimited Json file extension.
12    NDJson,
13    /// Parquet file extension.
14    Parquet,
15    /// Unknown file extension, storing the extension as a string.
16    Unknown(String),
17    /// Missing file extension, when no extension is present in the path.
18    Missing,
19}
20
21impl FileExtension {
22    /// Determines the file extension from a given path.
23    pub fn from_path(path: &Path) -> Self {
24        match path
25            .extension_as_lowercase()
26            .as_deref() // Converts `Option<String>` to `Option<&str>` for matching.
27        {
28            Some("csv") => FileExtension::Csv,
29            Some("json") => FileExtension::Json,
30            Some("ndjson") => FileExtension::NDJson,
31            Some("parquet") => FileExtension::Parquet,
32            Some(ext) => FileExtension::Unknown(ext.to_owned()),
33            None => FileExtension::Missing,
34        }
35    }
36}