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

com.twitter.finagle.thrift.thriftscala.BinaryAnnotation.scala Maven / Gradle / Ivy

There is a newer version: 24.2.0
Show newest version
/**
 * Generated by Scrooge
 *   version: 20.4.1
 *   rev: 74d6bed636c90dc4b67e342ecd80033bad43e94d
 *   built at: 20200425-214521
 */
package com.twitter.finagle.thrift.thriftscala

import com.twitter.io.Buf
import com.twitter.scrooge.{
  InvalidFieldsException,
  LazyTProtocol,
  StructBuilder,
  StructBuilderFactory,
  TFieldBlob,
  ThriftStruct,
  ThriftStructCodec3,
  ThriftStructField,
  ThriftStructFieldInfo,
  ThriftStructMetaData,
  ValidatingThriftStruct,
  ValidatingThriftStructCodec3
}
import org.apache.thrift.protocol._
import org.apache.thrift.transport.TMemoryBuffer
import scala.collection.immutable.{Map => immutable$Map}
import scala.collection.mutable.Builder
import scala.reflect.{ClassTag, classTag}

/**
 * Binary annotations are tags applied to a Span to give it context. For
 * example, a binary annotation of "http.uri" could the path to a resource in a
 * RPC call.
 *
 * Binary annotations of type STRING are always queryable, though more a
 * historical implementation detail than a structural concern.
 *
 * Binary annotations can repeat, and vary on the host. Similar to Annotation,
 * the host indicates who logged the event. This allows you to tell the
 * difference between the client and server side of the same key. For example,
 * the key "http.uri" might be different on the client and server side due to
 * rewriting, like "/api/v1/myresource" vs "/myresource. Via the host field,
 * you can see the different points of view, which often help in debugging.
 */
object BinaryAnnotation extends ValidatingThriftStructCodec3[BinaryAnnotation] with StructBuilderFactory[BinaryAnnotation] {
  val NoPassthroughFields: immutable$Map[Short, TFieldBlob] = immutable$Map.empty[Short, TFieldBlob]
  val Struct: TStruct = new TStruct("BinaryAnnotation")
  val KeyField: TField = new TField("key", TType.STRING, 1)
  val KeyFieldManifest: Manifest[String] = manifest[String]
  val ValueField: TField = new TField("value", TType.STRING, 2)
  val ValueFieldManifest: Manifest[_root_.java.nio.ByteBuffer] = manifest[_root_.java.nio.ByteBuffer]
  val AnnotationTypeField: TField = new TField("annotation_type", TType.ENUM, 3)
  val AnnotationTypeFieldI32: TField = new TField("annotation_type", TType.I32, 3)
  val AnnotationTypeFieldManifest: Manifest[com.twitter.finagle.thrift.thriftscala.AnnotationType] = manifest[com.twitter.finagle.thrift.thriftscala.AnnotationType]
  val HostField: TField = new TField("host", TType.STRUCT, 4)
  val HostFieldManifest: Manifest[com.twitter.finagle.thrift.thriftscala.Endpoint] = manifest[com.twitter.finagle.thrift.thriftscala.Endpoint]

  /**
   * Field information in declaration order.
   */
  lazy val fieldInfos: scala.List[ThriftStructFieldInfo] = scala.List[ThriftStructFieldInfo](
    new ThriftStructFieldInfo(
      KeyField,
      false,
      false,
      KeyFieldManifest,
      _root_.scala.None,
      _root_.scala.None,
      immutable$Map.empty[String, String],
      immutable$Map.empty[String, String],
      None
    ),
    new ThriftStructFieldInfo(
      ValueField,
      false,
      false,
      ValueFieldManifest,
      _root_.scala.None,
      _root_.scala.None,
      immutable$Map.empty[String, String],
      immutable$Map.empty[String, String],
      None
    ),
    new ThriftStructFieldInfo(
      AnnotationTypeField,
      false,
      false,
      AnnotationTypeFieldManifest,
      _root_.scala.None,
      _root_.scala.None,
      immutable$Map.empty[String, String],
      immutable$Map.empty[String, String],
      None
    ),
    new ThriftStructFieldInfo(
      HostField,
      true,
      false,
      HostFieldManifest,
      _root_.scala.None,
      _root_.scala.None,
      immutable$Map.empty[String, String],
      immutable$Map.empty[String, String],
      None
    )
  )


