Skip to main content

ct_regex_internal/codegen/convert_hir/
item.rs

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