dcbor_pattern/pattern/value/
mod.rs

1mod bool_pattern;
2mod bytestring_pattern;
3mod date_pattern;
4mod digest_pattern;
5mod known_value_pattern;
6mod null_pattern;
7mod number_pattern;
8mod text_pattern;
9
10pub use bool_pattern::*;
11pub use bytestring_pattern::*;
12pub use date_pattern::*;
13use dcbor::prelude::*;
14pub use digest_pattern::*;
15pub use known_value_pattern::*;
16pub use null_pattern::*;
17pub use number_pattern::*;
18pub use text_pattern::*;
19
20use crate::pattern::{Matcher, Path, Pattern, vm::Instr};
21
22#[derive(Debug, Clone, PartialEq, Eq)]
23pub enum ValuePattern {
24    Bool(BoolPattern),
25    ByteString(ByteStringPattern),
26    Date(DatePattern),
27    Digest(DigestPattern),
28    KnownValue(KnownValuePattern),
29    Null(NullPattern),
30    Number(NumberPattern),
31    Text(TextPattern),
32}
33
34impl Matcher for ValuePattern {
35    fn paths(&self, haystack: &CBOR) -> Vec<Path> {
36        match self {
37            ValuePattern::Bool(pattern) => pattern.paths(haystack),
38            ValuePattern::ByteString(pattern) => pattern.paths(haystack),
39            ValuePattern::Date(pattern) => pattern.paths(haystack),
40            ValuePattern::Digest(pattern) => pattern.paths(haystack),
41            ValuePattern::KnownValue(pattern) => pattern.paths(haystack),
42            ValuePattern::Null(pattern) => pattern.paths(haystack),
43            ValuePattern::Number(pattern) => pattern.paths(haystack),
44            ValuePattern::Text(pattern) => pattern.paths(haystack),
45        }
46    }
47
48    fn compile(
49        &self,
50        code: &mut Vec<Instr>,
51        literals: &mut Vec<Pattern>,
52        captures: &mut Vec<String>,
53    ) {
54        match self {
55            ValuePattern::Bool(pattern) => {
56                pattern.compile(code, literals, captures)
57            }
58            ValuePattern::ByteString(pattern) => {
59                pattern.compile(code, literals, captures)
60            }
61            ValuePattern::Date(pattern) => {
62                pattern.compile(code, literals, captures)
63            }
64            ValuePattern::Digest(pattern) => {
65                pattern.compile(code, literals, captures)
66            }
67            ValuePattern::KnownValue(pattern) => {
68                pattern.compile(code, literals, captures)
69            }
70            ValuePattern::Null(pattern) => {
71                pattern.compile(code, literals, captures)
72            }
73            ValuePattern::Number(pattern) => {
74                pattern.compile(code, literals, captures)
75            }
76            ValuePattern::Text(pattern) => {
77                pattern.compile(code, literals, captures)
78            }
79        }
80    }
81}
82
83impl std::fmt::Display for ValuePattern {
84    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
85        match self {
86            ValuePattern::Bool(pattern) => write!(f, "{}", pattern),
87            ValuePattern::ByteString(pattern) => write!(f, "{}", pattern),
88            ValuePattern::Date(pattern) => write!(f, "{}", pattern),
89            ValuePattern::Digest(pattern) => write!(f, "{}", pattern),
90            ValuePattern::KnownValue(pattern) => write!(f, "{}", pattern),
91            ValuePattern::Null(pattern) => write!(f, "{}", pattern),
92            ValuePattern::Number(pattern) => write!(f, "{}", pattern),
93            ValuePattern::Text(pattern) => write!(f, "{}", pattern),
94        }
95    }
96}