  val structAnnotations: immutable$Map[String, String] =
    immutable$Map.empty[String, String]

  private val fieldTypes: IndexedSeq[ClassTag[_]] = IndexedSeq[ClassTag[_]](
    classTag[String].asInstanceOf[ClassTag[_]],
    classTag[_root_.java.nio.ByteBuffer].asInstanceOf[ClassTag[_]],
    classTag[com.twitter.finagle.thrift.thriftscala.AnnotationType].asInstanceOf[ClassTag[_]],
    classTag[_root_.scala.Option[com.twitter.finagle.thrift.thriftscala.Endpoint]].asInstanceOf[ClassTag[_]]
  )

  private[this] val structFields: Seq[ThriftStructField[BinaryAnnotation]] = Seq[ThriftStructField[BinaryAnnotation]](
    new ThriftStructField[BinaryAnnotation](
      KeyField,
      _root_.scala.Some(KeyFieldManifest),
      classOf[BinaryAnnotation]) {
        def getValue[R](struct: BinaryAnnotation): R = struct.key.asInstanceOf[R]
    },
    new ThriftStructField[BinaryAnnotation](
      ValueField,
      _root_.scala.Some(ValueFieldManifest),
      classOf[BinaryAnnotation]) {
        def getValue[R](struct: BinaryAnnotation): R = struct.value.asInstanceOf[R]
    },
    new ThriftStructField[BinaryAnnotation](
      AnnotationTypeField,
      _root_.scala.Some(AnnotationTypeFieldManifest),
      classOf[BinaryAnnotation]) {
        def getValue[R](struct: BinaryAnnotation): R = struct.annotationType.asInstanceOf[R]
    },
    new ThriftStructField[BinaryAnnotation](
      HostField,
      _root_.scala.Some(HostFieldManifest),
      classOf[BinaryAnnotation]) {
        def getValue[R](struct: BinaryAnnotation): R = struct.host.asInstanceOf[R]
    }
  )

  override lazy val metaData: ThriftStructMetaData[BinaryAnnotation] =
    new ThriftStructMetaData(this, structFields, fieldInfos, Nil, structAnnotations)

  /**
   * Checks that all required fields are non-null.
   */
  def validate(_item: BinaryAnnotation): Unit = {
  }

  /**
   * Checks that the struct is a valid as a new instance. If there are any missing required or
   * construction required fields, return a non-empty list.
   */
  def validateNewInstance(item: BinaryAnnotation): scala.Seq[com.twitter.scrooge.validation.Issue] = {
    val buf = scala.collection.mutable.ListBuffer.empty[com.twitter.scrooge.validation.Issue]

    buf ++= validateField(item.key)
    buf ++= validateField(item.value)
    buf ++= validateField(item.annotationType)
    buf ++= validateField(item.host)
    buf.toList
  }

  def withoutPassthroughFields(original: BinaryAnnotation): BinaryAnnotation =
    new Immutable(
      key = original.key,
      value = original.value,
      annotationType = original.annotationType,
      host =
        {
          val field = original.host
          field.map { field =>
            com.twitter.finagle.thrift.thriftscala.Endpoint.withoutPassthroughFields(field)
          }
        }
    )

  def newBuilder(): StructBuilder[BinaryAnnotation] = new BinaryAnnotationStructBuilder(_root_.scala.None, fieldTypes)

  override def encode(_item: BinaryAnnotation, _oproto: TProtocol): Unit = {
    _item.write(_oproto)
  }


