diff options
Diffstat (limited to 'src/pattern.rs')
-rw-r--r-- | src/pattern.rs | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/pattern.rs b/src/pattern.rs index 2e69714..fc3c8a7 100644 --- a/src/pattern.rs +++ b/src/pattern.rs @@ -6,16 +6,17 @@ use std::borrow::Borrow; use std::collections::BTreeMap; -use serde::Deserialize; -use serde::Deserializer; -use serde::Serialize; +use serde::de::Deserialize; +use serde::de::DeserializeSeed; +use serde::de::Deserializer; +use serde::ser::Serialize; use crate::Predicate; use crate::errors::PatternError; use crate::parser::parse; -//use crate::vm::Matcher; +use crate::vm; use crate::vm::PatternConstants; -//use crate::vm::MAX_CALLS; +use crate::vm::MAX_CALLS; /// A compiled Datafu pattern. /// @@ -83,11 +84,13 @@ impl<O: Serialize> Pattern<O> { } /// Matches the pattern against an input. - pub fn deserialize<'de, Der, De>(&self, de: Der) -> Result<De, Der::Error> + pub fn deserialize<'de, Der, De>(&self, der: Der) -> Result<De, Der::Error> where Der: Deserializer<'de>, De: Deserialize<'de>, { + let pack = vm::Packer::new(&self.consts, MAX_CALLS).deserialize(der)?; + let de = De::deserialize(vm::Unpacker::new(pack, MAX_CALLS)); todo!() } } |