From 3d82eed38957ff1c88d1f06b7a0bd3a4d715b9c4 Mon Sep 17 00:00:00 2001 From: Michael Housh Date: Mon, 2 Dec 2024 18:20:33 -0500 Subject: [PATCH] feat: Updating node modifier --- Sources/CliDoc/NodeModifier.swift | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/Sources/CliDoc/NodeModifier.swift b/Sources/CliDoc/NodeModifier.swift index 2e5fbbd..e2f6935 100644 --- a/Sources/CliDoc/NodeModifier.swift +++ b/Sources/CliDoc/NodeModifier.swift @@ -9,10 +9,10 @@ public protocol NodeModifier { } public extension NodeModifier { - func modifier( + func concat( _ modifier: T - ) -> ModifiedNode where T.Content == Body { - .init(content: self, modifier: modifier) + ) -> ConcatModifier { + ConcatModifier(first: self, second: modifier) } } @@ -23,6 +23,19 @@ public extension Node { } } +public struct ConcatModifier: NodeModifier where Content: Node, + Modifier1: NodeModifier, Modifier2: NodeModifier, + Modifier1.Content == Content, Modifier1.Body == Modifier2.Content +{ + let first: Modifier1 + let second: Modifier2 + + public func render(content: Content) -> some Node { + second.render(content: first.render(content: content)) + } + +} + public struct ModifiedNode { var content: Content var modifier: Modifier @@ -57,3 +70,11 @@ extension ModifiedNode: NodeModifier where return modifier.render(content: body).render() } } + +extension ModifiedNode where Modifier: NodeModifier { + + func modifier(_ modifier: T) -> ModifiedNode> { + .init(content: content, modifier: self.modifier.concat(modifier)) + } + +}