  private[this] def lazyDecode(_iprot: LazyTProtocol): BinaryAnnotation = {

    var keyOffset: Int = -1
    var value: _root_.java.nio.ByteBuffer = null
    var annotationType: com.twitter.finagle.thrift.thriftscala.AnnotationType = null
    var host: Option[com.twitter.finagle.thrift.thriftscala.Endpoint] = None

    var _passthroughFields: Builder[(Short, TFieldBlob), immutable$Map[Short, TFieldBlob]] = null
    var _done = false
    val _start_offset = _iprot.offset

    _iprot.readStructBegin()
    do {
      val _field = _iprot.readFieldBegin()
      val _fieldType = _field.`type`
      if (_fieldType == TType.STOP) {
        _done = true
      } else {
        _field.id match {
          case 1 =>
            if (_fieldType == TType.STRING) {
              keyOffset = _iprot.offsetSkipString()
            } else {
              _root_.com.twitter.scrooge.internal.ApplicationExceptions.throwWrongFieldTypeException(
                "Received wrong type for field 'key' (expected=%s, actual=%s).",
                TType.STRING,
                _fieldType
              )
            }
          case 2 =>
            if (_fieldType == TType.STRING) {
              value = readValueValue(_iprot)
            } else {
              _root_.com.twitter.scrooge.internal.ApplicationExceptions.throwWrongFieldTypeException(
                "Received wrong type for field 'value' (expected=%s, actual=%s).",
                TType.STRING,
                _fieldType
              )
            }
          case 3 =>
            if (_fieldType == TType.I32 || _fieldType == TType.ENUM) {
              annotationType = readAnnotationTypeValue(_iprot)
            } else {
              _root_.com.twitter.scrooge.internal.ApplicationExceptions.throwWrongFieldTypeException(
                "Received wrong type for field 'annotationType' (expected=%s, actual=%s).",
                TType.ENUM,
                _fieldType
              )
            }
          case 4 =>
            if (_fieldType == TType.STRUCT) {
              host = Some(readHostValue(_iprot))
            } else {
              _root_.com.twitter.scrooge.internal.ApplicationExceptions.throwWrongFieldTypeException(
                "Received wrong type for field 'host' (expected=%s, actual=%s).",
                TType.STRUCT,
                _fieldType
              )
            }
          case _ =>
            if (_passthroughFields eq null)
              _passthroughFields = immutable$Map.newBuilder[Short, TFieldBlob]
            _passthroughFields += _root_.scala.Tuple2(_field.id, TFieldBlob.read(_field, _iprot))
        }
        _iprot.readFieldEnd()
      }
    } while (!_done)
    _iprot.readStructEnd()

    new LazyImmutable(
      _iprot,
      _iprot.buffer,
      _start_offset,
      _iprot.offset,
      keyOffset,
      value,
      annotationType,
      host,
      if (_passthroughFields eq null)
        NoPassthroughFields
      else
        _passthroughFields.result()
    )
  }

  override def decode(_iprot: TProtocol): BinaryAnnotation = {
    if (_iprot.isInstanceOf[LazyTProtocol]) {
      lazyDecode(_iprot.asInstanceOf[LazyTProtocol])
    } else {
      eagerDecode(_iprot)
    }
  }

