Files
gridcraft/crates/engine/src/cmd/pivot/params.rs
T

112 lines
3.9 KiB
Rust

use super::*;
pub(super) fn area_param(cmd: &str, v: Option<&str>) -> Result<&'static str> {
match v.map(str::to_ascii_lowercase) {
Some(a) if a == "rows" || a == "row" => Ok("rows"),
Some(a) if a == "columns" || a == "column" || a == "cols" => Ok("columns"),
Some(a) if a == "values" || a == "value" || a == "data" => Ok("values"),
Some(a) if a == "filters" || a == "filter" => Ok("filters"),
Some(a) => Err(bad(cmd, format!("unknown area `{a}` (rows|columns|values|filters)"))),
None => Err(bad(cmd, "missing `area` (rows|columns|values|filters)")),
}
}
pub(super) fn func_param(v: Option<&str>) -> Option<PivotFunc> {
Some(match v?.to_ascii_lowercase().as_str() {
"sum" => PivotFunc::Sum,
"count" | "counta" => PivotFunc::Count,
"average" | "avg" | "mean" => PivotFunc::Average,
"max" => PivotFunc::Max,
"min" => PivotFunc::Min,
"product" => PivotFunc::Product,
"countnumbers" | "countnums" | "count numbers" => PivotFunc::CountNumbers,
"stddev" => PivotFunc::StdDev,
"stddevp" => PivotFunc::StdDevP,
"var" => PivotFunc::Var,
"varp" => PivotFunc::VarP,
_ => return None,
})
}
pub(super) fn func_name(f: PivotFunc) -> &'static str {
match f {
PivotFunc::Sum => "sum",
PivotFunc::Count => "count",
PivotFunc::Average => "average",
PivotFunc::Max => "max",
PivotFunc::Min => "min",
PivotFunc::Product => "product",
PivotFunc::CountNumbers => "countNumbers",
PivotFunc::StdDev => "stdDev",
PivotFunc::StdDevP => "stdDevP",
PivotFunc::Var => "var",
PivotFunc::VarP => "varP",
}
}
pub(super) fn show_as_param(v: &str) -> Option<PivotShowAs> {
Some(match v.to_ascii_lowercase().as_str() {
"normal" | "none" => PivotShowAs::Normal,
"percentofgrandtotal" => PivotShowAs::PercentOfGrandTotal,
"percentofcolumntotal" => PivotShowAs::PercentOfColumnTotal,
"percentofrowtotal" => PivotShowAs::PercentOfRowTotal,
"runningtotal" => PivotShowAs::RunningTotal,
"rank" => PivotShowAs::Rank,
_ => return None,
})
}
pub(super) fn show_as_name(v: PivotShowAs) -> &'static str {
match v {
PivotShowAs::Normal => "normal",
PivotShowAs::PercentOfGrandTotal => "percentOfGrandTotal",
PivotShowAs::PercentOfColumnTotal => "percentOfColumnTotal",
PivotShowAs::PercentOfRowTotal => "percentOfRowTotal",
PivotShowAs::RunningTotal => "runningTotal",
PivotShowAs::Rank => "rank",
}
}
pub(super) fn layout_name(l: PivotLayout) -> &'static str {
match l {
PivotLayout::Compact => "compact",
PivotLayout::Outline => "outline",
PivotLayout::Tabular => "tabular",
}
}
pub(super) fn group_name(g: PivotDateGroup) -> &'static str {
match g {
PivotDateGroup::None => "none",
PivotDateGroup::Years => "years",
PivotDateGroup::Quarters => "quarters",
PivotDateGroup::Months => "months",
PivotDateGroup::Days => "days",
}
}
pub(super) fn sort_name(o: PivotSort) -> &'static str {
match o {
PivotSort::Asc => "asc",
PivotSort::Desc => "desc",
PivotSort::None => "none",
}
}
// ---------------------------------------------------------------- field commands
pub(super) fn position_param(p: &Json) -> Option<usize> {
u32_param(p, "position").map(|v| v as usize)
}
pub(super) fn group_param(v: Option<&str>) -> Option<PivotDateGroup> {
Some(match v?.to_ascii_lowercase().as_str() {
"years" | "year" => PivotDateGroup::Years,
"quarters" | "quarter" => PivotDateGroup::Quarters,
"months" | "month" => PivotDateGroup::Months,
"days" | "day" => PivotDateGroup::Days,
"none" | "ungroup" => PivotDateGroup::None,
_ => return None,
})
}