mirror of
https://github.com/storytold/gridcraft.git
synced 2026-10-28 20:56:54 -06:00
112 lines
3.9 KiB
Rust
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,
|
|
})
|
|
}
|