  private[thriftscala] def eagerDecode(_iprot: TProtocol): BinaryAnnotation = {
    var key: String = null
    var value: _root_.java.nio.ByteBuffer = null
    var annotationType: com.twitter.finagle.thrift.thriftscala.AnnotationType = null
    var host: _root_.scala.Option[com.twitter.finagle.thrift.thriftscala.Endpoint] = _root_.scala.None
    var _passthroughFields: Builder[(Short, TFieldBlob), immutable$Map[Short, TFieldBlob]] = null
    var _done = false

    _iprot.readStructBegin()
    do {
      val _field = _iprot.readFieldBegin()
      val _fieldType = _field.`type`
      if (_fieldType == TType.STOP) {
        _done = true
      } else {
        _field.id match {
          case 1 =>
            if (_fieldType == TType.STRING) {
              key = readKeyValue(_iprot)
            } else {
              _root_.com.twitter.scrooge.internal.ApplicationExceptions.throwWrongFieldTypeException(
                "Received wrong type for field 'key' (expected=%s, actual=%s).",
                TType.STRING,
                _fieldType
              )
            }
          case 2 =>
            if (_fieldType == TType.STRING) {
              value = readValueValue(_iprot)
            } else {
              _root_.com.twitter.scrooge.internal.ApplicationExceptions.throwWrongFieldTypeException(
                "Received wrong type for field 'value' (expected=%s, actual=%s).",
                TType.STRING,
                _fieldType
              )
            }
          case 3 =>
            if (_fieldType == TType.I32 || _fieldType == TType.ENUM) {
              annotationType = readAnnotationTypeValue(_iprot)
            } else {
              _root_.com.twitter.scrooge.internal.ApplicationExceptions.throwWrongFieldTypeException(
                "Received wrong type for field 'annotationType' (expected=%s, actual=%s).",
                TType.ENUM,
                _fieldType
              )
            }
          case 4 =>
            if (_fieldType == TType.STRUCT) {
              host = _root_.scala.Some(readHostValue(_iprot))
            } else {
              _root_.com.twitter.scrooge.internal.ApplicationExceptions.throwWrongFieldTypeException(
                "Received wrong type for field 'host' (expected=%s, actual=%s).",
                TType.STRUCT,
                _fieldType
              )
            }
          case _ =>
            if (_passthroughFields eq null)
              _passthroughFields = immutable$Map.newBuilder[Short, TFieldBlob]
            _passthroughFields += _root_.scala.Tuple2(_field.id, TFieldBlob.read(_field, _iprot))
        }
        _iprot.readFieldEnd()
      }
    } while (!_done)
    _iprot.readStructEnd()

    new Immutable(
      key,
      value,
      annotationType,
      host,
      if (_passthroughFields eq null)
        NoPassthroughFields
      else
        _passthroughFields.result()
    )
  }

  def apply(
    key: String,
    value: _root_.java.nio.ByteBuffer,
    annotationType: com.twitter.finagle.thrift.thriftscala.AnnotationType,
    host: _root_.scala.Option[com.twitter.finagle.thrift.thriftscala.Endpoint] = _root_.scala.None
  ): BinaryAnnotation =
    new Immutable(
      key,
      value,
      annotationType,
      host
    )

  def unapply(_item: BinaryAnnotation): _root_.scala.Option[_root_.scala.Tuple4[String, _root_.java.nio.ByteBuffer, com.twitter.finagle.thrift.thriftscala.AnnotationType, Option[com.twitter.finagle.thrift.thriftscala.Endpoint]]] = _root_.scala.Some(_item.toTuple)


  @inline private[thriftscala] def readKeyValue(_iprot: TProtocol): String = {
    _iprot.readString()
  }

  @inline private def writeKeyField(key_item: String, _oprot: TProtocol): Unit = {
    _oprot.writeFieldBegin(KeyField)
    writeKeyValue(key_item, _oprot)
    _oprot.writeFieldEnd()
  }

  @inline private def writeKeyValue(key_item: String, _oprot: TProtocol): Unit = {
    _oprot.writeString(key_item)
  }

  @inline private[thriftscala] def readValueValue(_iprot: TProtocol): _root_.java.nio.ByteBuffer = {
    _iprot.readBinary()
  }

  @inline private def writeValueField(value_item: _root_.java.nio.ByteBuffer, _oprot: TProtocol): Unit = {
    _oprot.writeFieldBegin(ValueField)
    writeValueValue(value_item, _oprot)
    _oprot.writeFieldEnd()
  }

  @inline private def writeValueValue(value_item: _root_.java.nio.ByteBuffer, _oprot: TProtocol): Unit = {
    _oprot.writeBinary(value_item)
  }

  @inline private[thriftscala] def readAnnotationTypeValue(_iprot: TProtocol): com.twitter.finagle.thrift.thriftscala.AnnotationType = {
    com.twitter.finagle.thrift.thriftscala.AnnotationType.getOrUnknown(_iprot.readI32())
  }

