#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum StringFunction {
CheckStrLimit,
Chr,
DelocalizeExpression,
Find,
FindPattern,
Left,
Len,
LocalizedDecimalPoint,
LocalizeExpression,
MatchPattern,
Mid,
Replace,
ResStr,
Right,
SearchAndReplace,
SearchPatternAndReplace,
Split,
Str,
StrComp,
ToLower,
ToUpper,
Trim,
TrimEnd,
TrimStart,
}
impl StringFunction {
pub const ALL: [Self; 24] = [
Self::CheckStrLimit,
Self::Chr,
Self::DelocalizeExpression,
Self::Find,
Self::FindPattern,
Self::Left,
Self::Len,
Self::LocalizedDecimalPoint,
Self::LocalizeExpression,
Self::MatchPattern,
Self::Mid,
Self::Replace,
Self::ResStr,
Self::Right,
Self::SearchAndReplace,
Self::SearchPatternAndReplace,
Self::Split,
Self::Str,
Self::StrComp,
Self::ToLower,
Self::ToUpper,
Self::Trim,
Self::TrimEnd,
Self::TrimStart,
];
#[must_use]
pub const fn name(self) -> &'static str {
match self {
Self::CheckStrLimit => "CheckStrLimit",
Self::Chr => "Chr",
Self::DelocalizeExpression => "DelocalizeExpression",
Self::Find => "Find",
Self::FindPattern => "FindPattern",
Self::Left => "Left",
Self::Len => "Len",
Self::LocalizedDecimalPoint => "LocalizedDecimalPoint",
Self::LocalizeExpression => "LocalizeExpression",
Self::MatchPattern => "MatchPattern",
Self::Mid => "Mid",
Self::Replace => "Replace",
Self::ResStr => "ResStr",
Self::Right => "Right",
Self::SearchAndReplace => "SearchAndReplace",
Self::SearchPatternAndReplace => "SearchPatternAndReplace",
Self::Split => "Split",
Self::Str => "Str",
Self::StrComp => "StrComp",
Self::ToLower => "ToLower",
Self::ToUpper => "ToUpper",
Self::Trim => "Trim",
Self::TrimEnd => "TrimEnd",
Self::TrimStart => "TrimStart",
}
}
}
#[cfg(test)]
mod tests {
use super::StringFunction;
#[test]
fn every_name_is_distinct() {
let mut names: Vec<&str> = StringFunction::ALL.iter().map(|f| f.name()).collect();
names.sort_unstable();
let count = names.len();
names.dedup();
assert_eq!(names.len(), count);
}
}