diff options
author | SoniEx2 <endermoneymod@gmail.com> | 2022-07-30 11:22:23 -0300 |
---|---|---|
committer | SoniEx2 <endermoneymod@gmail.com> | 2022-07-30 11:22:23 -0300 |
commit | a8778ff35bde88bb63d9fec769edf66e68d7969e (patch) | |
tree | e9a2b7d347420e3a88f831b6f20513fcb211df4a /src/pattern.rs | |
parent | c2279c63912a47bf3078f5df3b3156ba0d9afe9f (diff) |
Initial work on 0.1.0
Missing the VM.
Diffstat (limited to 'src/pattern.rs')
-rw-r--r-- | src/pattern.rs | 59 |
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!() } } |