  @inline private def writeAnnotationTypeField(annotationType_item: com.twitter.finagle.thrift.thriftscala.AnnotationType, _oprot: TProtocol): Unit = {
    _oprot.writeFieldBegin(AnnotationTypeFieldI32)
    writeAnnotationTypeValue(annotationType_item, _oprot)
    _oprot.writeFieldEnd()
  }

  @inline private def writeAnnotationTypeValue(annotationType_item: com.twitter.finagle.thrift.thriftscala.AnnotationType, _oprot: TProtocol): Unit = {
    _oprot.writeI32(annotationType_item.value)
  }

  @inline private[thriftscala] def readHostValue(_iprot: TProtocol): com.twitter.finagle.thrift.thriftscala.Endpoint = {
    com.twitter.finagle.thrift.thriftscala.Endpoint.decode(_iprot)
  }

  @inline private def writeHostField(host_item: com.twitter.finagle.thrift.thriftscala.Endpoint, _oprot: TProtocol): Unit = {
    _oprot.writeFieldBegin(HostField)
    writeHostValue(host_item, _oprot)
    _oprot.writeFieldEnd()
  }

  @inline private def writeHostValue(host_item: com.twitter.finagle.thrift.thriftscala.Endpoint, _oprot: TProtocol): Unit = {
    host_item.write(_oprot)
  }


  object Immutable extends ThriftStructCodec3[BinaryAnnotation] {
    override def encode(_item: BinaryAnnotation, _oproto: TProtocol): Unit = { _item.write(_oproto) }
    override def decode(_iprot: TProtocol): BinaryAnnotation = BinaryAnnotation.decode(_iprot)
    override lazy val metaData: ThriftStructMetaData[BinaryAnnotation] = BinaryAnnotation.metaData
  }

  /**
   * The default read-only implementation of BinaryAnnotation.  You typically should not need to
   * directly reference this class; instead, use the BinaryAnnotation.apply method to construct
   * new instances.
   */
  class Immutable(
      val key: String,
      val value: _root_.java.nio.ByteBuffer,
      val annotationType: com.twitter.finagle.thrift.thriftscala.AnnotationType,
      val host: _root_.scala.Option[com.twitter.finagle.thrift.thriftscala.Endpoint],
      override val _passthroughFields: immutable$Map[Short, TFieldBlob])
    extends BinaryAnnotation {
    def this(
      key: String,
      value: _root_.java.nio.ByteBuffer,
      annotationType: com.twitter.finagle.thrift.thriftscala.AnnotationType,
      host: _root_.scala.Option[com.twitter.finagle.thrift.thriftscala.Endpoint] = _root_.scala.None
    ) = this(
      key,
      value,
      annotationType,
      host,
      immutable$Map.empty[Short, TFieldBlob]
    )
  }

  /**
   * This is another Immutable, this however keeps strings as lazy values that are lazily decoded from the backing
   * array byte on read.
   */
  private[this] class LazyImmutable(
      _proto: LazyTProtocol,
      _buf: Array[Byte],
      _start_offset: Int,
      _end_offset: Int,
      keyOffset: Int,
      val value: _root_.java.nio.ByteBuffer,
      val annotationType: com.twitter.finagle.thrift.thriftscala.AnnotationType,
      val host: _root_.scala.Option[com.twitter.finagle.thrift.thriftscala.Endpoint],
      override val _passthroughFields: immutable$Map[Short, TFieldBlob])
    extends BinaryAnnotation {

    override def write(_oprot: TProtocol): Unit = {
      if (_oprot.isInstanceOf[LazyTProtocol]) {
        _oprot.asInstanceOf[LazyTProtocol].writeRaw(_buf, _start_offset, _end_offset - _start_offset)
      } else {
        super.write(_oprot)
      }
    }

    lazy val key: String =
      if (keyOffset == -1)
        null
      else {
        _proto.decodeString(_buf, keyOffset)
      }

    /**
     * Override the super hash code to make it a lazy val rather than def.
     *
     * Calculating the hash code can be expensive, caching it where possible
     * can provide significant performance wins. (Key in a hash map for instance)
     * Usually not safe since the normal constructor will accept a mutable map or
     * set as an arg
     * Here however we control how the class is generated from serialized data.
     * With the class private and the contract that we throw away our mutable references
     * having the hash code lazy here is safe.
     */
    override lazy val hashCode: Int = super.hashCode
  }

