summary refs log tree commit diff stats
path: root/src/pattern.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/pattern.rs')
-rw-r--r--src/pattern.rs59
1 files changed, 24 insertions, 35 deletions
diff --git a/src/pattern.rs b/src/pattern.rs
index 3349db8..3a8c91f 100644
--- a/src/pattern.rs
+++ b/src/pattern.rs
@@ -1,57 +1,46 @@
-/*
- * This file is part of Datafu
- * Copyright (C) 2021  Soni L.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <https://www.gnu.org/licenses/>.
- */
+// Copyright (C) 2021-2022 Soni L.
+// SPDX-License-Identifier: MIT OR Apache-2.0
 
 use std::borrow::Borrow;
 use std::collections::BTreeMap;
 
-use crate::PatternTypes;
-use crate::RefOwn;
+use serde::Deserialize;
+use serde::Deserializer;
+use serde::Serialize;
+
 use crate::Predicate;
 use crate::errors::PatternError;
 use crate::parser::parse;
-use crate::vm::Matcher;
+//use crate::vm::Matcher;
 use crate::vm::PatternConstants;
-use crate::vm::MAX_CALLS;
+//use crate::vm::MAX_CALLS;
 
-pub struct Pattern<T: PatternTypes> {
-    consts: PatternConstants<T>,
+pub struct Pattern<O: Serialize> {
+    consts: PatternConstants<O>,
 }
 
-impl<T: PatternTypes> Pattern<T> {
+impl<O: Serialize> Pattern<O> {
     /// Compiles the input into a pattern.
-    pub fn compile<'s, P, O>(
+    pub fn compile<'s, PKey, OKey>(
         input: &'s str,
-        preds: Option<BTreeMap<P, Box<Predicate<T>>>>,
-        objs: Option<BTreeMap<O, T::Own>>
+        preds: Option<BTreeMap<PKey, Box<Predicate>>>,
+        objs: Option<BTreeMap<OKey, O>>
     ) -> Result<Self, PatternError<'s>>
-        where
-            P: Borrow<str> + Ord,
-            O: Borrow<str> + Ord,
+    where
+        PKey: Borrow<str> + Ord,
+        OKey: Borrow<str> + Ord,
     {
         Ok(Self {
             consts: parse(input, preds, objs)?
         })
     }
 
-    pub fn attempt_match<'a, 'b>(
-        &'a self,
-        value: impl Into<RefOwn<'b, T::Ref, T::Own>>
-    ) -> Matcher<'a, 'b, T> {
-        Matcher::new(value.into(), &self.consts, self.consts.protos.len() - 1, MAX_CALLS).ok().expect("datafu internal error: MAX_CALLS must not be 0")
+    /// Matches the pattern against an input.
+    pub fn deserialize<'de, Der, De>(&self, de: Der) -> Result<De, Der::Error>
+    where
+        Der: Deserializer<'de>,
+        De: Deserialize<'de>,
+    {
+        todo!()
     }
 }