jawn

AsyncParser

final class AsyncParser[J] extends Parser[J] with ByteBasedParser[J]

AsyncParser is able to parse chunks of data (encoded as Option[ByteBuffer] instances) and parse asynchronously. You can use the factory methods in the companion object to instantiate an async parser.

The async parser's fields are described below:

The (state, curr, stack) triple is used to save and restore parser state between async calls. State also helps encode extra information when streaming or unwrapping an array.

The (data, len, allocated) triple is used to manage the underlying data the parser is keeping track of. As new data comes in, data may be expanded if not enough space is available.

The offset parameter is used to drive the outer async parsing. It stores similar information to curr but is kept separate to avoid "corrupting" our snapshot.

The done parameter is used internally to help figure out when the atEof() parser method should return true. This will be set when apply(None) is called.

The streamMode parameter controls how the asynchronous parser will be handling multiple values. There are three states:

1: An array is being unwrapped. Normal JSON array rules apply (Note that if the outer value observed is not an array, this mode will toggle to the -1 mode).

0: A stream of individual JSON elements separated by whitespace are being parsed. We can return each complete element as we parse it.

-1: No streaming is occuring. Only a single JSON value is allowed.

Linear Supertypes
ByteBasedParser[J], Parser[J], AnyRef, Any
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. AsyncParser
  2. ByteBasedParser
  3. Parser
  4. AnyRef
  5. Any
  1. Hide All
  2. Show all
Learn more about member selection
Visibility
  1. Public
  2. All

Instance Constructors

  1. new AsyncParser(state: Int, curr: Int, stack: List[RawFContext[J]], data: Array[Byte], len: Int, allocated: Int, offset: Int, done: Boolean, streamMode: Int)

    Attributes
    protected[jawn]