  /**
   * This Proxy trait allows you to extend the BinaryAnnotation trait with additional state or
   * behavior and implement the read-only methods from BinaryAnnotation using an underlying
   * instance.
   */
  trait Proxy extends BinaryAnnotation {
    protected def _underlying_BinaryAnnotation: BinaryAnnotation
    override def key: String = _underlying_BinaryAnnotation.key
    override def value: _root_.java.nio.ByteBuffer = _underlying_BinaryAnnotation.value
    override def annotationType: com.twitter.finagle.thrift.thriftscala.AnnotationType = _underlying_BinaryAnnotation.annotationType
    override def host: _root_.scala.Option[com.twitter.finagle.thrift.thriftscala.Endpoint] = _underlying_BinaryAnnotation.host
    override def _passthroughFields: immutable$Map[Short, TFieldBlob] = _underlying_BinaryAnnotation._passthroughFields
  }
}

/**
 * Prefer the companion object's [[com.twitter.finagle.thrift.thriftscala.BinaryAnnotation.apply]]
 * for construction if you don't need to specify passthrough fields.
 */
trait BinaryAnnotation
  extends ThriftStruct
  with _root_.scala.Product4[String, _root_.java.nio.ByteBuffer, com.twitter.finagle.thrift.thriftscala.AnnotationType, Option[com.twitter.finagle.thrift.thriftscala.Endpoint]]
  with ValidatingThriftStruct[BinaryAnnotation]
  with java.io.Serializable
{
  import BinaryAnnotation._

  def key: String
  def value: _root_.java.nio.ByteBuffer
  def annotationType: com.twitter.finagle.thrift.thriftscala.AnnotationType
  /**
   * The host that recorded tag, which allows you to differentiate between
   * multiple tags with the same key. There are two exceptions to this.
   *
   * When the key is CLIENT_ADDR or SERVER_ADDR, host indicates the source or
   * destination of an RPC. This exception allows zipkin to display network
   * context of uninstrumented services, or clients such as web browsers.
   */
  def host: _root_.scala.Option[com.twitter.finagle.thrift.thriftscala.Endpoint]

  def _passthroughFields: immutable$Map[Short, TFieldBlob] = immutable$Map.empty

  def _1: String = key
  def _2: _root_.java.nio.ByteBuffer = value
  def _3: com.twitter.finagle.thrift.thriftscala.AnnotationType = annotationType
  def _4: _root_.scala.Option[com.twitter.finagle.thrift.thriftscala.Endpoint] = host

  def toTuple: _root_.scala.Tuple4[String, _root_.java.nio.ByteBuffer, com.twitter.finagle.thrift.thriftscala.AnnotationType, Option[com.twitter.finagle.thrift.thriftscala.Endpoint]] =
    _root_.scala.Tuple4[String, _root_.java.nio.ByteBuffer, com.twitter.finagle.thrift.thriftscala.AnnotationType, Option[com.twitter.finagle.thrift.thriftscala.Endpoint]](
      key,
      value,
      annotationType,
      host
    )


  /**
   * Gets a field value encoded as a binary blob using TCompactProtocol.  If the specified field
   * is present in the passthrough map, that value is returned.  Otherwise, if the specified field
   * is known and not optional and set to None, then the field is serialized and returned.
   */
  def getFieldBlob(_fieldId: Short): _root_.scala.Option[TFieldBlob] = {
    val passedthroughValue = _passthroughFields.get(_fieldId)
    if (passedthroughValue.isDefined) {
      passedthroughValue
    } else {
      val _buff = new TMemoryBuffer(32)
      val _oprot = new TCompactProtocol(_buff)

      val _fieldOpt: _root_.scala.Option[TField] = _fieldId match {
        case 1 =>
          if (key ne null) {
            writeKeyValue(key, _oprot)
            _root_.scala.Some(BinaryAnnotation.KeyField)
          } else {
            _root_.scala.None
          }
        case 2 =>
          if (value ne null) {
            writeValueValue(value, _oprot)
            _root_.scala.Some(BinaryAnnotation.ValueField)
          } else {
            _root_.scala.None
          }
        case 3 =>
          if (annotationType ne null) {
            writeAnnotationTypeValue(annotationType, _oprot)
            _root_.scala.Some(BinaryAnnotation.AnnotationTypeField)
          } else {
            _root_.scala.None
          }
        case 4 =>
          if (host.isDefined) {
            writeHostValue(host.get, _oprot)
            _root_.scala.Some(BinaryAnnotation.HostField)
          } else {
            _root_.scala.None
          }
        case _ => _root_.scala.None
      }
      if (_fieldOpt.isDefined) {
        _root_.scala.Some(TFieldBlob(_fieldOpt.get, Buf.ByteArray.Owned(_buff.getArray)))
      } else {
        _root_.scala.None
      }
    }
  }


  /**
   * Collects TCompactProtocol-encoded field values according to `getFieldBlob` into a map.
   */
  def getFieldBlobs(ids: TraversableOnce[Short]): immutable$Map[Short, TFieldBlob] =
    (ids.flatMap { id => getFieldBlob(id).map { fieldBlob => (id, fieldBlob) } }).toMap

  /**
   * Sets a field using a TCompactProtocol-encoded binary blob.  If the field is a known
   * field, the blob is decoded and the field is set to the decoded value.  If the field
   * is unknown and passthrough fields are enabled, then the blob will be stored in
   * _passthroughFields.
   */
  def setField(_blob: TFieldBlob): BinaryAnnotation = {
    var key: String = this.key
    var value: _root_.java.nio.ByteBuffer = this.value
    var annotationType: com.twitter.finagle.thrift.thriftscala.AnnotationType = this.annotationType
    var host: _root_.scala.Option[com.twitter.finagle.thrift.thriftscala.Endpoint] = this.host
    var _passthroughFields = this._passthroughFields
    _blob.id match {
      case 1 =>
        key = readKeyValue(_blob.read)
      case 2 =>
        value = readValueValue(_blob.read)
      case 3 =>
        annotationType = readAnnotationTypeValue(_blob.read)
      case 4 =>
        host = _root_.scala.Some(readHostValue(_blob.read))
      case _ => _passthroughFields += _root_.scala.Tuple2(_blob.id, _blob)
    }
    new Immutable(
      key,
      value,
      annotationType,
      host,
      _passthroughFields
    )
  }

  /**
   * If the specified field is optional, it is set to None.  Otherwise, if the field is
   * known, it is reverted to its default value; if the field is unknown, it is removed
   * from the passthroughFields map, if present.
   */
  def unsetField(_fieldId: Short): BinaryAnnotation = {
    var key: String = this.key
    var value: _root_.java.nio.ByteBuffer = this.value
    var annotationType: com.twitter.finagle.thrift.thriftscala.AnnotationType = this.annotationType
    var host: _root_.scala.Option[com.twitter.finagle.thrift.thriftscala.Endpoint] = this.host

    _fieldId match {
      case 1 =>
        key = null
      case 2 =>
        value = null
      case 3 =>
        annotationType = null
      case 4 =>
        host = _root_.scala.None
      case _ =>
    }
    new Immutable(
      key,
      value,
      annotationType,
      host,
      _passthroughFields - _fieldId
    )
  }

  /**
   * If the specified field is optional, it is set to None.  Otherwise, if the field is
   * known, it is reverted to its default value; if the field is unknown, it is removed
   * from the passthroughFields map, if present.
   */
  def unsetKey: BinaryAnnotation = unsetField(1)

  def unsetValue: BinaryAnnotation = unsetField(2)

  def unsetAnnotationType: BinaryAnnotation = unsetField(3)

  def unsetHost: BinaryAnnotation = unsetField(4)


  override def write(_oprot: TProtocol): Unit = {
    BinaryAnnotation.validate(this)
    _oprot.writeStructBegin(Struct)
    if (key ne null) writeKeyField(key, _oprot)
    if (value ne null) writeValueField(value, _oprot)
    if (annotationType ne null) writeAnnotationTypeField(annotationType, _oprot)
    if (host.isDefined) writeHostField(host.get, _oprot)
    if (_passthroughFields.nonEmpty) {
      _passthroughFields.values.foreach { _.write(_oprot) }
    }
    _oprot.writeFieldStop()
    _oprot.writeStructEnd()
  }

  def copy(
    key: String = this.key,
    value: _root_.java.nio.ByteBuffer = this.value,
    annotationType: com.twitter.finagle.thrift.thriftscala.AnnotationType = this.annotationType,
    host: _root_.scala.Option[com.twitter.finagle.thrift.thriftscala.Endpoint] = this.host,
    _passthroughFields: immutable$Map[Short, TFieldBlob] = this._passthroughFields
  ): BinaryAnnotation =
    new Immutable(
      key,
      value,
      annotationType,
      host,
      _passthroughFields
    )

  override def canEqual(other: Any): Boolean = other.isInstanceOf[BinaryAnnotation]

  private[this] def _equals(other: BinaryAnnotation): Boolean =
      this.productArity == other.productArity &&
      this.productIterator.sameElements(other.productIterator) &&
      this._passthroughFields == other._passthroughFields

  override def equals(other: Any): Boolean =
    canEqual(other) && _equals(other.asInstanceOf[BinaryAnnotation])

  override def hashCode: Int = {
    _root_.scala.runtime.ScalaRunTime._hashCode(this)
  }

  override def toString: String = _root_.scala.runtime.ScalaRunTime._toString(this)

  override def productPrefix: String = "BinaryAnnotation"

  def _codec: ValidatingThriftStructCodec3[BinaryAnnotation] = BinaryAnnotation

  def newBuilder(): StructBuilder[BinaryAnnotation] = new BinaryAnnotationStructBuilder(_root_.scala.Some(this), fieldTypes)
}

