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