feat: Updating node modifier

This commit is contained in:
2024-12-02 18:20:33 -05:00
parent 22dfc6ce51
commit 3d82eed389

View File

@@ -9,10 +9,10 @@ public protocol NodeModifier {
}
public extension NodeModifier {
func modifier<T: NodeModifier>(
func concat<T: NodeModifier>(
_ modifier: T
) -> ModifiedNode<Self, T> where T.Content == Body {
.init(content: self, modifier: modifier)
) -> ConcatModifier<Content, Self, T> {
ConcatModifier(first: self, second: modifier)
}
}
@@ -23,6 +23,19 @@ public extension Node {
}
}
public struct ConcatModifier<Content, Modifier1, Modifier2>: 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<Content, Modifier> {
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<T: NodeModifier>(_ modifier: T) -> ModifiedNode<Content, ConcatModifier<Content, Modifier, T>> {
.init(content: content, modifier: self.modifier.concat(modifier))
}
}