From 5863304456b3e60c1adcedc39e802af1541f38db Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Thu, 20 Jan 2022 17:00:00 +0100 Subject: [PATCH] Add fold fn for builder --- src/test.nim | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/test.nim b/src/test.nim index 4563c2e..4dbbfcd 100644 --- a/src/test.nim +++ b/src/test.nim @@ -302,6 +302,17 @@ proc applyParsersSeq[T]( ]]): BuilderResult[T] = xs.foldl(a.flatMap((x: Builder[T]) => x.applyParsers(b[0], b[1])), builder) +proc foldBuilder[T, T2]( + builderResult: BuilderResult[T], + onError: string -> T2, + onSuccess: seq[T] -> T2, +): T = + if builderResult.isOk(): + onSuccess(builderResult.unsafeGet().tree) + else: + let err = builderResult.error() + onError(err[1]) + when isMainModule: let parseHeadingStars = @[ manyUntil(ch('*'), ch(' ')), @@ -329,15 +340,9 @@ when isMainModule: (parseHeadingStars, stringConcat("Stars: ")), (parseHeadingText, stringConcat("Text: ")) ]) - - # .flatMap((x: StringBuilder) => x.applyParsers( - # parsers = parseHeadingStars, - # tokenFoldFn = stringConcat("Stars: ") - # )) - # .flatMap((x: StringBuilder) => x.applyParsers( - # parsers = parseHeadingText, - # tokenFoldFn = stringConcat("Text: ") - # )) - + .foldBuilder( + err => &"Error Parsing: {err}", + xs => "Parser Succesfull:\n" & xs.join("\n"), + ) echo sampleBuilder