private[thriftscala] class BinaryAnnotationStructBuilder(instance: _root_.scala.Option[BinaryAnnotation], fieldTypes: IndexedSeq[ClassTag[_]])
    extends StructBuilder[BinaryAnnotation](fieldTypes) {

  def build(): BinaryAnnotation = {
    val _fieldArray = fieldArray // shadow variable
    if (instance.isDefined) {
      val instanceValue = instance.get
      BinaryAnnotation(
        if (_fieldArray(0) == null) instanceValue.key else _fieldArray(0).asInstanceOf[String],
        if (_fieldArray(1) == null) instanceValue.value else _fieldArray(1).asInstanceOf[_root_.java.nio.ByteBuffer],
        if (_fieldArray(2) == null) instanceValue.annotationType else _fieldArray(2).asInstanceOf[com.twitter.finagle.thrift.thriftscala.AnnotationType],
        if (_fieldArray(3) == null) instanceValue.host else _fieldArray(3).asInstanceOf[_root_.scala.Option[com.twitter.finagle.thrift.thriftscala.Endpoint]]
      )
    } else {
      if (genericArrayOps(_fieldArray).contains(null)) throw new InvalidFieldsException(structBuildError("BinaryAnnotation"))
      BinaryAnnotation(
        _fieldArray(0).asInstanceOf[String],
        _fieldArray(1).asInstanceOf[_root_.java.nio.ByteBuffer],
        _fieldArray(2).asInstanceOf[com.twitter.finagle.thrift.thriftscala.AnnotationType],
        _fieldArray(3).asInstanceOf[_root_.scala.Option[com.twitter.finagle.thrift.thriftscala.Endpoint]]
      )
    }
  }
}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy