#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
#[non_exhaustive]
pub enum FieldRule {
TsLength,
TsConstructor,
TsSort,
}
#[must_use]
pub fn typescript_field_rule(field: &str) -> Option<FieldRule> {
match field {
"length" => Some(FieldRule::TsLength),
"constructor" => Some(FieldRule::TsConstructor),
"sort" => Some(FieldRule::TsSort),
_ => None,
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn recognizes_stdlib_field_names() {
assert_eq!(typescript_field_rule("length"), Some(FieldRule::TsLength));
assert_eq!(
typescript_field_rule("constructor"),
Some(FieldRule::TsConstructor)
);
assert_eq!(typescript_field_rule("sort"), Some(FieldRule::TsSort));
}
#[test]
fn rejects_user_field_names() {
for field in ["len", "lengthInMeters", "construct", "sorted", "value"] {
assert_eq!(typescript_field_rule(field), None);
}
}
}