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