Skip to content

Commit d2493b4

Browse files
committed
Use secondary apply instead of another Mode
1 parent cbdee58 commit d2493b4

File tree

3 files changed

+19
-8
lines changed

3 files changed

+19
-8
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ Jawn also supports asynchronous parsing, which allows users to feed
8181
the parser with data as it is available. There are three modes:
8282

8383
* `SingleValue` waits to return a single `J` value once parsing is done.
84-
* `UnwrapArray` if the top-level element is an array, return values as they become available.
85-
* `UnwrapMultiArray` Similar to `UnwrapArray` however handles *multiple* top-level elements that are arrays.
84+
* `UnwrapArray` if the top-level element is an array, return values as they become available. Set `multiValue` to `true`
85+
if you want to support multiple top level arrays.
8686
* `ValueStream` parse one-or-more json values separated by whitespace.
8787

8888
Here's an example:

parser/shared/src/main/scala/jawn/AsyncParser.scala

+16-5
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ object AsyncParser {
3131

3232
sealed abstract class Mode(val start: Int, val value: Int)
3333
case object UnwrapArray extends Mode(-5, 1)
34-
case object UnwrapMultiArray extends Mode(-5, 1)
3534
case object ValueStream extends Mode(-1, 0)
3635
case object SingleValue extends Mode(-1, -1)
3736

@@ -47,10 +46,22 @@ object AsyncParser {
4746
offset = 0,
4847
done = false,
4948
streamMode = mode.value,
50-
multiValue = mode match {
51-
case UnwrapMultiArray => true
52-
case _ => false
53-
}
49+
multiValue = false
50+
)
51+
52+
def apply[J](mode: Mode, multiValue: Boolean): AsyncParser[J] =
53+
new AsyncParser(
54+
state = mode.start,
55+
curr = 0,
56+
context = null,
57+
stack = Nil,
58+
data = new Array[Byte](131072),
59+
len = 0,
60+
allocated = 131072,
61+
offset = 0,
62+
done = false,
63+
streamMode = mode.value,
64+
multiValue = multiValue
5465
)
5566
}
5667

parser/shared/src/test/scala/jawn/SyntaxCheck.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ class SyntaxCheck extends Properties("SyntaxCheck") with SyntaxCheckPlatform {
279279
property("AsyncParser supports multiple top level JSON arrays in UnwrapMultiArray mode") = forAll {
280280
(multipleJsonArrays: MultipleJsonArrays) =>
281281
val result =
282-
AsyncParser[Unit](AsyncParser.UnwrapMultiArray).absorb(multipleJsonArrays.build)(NullFacade)
282+
AsyncParser[Unit](AsyncParser.UnwrapArray, multiValue = true).absorb(multipleJsonArrays.build)(NullFacade)
283283
result.isRight
284284
}
285285

0 commit comments

Comments
 (0)