Value Members

  1. final def !=(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  2. final def !=(arg0: Any): Boolean

    Definition Classes
    Any
  3. final def ##(): Int

    Definition Classes
    AnyRef → Any
  4. final def ==(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  5. final def ==(arg0: Any): Boolean

    Definition Classes
    Any
  6. final val ARRBEG: Int(6)

    Valid parser states.

    Valid parser states.

    Attributes
    protected[this]
    Definition Classes
    Parser
  7. final val ARREND: Int(4)

    Attributes
    protected[this]
    Definition Classes
    Parser
  8. final val DATA: Int(1)

    Attributes
    protected[this]
    Definition Classes
    Parser
  9. final val HexChars: Array[Int]

    Attributes
    protected[this]
    Definition Classes
    Parser
  10. final val KEY: Int(2)

    Attributes
    protected[this]
    Definition Classes
    Parser
  11. final val OBJBEG: Int(7)

    Attributes
    protected[this]
    Definition Classes
    Parser
  12. final val OBJEND: Int(5)

    Attributes
    protected[this]
    Definition Classes
    Parser
  13. final val SEP: Int(3)

    Attributes
    protected[this]
    Definition Classes
    Parser
  14. final def absorb(s: String)(implicit facade: RawFacade[J]): Either[ParseException, Seq[J]]

  15. final def absorb(bytes: Array[Byte])(implicit facade: RawFacade[J]): Either[ParseException, Seq[J]]

  16. final def absorb(buf: ByteBuffer)(implicit facade: RawFacade[J]): Either[ParseException, Seq[J]]

  17. var allocated: Int

    Attributes
    protected[jawn]
  18. final def asInstanceOf[T0]: T0

    Definition Classes
    Any
  19. final def at(i: Int, k: Int): CharSequence

    Access a byte range as a string.

    Access a byte range as a string.

    Since the underlying data are UTF-8 encoded, i and k must occur on unicode boundaries. Also, the resulting String is not guaranteed to have length (k - i).

    Attributes
    protected[this]
    Definition Classes
    AsyncParserParser
  20. final def at(i: Int): Char

    Read the byte/char at 'i' as a Char.

    Read the byte/char at 'i' as a Char.

    Note that this should not be used on potential multi-byte sequences.

    Attributes
    protected[this]
    Definition Classes
    AsyncParserParser
  21. final def atEof(i: Int): Boolean

    Return true iff 'i' is at or beyond the end of the input (EOF).

    Return true iff 'i' is at or beyond the end of the input (EOF).

    Attributes
    protected[this]
    Definition Classes
    AsyncParserParser
  22. final def byte(i: Int): Byte

    This is a specialized accessor for the case where our underlying data are bytes not chars.

    This is a specialized accessor for the case where our underlying data are bytes not chars.

    Attributes
    protected[this]
    Definition Classes
    AsyncParserByteBasedParser
  23. final def checkpoint(state: Int, i: Int, stack: List[RawFContext[J]]): Unit

    We use this to keep track of the last recoverable place we've seen.

    We use this to keep track of the last recoverable place we've seen. If we hit an AsyncException, we can later resume from this point.

    This method is called during every loop of rparse, and the arguments are the exact arguments we can pass to rparse to continue where we left off.

    Attributes
    protected[this]
    Definition Classes
    AsyncParserParser
  24. def churn()(implicit facade: RawFacade[J]): Either[ParseException, Seq[J]]

    Attributes
    protected[jawn]
  25. def clone(): AnyRef

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  26. final def close(): Unit

    Should be called when parsing is finished.

    Should be called when parsing is finished.

    Attributes
    protected[this]
    Definition Classes
    AsyncParserParser
  27. final def column(i: Int): Int

    Attributes
    protected[this]
    Definition Classes
    AsyncParserParser
  28. final def copy(): AsyncParser[J]

  29. var curr: Int

    Attributes
    protected[jawn]
  30. var data: Array[Byte]

    Attributes
    protected[jawn]
  31. final def descape(s: CharSequence): Char

    Generate a Char from the hex digits of "ሴ" (i.

    Generate a Char from the hex digits of "ሴ" (i.e. "1234").

    NOTE: This is only capable of generating characters from the basic plane. This is why it can only return Char instead of Int.

    Attributes
    protected[this]
    Definition Classes
    Parser
  32. def die(i: Int, msg: String): Nothing

    Used to generate error messages with character info and offsets.

    Used to generate error messages with character info and offsets.

    Attributes
    protected[this]
    Definition Classes
    Parser
  33. var done: Boolean

    Attributes
    protected[jawn]
  34. final def eq(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  35. def equals(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  36. def error(msg: String): Nothing

    Used to generate messages for internal errors.

    Used to generate messages for internal errors.

    This should only be used in situations where a possible bug in the parser was detected. For errors in user-provided JSON, use die().

    Attributes
    protected[this]
    Definition Classes
    Parser
  37. def finalize(): Unit

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  38. final def finish()(implicit facade: RawFacade[J]): Either[ParseException, Seq[J]]

  39. final def getClass(): Class[_]

    Definition Classes
    AnyRef → Any
  40. def hashCode(): Int

    Definition Classes
    AnyRef → Any
  41. final def isInstanceOf[T0]: Boolean

    Definition Classes
    Any
  42. var len: Int

    Attributes
    protected[jawn]
  43. var line: Int

    Attributes
    protected[this]
    Definition Classes
    AsyncParserParser
  44. final def ne(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  45. final def newline(i: Int): Unit

    Attributes
    protected[this]
    Definition Classes
    AsyncParserParser
  46. final def notify(): Unit

    Definition Classes
    AnyRef
  47. final def notifyAll(): Unit

    Definition Classes
    AnyRef
  48. var offset: Int

    Attributes
    protected[jawn]
  49. final def parse(i: Int)(implicit facade: RawFacade[J]): (J, Int)

    Parse and return the next JSON value and the position beyond it.

    Parse and return the next JSON value and the position beyond it.

    Attributes
    protected[this]
    Definition Classes
    Parser
  50. final def parseFalse(i: Int)(implicit facade: RawFacade[J]): J

    Parse the JSON constant "false".

    Parse the JSON constant "false".

    Note that this method assumes that the first character has already been checked.

    Attributes
    protected[this]
    Definition Classes
    Parser
  51. final def parseNull(i: Int)(implicit facade: RawFacade[J]): J

    Parse the JSON constant "null".

    Parse the JSON constant "null".

    Note that this method assumes that the first character has already been checked.

    Attributes
    protected[this]
    Definition Classes
    Parser
  52. final def parseNum(i: Int, ctxt: RawFContext[J])(implicit facade: RawFacade[J]): Int

    Parse the given number, and add it to the given context.

    Parse the given number, and add it to the given context.

    We don't actually instantiate a number here, but rather pass the string of for future use. Facades can choose to be lazy and just store the string. This ends up being way faster and has the nice side-effect that we know exactly how the user represented the number.

    Attributes
    protected[this]
    Definition Classes
    Parser
  53. final def parseNumSlow(i: Int, ctxt: RawFContext[J])(implicit facade: RawFacade[J]): Int

    Parse the given number, and add it to the given context.

    Parse the given number, and add it to the given context.

    This method is a bit slower than parseNum() because it has to be sure it doesn't run off the end of the input.

    Normally (when operating in rparse in the context of an outer array or object) we don't need to worry about this and can just grab characters, because if we run out of characters that would indicate bad input. This is for cases where the number could possibly be followed by a valid EOF.

    This method has all the same caveats as the previous method.

    Attributes
    protected[this]
    Definition Classes
    Parser
  54. final def parseString(i: Int, ctxt: RawFContext[J]): Int

    Parse the string according to JSON rules, and add to the given context.

    Parse the string according to JSON rules, and add to the given context.

    This method expects the data to be in UTF-8 and accesses it as bytes.

    Attributes
    protected[this]
    Definition Classes
    ByteBasedParserParser
  55. final def parseStringSimple(i: Int, ctxt: RawFContext[J]): Int

    See if the string has any escape sequences.

    See if the string has any escape sequences. If not, return the end of the string. If so, bail out and return -1.

    This method expects the data to be in UTF-8 and accesses it as bytes. Thus we can just ignore any bytes with the highest bit set.

    Attributes
    protected[this]
    Definition Classes
    ByteBasedParser
  56. final def parseTrue(i: Int)(implicit facade: RawFacade[J]): J

    Parse the JSON constant "true".

    Parse the JSON constant "true".

    Note that this method assumes that the first character has already been checked.

    Attributes
    protected[this]
    Definition Classes
    Parser
  57. var pos: Int

    Attributes
    protected[this]
  58. final def reset(i: Int): Int

    The reset() method is used to signal that we're working from the given position, and any previous data can be released.

    The reset() method is used to signal that we're working from the given position, and any previous data can be released. Some parsers (e.g. StringParser) will ignore release, while others (e.g. PathParser) will need to use this information to release and allocate different areas.

    Attributes
    protected[this]
    Definition Classes
    AsyncParserParser
  59. final def resizeIfNecessary(need: Int): Unit

    Attributes
    protected[this]
  60. final def rparse(state: Int, j: Int, stack: List[RawFContext[J]])(implicit facade: RawFacade[J]): (J, Int)

    Tail-recursive parsing method to do the bulk of JSON parsing.

    Tail-recursive parsing method to do the bulk of JSON parsing.

    This single method manages parser states, data, etc. Except for parsing non-recursive values (like strings, numbers, and constants) all important work happens in this loop (or in methods it calls, like reset()).

    Currently the code is optimized to make use of switch statements. Future work should consider whether this is better or worse than manually constructed if/else statements or something else. Also, it may be possible to reorder some cases for speed improvements.

    Attributes
    protected[this]
    Definition Classes
    Parser
    Annotations
    @tailrec()
  61. var stack: List[RawFContext[J]]

    Attributes
    protected[jawn]
  62. var state: Int

    Attributes
    protected[jawn]
  63. var streamMode: Int

    Attributes
    protected[jawn]
  64. final def synchronized[T0](arg0: ⇒ T0): T0

    Definition Classes
    AnyRef
  65. def toString(): String

    Definition Classes
    AnyRef → Any
  66. final val utf8: Charset

    Attributes
    protected[this]
    Definition Classes
    Parser
  67. final def wait(): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  68. final def wait(arg0: Long, arg1: Int): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  69. final def wait(arg0: Long): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from ByteBasedParser[J]

Inherited from Parser[J]

Inherited from AnyRef

Inherited from Any

Ungrouped