use crate::column::Column;
use polars::prelude::Expr;
#[derive(Debug, Clone)]
pub struct SortOrder {
pub(crate) expr: Expr,
pub descending: bool,
pub nulls_last: bool,
pub(crate) column_name: String,
}
impl SortOrder {
pub fn expr(&self) -> &Expr {
&self.expr
}
pub fn column_name(&self) -> &str {
&self.column_name
}
}
pub fn asc(column: &Column) -> SortOrder {
SortOrder {
expr: column.expr().clone(),
descending: false,
nulls_last: false,
column_name: column.name().to_string(),
}
}
pub fn asc_nulls_first(column: &Column) -> SortOrder {
SortOrder {
expr: column.expr().clone(),
descending: false,
nulls_last: false,
column_name: column.name().to_string(),
}
}
pub fn asc_nulls_last(column: &Column) -> SortOrder {
SortOrder {
expr: column.expr().clone(),
descending: false,
nulls_last: true,
column_name: column.name().to_string(),
}
}
pub fn desc(column: &Column) -> SortOrder {
SortOrder {
expr: column.expr().clone(),
descending: true,
nulls_last: true,
column_name: column.name().to_string(),
}
}
pub fn desc_nulls_first(column: &Column) -> SortOrder {
SortOrder {
expr: column.expr().clone(),
descending: true,
nulls_last: false,
column_name: column.name().to_string(),
}
}
pub fn desc_nulls_last(column: &Column) -> SortOrder {
SortOrder {
expr: column.expr().clone(),
descending: true,
nulls_last: true,
column_name: column.name().to_string(),
}
}
pub fn asc_from_name(name: &str) -> SortOrder {
asc(&Column::new(name.to_string()))
}