mod common;
use dcbor::prelude::*;
use dcbor_parse::parse_dcbor_item;
use dcbor_pattern::{Matcher, Pattern, format_paths_with_captures};
fn cbor(s: &str) -> CBOR { parse_dcbor_item(s).unwrap() }
fn parse(s: &str) -> Pattern { Pattern::parse(s).unwrap() }
#[test]
fn test_debug_array_pattern_directly() {
let pattern = parse("[@a(*), @rest((*)*)]");
let cbor_data = cbor("[1, 2, 3]");
println!("Testing pattern: {:?}", pattern);
if let dcbor_pattern::Pattern::Structure(
dcbor_pattern::StructurePattern::Array(array_pattern),
) = &pattern
{
let paths = array_pattern.paths(&cbor_data);
println!("Direct ArrayPattern::paths result: {:?}", paths);
let (paths_with_caps, captures) =
array_pattern.paths_with_captures(&cbor_data);
println!(
"Direct ArrayPattern::paths_with_captures result: {:?}",
paths_with_caps
);
println!("Direct ArrayPattern captures: {:?}", captures);
}
let paths = pattern.paths(&cbor_data);
println!("Full pattern paths: {:?}", paths);
let (paths_with_caps, captures) = pattern.paths_with_captures(&cbor_data);
println!("Full pattern paths_with_captures: {:?}", paths_with_caps);
println!("Full pattern captures: {:?}", captures);
}
#[test]
fn test_desired_partial_array_capture_behavior() {
let pattern = parse("search([@a(*), @rest((*)*)])");
let cbor_data = cbor("[1, 2, 3]");
let (paths, captures) = pattern.paths_with_captures(&cbor_data);
let output = format_paths_with_captures(
&paths,
&captures,
dcbor_pattern::FormatPathsOpts::default(),
);
println!("Test case 1 output:\n{}", output);
let cbor_data2 = cbor("[1]");
let (paths2, captures2) = pattern.paths_with_captures(&cbor_data2);
let output2 = format_paths_with_captures(
&paths2,
&captures2,
dcbor_pattern::FormatPathsOpts::default(),
);
println!("Test case 2 output:\n{}", output2);
}