From 58bd36599f2fece8843a631a4df684571b7a5c69 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Wed, 2 Dec 2015 11:30:50 +0100 Subject: [PATCH] Implement FileHeaderData::matches_with(&Regex) --- src/storage/file.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/storage/file.rs b/src/storage/file.rs index d6fa0337..7a8ab900 100644 --- a/src/storage/file.rs +++ b/src/storage/file.rs @@ -5,6 +5,8 @@ use std::fmt; use super::parser::FileHeaderParser; use storage::file_id::*; +use regex::Regex; + #[derive(Debug)] pub enum FileHeaderSpec { Null, @@ -56,6 +58,28 @@ impl Display for FileHeaderSpec { } +impl FileHeaderData { + + pub fn matches_with(&self, r: &Regex) -> bool { + match self { + &FileHeaderData::Text(ref t) => r.is_match(&t[..]), + &FileHeaderData::Key{name: ref n, value: ref val} => { + r.is_match(n) || val.matches_with(r) + }, + + &FileHeaderData::Map{keys: ref dks} => { + dks.iter().any(|x| x.matches_with(r)) + }, + + &FileHeaderData::Array{values: ref vs} => { + vs.iter().any(|x| x.matches_with(r)) + } + + _ => false, + } + } +} + pub struct MatchError<'a> { summary: String, expected: &'a FileHeaderSpec,