All Downloads are FREE. Search and download functionalities are using the official Maven repository.

wvlet.airframe.msgpack.spi.Unpacker.scala Maven / Gradle / Ivy

/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package wvlet.airframe.msgpack.spi

import java.math.BigInteger
import java.time.Instant

/**
  * MessageUnpacker interface
  */
trait Unpacker extends AutoCloseable {
  def hasNext: Boolean
  def getNextFormat: MessageFormat
  def getNextValueType: ValueType

  def skipValue: Unit
  def skipValue(count: Int): Unit

  def unpackNil: Unit

  /**
    * Peeks a Nil byte and read it if the next byte is actually a Nil value, then proceed the cursor 1 byte and return
    * true.
    *
    * If the next byte is not Nil, it will return false and the cursor position will not be changed.
    *
    * @return
    *   true if a nil value is read and the cursor is proceeded 1 bytes. false if the next value is not Nil and the
    *   cursor position will not change.
    */
  def tryUnpackNil: Boolean
  def unpackBoolean: Boolean
  def unpackByte: Byte
  def unpackShort: Short
  def unpackInt: Int
  def unpackLong: Long
  def unpackBigInteger: BigInteger
  def unpackFloat: Float
  def unpackDouble: Double
  def unpackString: String
  def unpackTimestamp: Instant
  def unpackTimestamp(extTypeHeader: ExtTypeHeader): Instant

  def unpackArrayHeader: Int
  def unpackMapHeader: Int
  def unpackExtTypeHeader: ExtTypeHeader
  def unpackExtValue(extTypeHeader: ExtTypeHeader): Value
  def unpackRawStringHeader: Int
  def unpackBinaryHeader: Int

  def unpackValue: Value

  // def skipPayload(numBytes: Int): Unit
  def readPayload(dst: Array[Byte]): Unit
  def readPayload(dst: Array[Byte], offset: Int, length: Int): Unit
  def readPayload(length: Int): Array[Byte]
}

case class ExtTypeHeader(extType: Byte, byteLength: Int)




© 2015 - 2024 Weber Informatics LLC | Privacy Policy