Add fold fn for builder
This commit is contained in:
25
src/test.nim
25
src/test.nim
@@ -302,6 +302,17 @@ proc applyParsersSeq[T](
|
|||||||
]]): BuilderResult[T] =
|
]]): BuilderResult[T] =
|
||||||
xs.foldl(a.flatMap((x: Builder[T]) => x.applyParsers(b[0], b[1])), builder)
|
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:
|
when isMainModule:
|
||||||
let parseHeadingStars = @[
|
let parseHeadingStars = @[
|
||||||
manyUntil(ch('*'), ch(' ')),
|
manyUntil(ch('*'), ch(' ')),
|
||||||
@@ -329,15 +340,9 @@ when isMainModule:
|
|||||||
(parseHeadingStars, stringConcat("Stars: ")),
|
(parseHeadingStars, stringConcat("Stars: ")),
|
||||||
(parseHeadingText, stringConcat("Text: "))
|
(parseHeadingText, stringConcat("Text: "))
|
||||||
])
|
])
|
||||||
|
.foldBuilder(
|
||||||
# .flatMap((x: StringBuilder) => x.applyParsers(
|
err => &"Error Parsing: {err}",
|
||||||
# parsers = parseHeadingStars,
|
xs => "Parser Succesfull:\n" & xs.join("\n"),
|
||||||
# tokenFoldFn = stringConcat("Stars: ")
|
)
|
||||||
# ))
|
|
||||||
# .flatMap((x: StringBuilder) => x.applyParsers(
|
|
||||||
# parsers = parseHeadingText,
|
|
||||||
# tokenFoldFn = stringConcat("Text: ")
|
|
||||||
# ))
|
|
||||||
|
|
||||||
|
|
||||||
echo sampleBuilder
|
echo sampleBuilder
|
||||||
|
|||||||
Reference in New Issue
Block a user