1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
use uuid::Uuid; use serde_json; use matcher::compiled_pattern::{CompiledPattern, TokenType}; use super::testmessage::TestMessage; use std::borrow::Borrow; use std::collections::BTreeMap; #[derive(Clone, Debug)] pub struct Pattern { name: Option<String>, uuid: Uuid, pattern: CompiledPattern, values: Option<BTreeMap<String, String>>, tags: Option<Vec<String>>, test_messages: Option<Vec<TestMessage>> } impl Pattern { pub fn with_uuid(uuid: Uuid) -> Pattern { Pattern{ uuid: uuid, name: None, pattern: Vec::new(), values: None, tags: None, test_messages: None } } pub fn new(name: Option<String>, uuid: Uuid, pattern: CompiledPattern, test_messages: Option<Vec<TestMessage>>, values: Option<BTreeMap<String, String>>, tags: Option<Vec<String>>) -> Pattern { Pattern{ uuid: uuid, name: name, pattern: pattern, values: values, tags: tags, test_messages: test_messages } } pub fn with_random_uuid() -> Pattern { Pattern::with_uuid(Uuid::new_v4()) } pub fn name(&self) -> Option<&str> { self.name.as_ref().map(|x| x.borrow()) } pub fn uuid(&self) -> &Uuid { &self.uuid } pub fn pattern(&self) -> &CompiledPattern { &self.pattern } pub fn values(&self) -> Option<&BTreeMap<String, String>> { self.values.as_ref() } pub fn tags(&self) -> Option<&[String]> { self.tags.as_ref().map(|tags| tags.borrow()) } pub fn from_json(doc: &str) -> Result<Pattern, serde_json::error::Error> { serde_json::from_str::<Pattern>(doc) } pub fn set_pattern(&mut self, pattern: CompiledPattern) { self.pattern = pattern; } pub fn pop_first_token(&mut self) -> Option<TokenType> { if self.pattern.is_empty() { None } else { Some(self.pattern.remove(0)) } } pub fn pop_test_message(&mut self) -> Option<TestMessage> { self.test_messages.as_mut().map_or(None, |x| x.pop()) } }