From 7346f5e8504357d5a0f703feb8c287fba436b741 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 26 Nov 2022 23:56:03 -0500 Subject: [PATCH] hrtb not working. --- src/parser/new_context.rs | 44 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/parser/new_context.rs b/src/parser/new_context.rs index 2d59ce93..cab74fba 100644 --- a/src/parser/new_context.rs +++ b/src/parser/new_context.rs @@ -68,3 +68,47 @@ impl<'r> ContextElement<'r> for PreviousElementNode<'r> { ChainBehavior::AndParent(None) } } + +pub struct ContextTree<'r, T> { + head: Option>, +} + +impl<'r, T> ContextTree<'r, T> +where + T: for<'s> ContextElement<'s>, +{ + pub fn new() -> Self { + ContextTree { head: None } + } + + pub fn with_additional_node ContextElement<'s>>( + &'r self, + element: F, + ) -> ContextTree<'r, F> { + let new_node = { + let parent: Option<&dyn NodeType<'_>> = match &self.head { + Some(node) => Some(node), + None => None, + }; + Node { + data: element, + parent, + } + }; + + ContextTree { + head: Some(new_node), + } + } +} + +fn test_context() { + let foo = "foo"; + let context = ContextTree::new(); + let child1_context = PreviousElementNode { dummy: foo }; + let child1 = context.with_additional_node(&child1_context); + let child2_context = FailMatcherNode { + fail_matcher: ChainBehavior::AndParent(Some(&recognize_bold_end)), + }; + let child2 = child1.with_additional_node(&child2_context); +}