ct_regex_internal/codegen/convert_hir/
item.rs

1use regex_syntax::hir::Class;
2
3use crate::{codegen::IntoMatcherExpr, haystack::HaystackItem};
4
5pub trait CodegenItem: HaystackItem + IntoMatcherExpr + NormalizeClass {}
6
7impl CodegenItem for u8 {}
8impl CodegenItem for char {}
9
10pub trait NormalizeClass {
11    fn normalize_class(value: Class) -> Class;
12}
13
14impl NormalizeClass for u8 {
15    fn normalize_class(value: Class) -> Class {
16        match value {
17            Class::Unicode(unicode) => Class::Bytes(
18                unicode.to_byte_class().expect("failed to convert to byte class")
19            ),
20            Class::Bytes(bytes) => Class::Bytes(bytes),
21        }
22    }
23}
24
25impl NormalizeClass for char {
26    fn normalize_class(value: Class) -> Class {
27        match value {
28            Class::Unicode(unicode) => Class::Unicode(unicode),
29            Class::Bytes(bytes) => Class::Unicode(
30                bytes.to_unicode_class().expect("failed to convert to unicode class")
31            ),
32        }
33    }
34}