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 { 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 { 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 { u32_param(p, "position").map(|v| v as usize) } pub(super) fn group_param(v: Option<&str>) -> Option { 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, }) }