brzozowski_regex/builder/
pure.rs1use std::marker::PhantomData;
16
17use crate::builder::Builder;
18use crate::builder::Regex;
19use crate::Alphabet;
20
21#[derive(Clone, Debug, Hash, PartialEq, Eq)]
24pub struct Pure<S: Alphabet> {
25 _phantom: PhantomData<S>,
26}
27
28impl<S: Alphabet> Builder for Pure<S> {
29 type Symbol = S;
30
31 #[inline]
32 fn empty_set() -> Regex<Self> {
33 Regex::EmptySet
34 }
35
36 #[inline]
37 fn empty_string() -> Regex<Self> {
38 Regex::EmptyString
39 }
40
41 #[inline]
42 fn symbol(value: S) -> Regex<Self> {
43 Regex::Symbol(value)
44 }
45
46 #[inline]
47 fn closure(inner: Regex<Self>) -> Regex<Self> {
48 Regex::Closure(inner.into())
49 }
50
51 #[inline]
52 fn concat(left: Regex<Self>, right: Regex<Self>) -> Regex<Self> {
53 Regex::Concat(left.into(), right.into())
54 }
55
56 #[inline]
57 fn or(left: Regex<Self>, right: Regex<Self>) -> Regex<Self> {
58 Regex::Or(left.into(), right.into())
59 }
60
61 #[inline]
62 fn and(left: Regex<Self>, right: Regex<Self>) -> Regex<Self> {
63 Regex::And(left.into(), right.into())
64 }
65
66 #[inline]
67 fn complement(inner: Regex<Self>) -> Regex<Self> {
68 Regex::Complement(inner.into())
69 }
70}