use super::*;
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "dsl-schema", derive(schemars::JsonSchema))]
#[derive(Clone, PartialEq, Debug, Eq, Hash)]
pub enum CategoricalFunction {
GetCategories,
#[cfg(feature = "strings")]
LenBytes,
#[cfg(feature = "strings")]
LenChars,
#[cfg(feature = "strings")]
StartsWith(String),
#[cfg(feature = "strings")]
EndsWith(String),
#[cfg(feature = "strings")]
Slice(i64, Option<usize>),
}
impl Display for CategoricalFunction {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
use CategoricalFunction::*;
let s = match self {
GetCategories => "get_categories",
#[cfg(feature = "strings")]
LenBytes => "len_bytes",
#[cfg(feature = "strings")]
LenChars => "len_chars",
#[cfg(feature = "strings")]
StartsWith(_) => "starts_with",
#[cfg(feature = "strings")]
EndsWith(_) => "ends_with",
#[cfg(feature = "strings")]
Slice(_, _) => "slice",
};
write!(f, "cat.{s}")
}
}
impl From<CategoricalFunction> for FunctionExpr {
fn from(func: CategoricalFunction) -> Self {
FunctionExpr::Categorical(func)
}
}