dcbor_pattern/pattern/value/
mod.rs1mod 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}