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

scalapb.mdg.engine.proto.reports.Trace.scala Maven / Gradle / Ivy

The newest version!
// Generated by the Scala Plugin for the Protocol Buffer Compiler.
// Do not edit!
//
// Protofile syntax: PROTO3

package mdg.engine.proto.reports

/** @param startTime
  *   Wallclock time when the trace began.
  *   required
  * @param endTime
  *   Wallclock time when the trace ended.
  *   required
  * @param durationNs
  *   High precision duration of the trace; may not equal end_time-start_time
  *   (eg, if your machine's clock changed during the trace).
  *   required
  * @param root
  *   A tree containing information about all resolvers run directly by this
  *   service, including errors.
  * @param signature
  *   In addition to details.raw_query, we include a "signature" of the query,
  *   which can be normalized: for example, you may want to discard aliases, drop
  *   unused operations and fragments, sort fields, etc. The most important thing
  *   here is that the signature match the signature in StatsReports. In
  *   StatsReports signatures show up as the key in the per_query map (with the
  *   operation name prepended).  The signature should be a valid GraphQL query.
  *   All traces must have a signature; if this Trace is in a FullTracesReport
  *   that signature is in the key of traces_per_query rather than in this field.
  *   Engineproxy provides the signature in legacy_signature_needs_resigning
  *   instead.
  * @param unexecutedOperationBody
  *   Optional: when GraphQL parsing or validation against the GraphQL schema fails, these fields
  *   can include reference to the operation being sent for users to dig into the set of operations
  *   that are failing validation.
  * @param clientName
  *   Note: engineproxy always sets client_name, client_version, and client_address to "none".
  *   apollo-engine-reporting allows for them to be set by the user.
  * @param queryPlan
  *   If this Trace was created by a gateway, this is the query plan, including
  *   sub-Traces for federated services. Note that the 'root' tree on the
  *   top-level Trace won't contain any resolvers (though it could contain errors
  *   that occurred in the gateway itself).
  * @param fullQueryCacheHit
  *   Was this response served from a full query response cache?  (In that case
  *   the node tree will have no resolvers.)
  * @param persistedQueryHit
  *   Was this query specified successfully as a persisted query hash?
  * @param persistedQueryRegister
  *   Did this query contain both a full query string and a persisted query hash?
  *   (This typically means that a previous request was rejected as an unknown
  *   persisted query.)
  * @param registeredOperation
  *   Was this operation registered and a part of the safelist?
  * @param forbiddenOperation
  *   Was this operation forbidden due to lack of safelisting?
  * @param legacySignatureNeedsResigning
  *   Older agents (eg the Go engineproxy) relied to some degree on the Engine
  *   backend to run their own semi-compatible implementation of a specific
  *   variant of query signatures. The backend does not do this for new agents (which
  *   set the above 'signature' field). It used to still "re-sign" signatures
  *   from engineproxy, but we've now simplified the backend to no longer do this.
  *   Deprecated and ignored in FullTracesReports.
  */
@SerialVersionUID(0L)
final case class Trace(
    startTime: _root_.scala.Option[com.google.protobuf.timestamp.Timestamp] = _root_.scala.None,
    endTime: _root_.scala.Option[com.google.protobuf.timestamp.Timestamp] = _root_.scala.None,
    durationNs: _root_.scala.Long = 0L,
    root: _root_.scala.Option[mdg.engine.proto.reports.Trace.Node] = _root_.scala.None,
    signature: _root_.scala.Predef.String = "",
    unexecutedOperationBody: _root_.scala.Predef.String = "",
    unexecutedOperationName: _root_.scala.Predef.String = "",
    details: _root_.scala.Option[mdg.engine.proto.reports.Trace.Details] = _root_.scala.None,
    clientName: _root_.scala.Predef.String = "",
    clientVersion: _root_.scala.Predef.String = "",
    clientAddress: _root_.scala.Predef.String = "",
    clientReferenceId: _root_.scala.Predef.String = "",
    http: _root_.scala.Option[mdg.engine.proto.reports.Trace.HTTP] = _root_.scala.None,
    cachePolicy: _root_.scala.Option[mdg.engine.proto.reports.Trace.CachePolicy] = _root_.scala.None,
    queryPlan: _root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode] = _root_.scala.None,
    fullQueryCacheHit: _root_.scala.Boolean = false,
    persistedQueryHit: _root_.scala.Boolean = false,
    persistedQueryRegister: _root_.scala.Boolean = false,
    registeredOperation: _root_.scala.Boolean = false,
    forbiddenOperation: _root_.scala.Boolean = false,
    legacySignatureNeedsResigning: _root_.scala.Predef.String = "",
    unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
    ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[Trace] {
    @transient
    private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
    private[this] def __computeSerializedSize(): _root_.scala.Int = {
      var __size = 0
      if (startTime.isDefined) {
        val __value = startTime.get
        __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (endTime.isDefined) {
        val __value = endTime.get
        __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      
      {
        val __value = durationNs
        if (__value != 0L) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeUInt64Size(11, __value)
        }
      };
      if (root.isDefined) {
        val __value = root.get
        __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      
      {
        val __value = signature
        if (!__value.isEmpty) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(19, __value)
        }
      };
      
      {
        val __value = unexecutedOperationBody
        if (!__value.isEmpty) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(27, __value)
        }
      };
      
      {
        val __value = unexecutedOperationName
        if (!__value.isEmpty) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(28, __value)
        }
      };
      if (details.isDefined) {
        val __value = details.get
        __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      
      {
        val __value = clientName
        if (!__value.isEmpty) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(7, __value)
        }
      };
      
      {
        val __value = clientVersion
        if (!__value.isEmpty) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(8, __value)
        }
      };
      
      {
        val __value = clientAddress
        if (!__value.isEmpty) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(9, __value)
        }
      };
      
      {
        val __value = clientReferenceId
        if (!__value.isEmpty) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(23, __value)
        }
      };
      if (http.isDefined) {
        val __value = http.get
        __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (cachePolicy.isDefined) {
        val __value = cachePolicy.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      if (queryPlan.isDefined) {
        val __value = queryPlan.get
        __size += 2 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
      };
      
      {
        val __value = fullQueryCacheHit
        if (__value != false) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(20, __value)
        }
      };
      
      {
        val __value = persistedQueryHit
        if (__value != false) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(21, __value)
        }
      };
      
      {
        val __value = persistedQueryRegister
        if (__value != false) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(22, __value)
        }
      };
      
      {
        val __value = registeredOperation
        if (__value != false) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(24, __value)
        }
      };
      
      {
        val __value = forbiddenOperation
        if (__value != false) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(25, __value)
        }
      };
      
      {
        val __value = legacySignatureNeedsResigning
        if (!__value.isEmpty) {
          __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(5, __value)
        }
      };
      __size += unknownFields.serializedSize
      __size
    }
    override def serializedSize: _root_.scala.Int = {
      var __size = __serializedSizeMemoized
      if (__size == 0) {
        __size = __computeSerializedSize() + 1
        __serializedSizeMemoized = __size
      }
      __size - 1
      
    }
    def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
      endTime.foreach { __v =>
        val __m = __v
        _output__.writeTag(3, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      startTime.foreach { __v =>
        val __m = __v
        _output__.writeTag(4, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      {
        val __v = legacySignatureNeedsResigning
        if (!__v.isEmpty) {
          _output__.writeString(5, __v)
        }
      };
      details.foreach { __v =>
        val __m = __v
        _output__.writeTag(6, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      {
        val __v = clientName
        if (!__v.isEmpty) {
          _output__.writeString(7, __v)
        }
      };
      {
        val __v = clientVersion
        if (!__v.isEmpty) {
          _output__.writeString(8, __v)
        }
      };
      {
        val __v = clientAddress
        if (!__v.isEmpty) {
          _output__.writeString(9, __v)
        }
      };
      http.foreach { __v =>
        val __m = __v
        _output__.writeTag(10, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      {
        val __v = durationNs
        if (__v != 0L) {
          _output__.writeUInt64(11, __v)
        }
      };
      root.foreach { __v =>
        val __m = __v
        _output__.writeTag(14, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      cachePolicy.foreach { __v =>
        val __m = __v
        _output__.writeTag(18, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      {
        val __v = signature
        if (!__v.isEmpty) {
          _output__.writeString(19, __v)
        }
      };
      {
        val __v = fullQueryCacheHit
        if (__v != false) {
          _output__.writeBool(20, __v)
        }
      };
      {
        val __v = persistedQueryHit
        if (__v != false) {
          _output__.writeBool(21, __v)
        }
      };
      {
        val __v = persistedQueryRegister
        if (__v != false) {
          _output__.writeBool(22, __v)
        }
      };
      {
        val __v = clientReferenceId
        if (!__v.isEmpty) {
          _output__.writeString(23, __v)
        }
      };
      {
        val __v = registeredOperation
        if (__v != false) {
          _output__.writeBool(24, __v)
        }
      };
      {
        val __v = forbiddenOperation
        if (__v != false) {
          _output__.writeBool(25, __v)
        }
      };
      queryPlan.foreach { __v =>
        val __m = __v
        _output__.writeTag(26, 2)
        _output__.writeUInt32NoTag(__m.serializedSize)
        __m.writeTo(_output__)
      };
      {
        val __v = unexecutedOperationBody
        if (!__v.isEmpty) {
          _output__.writeString(27, __v)
        }
      };
      {
        val __v = unexecutedOperationName
        if (!__v.isEmpty) {
          _output__.writeString(28, __v)
        }
      };
      unknownFields.writeTo(_output__)
    }
    def getStartTime: com.google.protobuf.timestamp.Timestamp = startTime.getOrElse(com.google.protobuf.timestamp.Timestamp.defaultInstance)
    def clearStartTime: Trace = copy(startTime = _root_.scala.None)
    def withStartTime(__v: com.google.protobuf.timestamp.Timestamp): Trace = copy(startTime = Option(__v))
    def getEndTime: com.google.protobuf.timestamp.Timestamp = endTime.getOrElse(com.google.protobuf.timestamp.Timestamp.defaultInstance)
    def clearEndTime: Trace = copy(endTime = _root_.scala.None)
    def withEndTime(__v: com.google.protobuf.timestamp.Timestamp): Trace = copy(endTime = Option(__v))
    def withDurationNs(__v: _root_.scala.Long): Trace = copy(durationNs = __v)
    def getRoot: mdg.engine.proto.reports.Trace.Node = root.getOrElse(mdg.engine.proto.reports.Trace.Node.defaultInstance)
    def clearRoot: Trace = copy(root = _root_.scala.None)
    def withRoot(__v: mdg.engine.proto.reports.Trace.Node): Trace = copy(root = Option(__v))
    def withSignature(__v: _root_.scala.Predef.String): Trace = copy(signature = __v)
    def withUnexecutedOperationBody(__v: _root_.scala.Predef.String): Trace = copy(unexecutedOperationBody = __v)
    def withUnexecutedOperationName(__v: _root_.scala.Predef.String): Trace = copy(unexecutedOperationName = __v)
    def getDetails: mdg.engine.proto.reports.Trace.Details = details.getOrElse(mdg.engine.proto.reports.Trace.Details.defaultInstance)
    def clearDetails: Trace = copy(details = _root_.scala.None)
    def withDetails(__v: mdg.engine.proto.reports.Trace.Details): Trace = copy(details = Option(__v))
    def withClientName(__v: _root_.scala.Predef.String): Trace = copy(clientName = __v)
    def withClientVersion(__v: _root_.scala.Predef.String): Trace = copy(clientVersion = __v)
    def withClientAddress(__v: _root_.scala.Predef.String): Trace = copy(clientAddress = __v)
    def withClientReferenceId(__v: _root_.scala.Predef.String): Trace = copy(clientReferenceId = __v)
    def getHttp: mdg.engine.proto.reports.Trace.HTTP = http.getOrElse(mdg.engine.proto.reports.Trace.HTTP.defaultInstance)
    def clearHttp: Trace = copy(http = _root_.scala.None)
    def withHttp(__v: mdg.engine.proto.reports.Trace.HTTP): Trace = copy(http = Option(__v))
    def getCachePolicy: mdg.engine.proto.reports.Trace.CachePolicy = cachePolicy.getOrElse(mdg.engine.proto.reports.Trace.CachePolicy.defaultInstance)
    def clearCachePolicy: Trace = copy(cachePolicy = _root_.scala.None)
    def withCachePolicy(__v: mdg.engine.proto.reports.Trace.CachePolicy): Trace = copy(cachePolicy = Option(__v))
    def getQueryPlan: mdg.engine.proto.reports.Trace.QueryPlanNode = queryPlan.getOrElse(mdg.engine.proto.reports.Trace.QueryPlanNode.defaultInstance)
    def clearQueryPlan: Trace = copy(queryPlan = _root_.scala.None)
    def withQueryPlan(__v: mdg.engine.proto.reports.Trace.QueryPlanNode): Trace = copy(queryPlan = Option(__v))
    def withFullQueryCacheHit(__v: _root_.scala.Boolean): Trace = copy(fullQueryCacheHit = __v)
    def withPersistedQueryHit(__v: _root_.scala.Boolean): Trace = copy(persistedQueryHit = __v)
    def withPersistedQueryRegister(__v: _root_.scala.Boolean): Trace = copy(persistedQueryRegister = __v)
    def withRegisteredOperation(__v: _root_.scala.Boolean): Trace = copy(registeredOperation = __v)
    def withForbiddenOperation(__v: _root_.scala.Boolean): Trace = copy(forbiddenOperation = __v)
    def withLegacySignatureNeedsResigning(__v: _root_.scala.Predef.String): Trace = copy(legacySignatureNeedsResigning = __v)
    def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
    def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
    def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
      (__fieldNumber: @_root_.scala.unchecked) match {
        case 4 => startTime.orNull
        case 3 => endTime.orNull
        case 11 => {
          val __t = durationNs
          if (__t != 0L) __t else null
        }
        case 14 => root.orNull
        case 19 => {
          val __t = signature
          if (__t != "") __t else null
        }
        case 27 => {
          val __t = unexecutedOperationBody
          if (__t != "") __t else null
        }
        case 28 => {
          val __t = unexecutedOperationName
          if (__t != "") __t else null
        }
        case 6 => details.orNull
        case 7 => {
          val __t = clientName
          if (__t != "") __t else null
        }
        case 8 => {
          val __t = clientVersion
          if (__t != "") __t else null
        }
        case 9 => {
          val __t = clientAddress
          if (__t != "") __t else null
        }
        case 23 => {
          val __t = clientReferenceId
          if (__t != "") __t else null
        }
        case 10 => http.orNull
        case 18 => cachePolicy.orNull
        case 26 => queryPlan.orNull
        case 20 => {
          val __t = fullQueryCacheHit
          if (__t != false) __t else null
        }
        case 21 => {
          val __t = persistedQueryHit
          if (__t != false) __t else null
        }
        case 22 => {
          val __t = persistedQueryRegister
          if (__t != false) __t else null
        }
        case 24 => {
          val __t = registeredOperation
          if (__t != false) __t else null
        }
        case 25 => {
          val __t = forbiddenOperation
          if (__t != false) __t else null
        }
        case 5 => {
          val __t = legacySignatureNeedsResigning
          if (__t != "") __t else null
        }
      }
    }
    def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
      _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
      (__field.number: @_root_.scala.unchecked) match {
        case 4 => startTime.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 3 => endTime.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 11 => _root_.scalapb.descriptors.PLong(durationNs)
        case 14 => root.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 19 => _root_.scalapb.descriptors.PString(signature)
        case 27 => _root_.scalapb.descriptors.PString(unexecutedOperationBody)
        case 28 => _root_.scalapb.descriptors.PString(unexecutedOperationName)
        case 6 => details.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 7 => _root_.scalapb.descriptors.PString(clientName)
        case 8 => _root_.scalapb.descriptors.PString(clientVersion)
        case 9 => _root_.scalapb.descriptors.PString(clientAddress)
        case 23 => _root_.scalapb.descriptors.PString(clientReferenceId)
        case 10 => http.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 18 => cachePolicy.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 26 => queryPlan.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        case 20 => _root_.scalapb.descriptors.PBoolean(fullQueryCacheHit)
        case 21 => _root_.scalapb.descriptors.PBoolean(persistedQueryHit)
        case 22 => _root_.scalapb.descriptors.PBoolean(persistedQueryRegister)
        case 24 => _root_.scalapb.descriptors.PBoolean(registeredOperation)
        case 25 => _root_.scalapb.descriptors.PBoolean(forbiddenOperation)
        case 5 => _root_.scalapb.descriptors.PString(legacySignatureNeedsResigning)
      }
    }
    def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
    def companion: mdg.engine.proto.reports.Trace.type = mdg.engine.proto.reports.Trace
    // @@protoc_insertion_point(GeneratedMessage[mdg.engine.proto.Trace])
}

object Trace extends scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace] {
  implicit def messageCompanion: scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace] = this
  def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): mdg.engine.proto.reports.Trace = {
    var __startTime: _root_.scala.Option[com.google.protobuf.timestamp.Timestamp] = _root_.scala.None
    var __endTime: _root_.scala.Option[com.google.protobuf.timestamp.Timestamp] = _root_.scala.None
    var __durationNs: _root_.scala.Long = 0L
    var __root: _root_.scala.Option[mdg.engine.proto.reports.Trace.Node] = _root_.scala.None
    var __signature: _root_.scala.Predef.String = ""
    var __unexecutedOperationBody: _root_.scala.Predef.String = ""
    var __unexecutedOperationName: _root_.scala.Predef.String = ""
    var __details: _root_.scala.Option[mdg.engine.proto.reports.Trace.Details] = _root_.scala.None
    var __clientName: _root_.scala.Predef.String = ""
    var __clientVersion: _root_.scala.Predef.String = ""
    var __clientAddress: _root_.scala.Predef.String = ""
    var __clientReferenceId: _root_.scala.Predef.String = ""
    var __http: _root_.scala.Option[mdg.engine.proto.reports.Trace.HTTP] = _root_.scala.None
    var __cachePolicy: _root_.scala.Option[mdg.engine.proto.reports.Trace.CachePolicy] = _root_.scala.None
    var __queryPlan: _root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode] = _root_.scala.None
    var __fullQueryCacheHit: _root_.scala.Boolean = false
    var __persistedQueryHit: _root_.scala.Boolean = false
    var __persistedQueryRegister: _root_.scala.Boolean = false
    var __registeredOperation: _root_.scala.Boolean = false
    var __forbiddenOperation: _root_.scala.Boolean = false
    var __legacySignatureNeedsResigning: _root_.scala.Predef.String = ""
    var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
    var _done__ = false
    while (!_done__) {
      val _tag__ = _input__.readTag()
      _tag__ match {
        case 0 => _done__ = true
        case 34 =>
          __startTime = _root_.scala.Option(__startTime.fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.timestamp.Timestamp](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 26 =>
          __endTime = _root_.scala.Option(__endTime.fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.timestamp.Timestamp](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 88 =>
          __durationNs = _input__.readUInt64()
        case 114 =>
          __root = _root_.scala.Option(__root.fold(_root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.Node](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 154 =>
          __signature = _input__.readStringRequireUtf8()
        case 218 =>
          __unexecutedOperationBody = _input__.readStringRequireUtf8()
        case 226 =>
          __unexecutedOperationName = _input__.readStringRequireUtf8()
        case 50 =>
          __details = _root_.scala.Option(__details.fold(_root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.Details](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 58 =>
          __clientName = _input__.readStringRequireUtf8()
        case 66 =>
          __clientVersion = _input__.readStringRequireUtf8()
        case 74 =>
          __clientAddress = _input__.readStringRequireUtf8()
        case 186 =>
          __clientReferenceId = _input__.readStringRequireUtf8()
        case 82 =>
          __http = _root_.scala.Option(__http.fold(_root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.HTTP](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 146 =>
          __cachePolicy = _root_.scala.Option(__cachePolicy.fold(_root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.CachePolicy](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 210 =>
          __queryPlan = _root_.scala.Option(__queryPlan.fold(_root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.QueryPlanNode](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
        case 160 =>
          __fullQueryCacheHit = _input__.readBool()
        case 168 =>
          __persistedQueryHit = _input__.readBool()
        case 176 =>
          __persistedQueryRegister = _input__.readBool()
        case 192 =>
          __registeredOperation = _input__.readBool()
        case 200 =>
          __forbiddenOperation = _input__.readBool()
        case 42 =>
          __legacySignatureNeedsResigning = _input__.readStringRequireUtf8()
        case tag =>
          if (_unknownFields__ == null) {
            _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
          }
          _unknownFields__.parseField(tag, _input__)
      }
    }
    mdg.engine.proto.reports.Trace(
        startTime = __startTime,
        endTime = __endTime,
        durationNs = __durationNs,
        root = __root,
        signature = __signature,
        unexecutedOperationBody = __unexecutedOperationBody,
        unexecutedOperationName = __unexecutedOperationName,
        details = __details,
        clientName = __clientName,
        clientVersion = __clientVersion,
        clientAddress = __clientAddress,
        clientReferenceId = __clientReferenceId,
        http = __http,
        cachePolicy = __cachePolicy,
        queryPlan = __queryPlan,
        fullQueryCacheHit = __fullQueryCacheHit,
        persistedQueryHit = __persistedQueryHit,
        persistedQueryRegister = __persistedQueryRegister,
        registeredOperation = __registeredOperation,
        forbiddenOperation = __forbiddenOperation,
        legacySignatureNeedsResigning = __legacySignatureNeedsResigning,
        unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
    )
  }
  implicit def messageReads: _root_.scalapb.descriptors.Reads[mdg.engine.proto.reports.Trace] = _root_.scalapb.descriptors.Reads{
    case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
      _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
      mdg.engine.proto.reports.Trace(
        startTime = __fieldsMap.get(scalaDescriptor.findFieldByNumber(4).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.timestamp.Timestamp]]),
        endTime = __fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.timestamp.Timestamp]]),
        durationNs = __fieldsMap.get(scalaDescriptor.findFieldByNumber(11).get).map(_.as[_root_.scala.Long]).getOrElse(0L),
        root = __fieldsMap.get(scalaDescriptor.findFieldByNumber(14).get).flatMap(_.as[_root_.scala.Option[mdg.engine.proto.reports.Trace.Node]]),
        signature = __fieldsMap.get(scalaDescriptor.findFieldByNumber(19).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
        unexecutedOperationBody = __fieldsMap.get(scalaDescriptor.findFieldByNumber(27).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
        unexecutedOperationName = __fieldsMap.get(scalaDescriptor.findFieldByNumber(28).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
        details = __fieldsMap.get(scalaDescriptor.findFieldByNumber(6).get).flatMap(_.as[_root_.scala.Option[mdg.engine.proto.reports.Trace.Details]]),
        clientName = __fieldsMap.get(scalaDescriptor.findFieldByNumber(7).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
        clientVersion = __fieldsMap.get(scalaDescriptor.findFieldByNumber(8).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
        clientAddress = __fieldsMap.get(scalaDescriptor.findFieldByNumber(9).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
        clientReferenceId = __fieldsMap.get(scalaDescriptor.findFieldByNumber(23).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
        http = __fieldsMap.get(scalaDescriptor.findFieldByNumber(10).get).flatMap(_.as[_root_.scala.Option[mdg.engine.proto.reports.Trace.HTTP]]),
        cachePolicy = __fieldsMap.get(scalaDescriptor.findFieldByNumber(18).get).flatMap(_.as[_root_.scala.Option[mdg.engine.proto.reports.Trace.CachePolicy]]),
        queryPlan = __fieldsMap.get(scalaDescriptor.findFieldByNumber(26).get).flatMap(_.as[_root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode]]),
        fullQueryCacheHit = __fieldsMap.get(scalaDescriptor.findFieldByNumber(20).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
        persistedQueryHit = __fieldsMap.get(scalaDescriptor.findFieldByNumber(21).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
        persistedQueryRegister = __fieldsMap.get(scalaDescriptor.findFieldByNumber(22).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
        registeredOperation = __fieldsMap.get(scalaDescriptor.findFieldByNumber(24).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
        forbiddenOperation = __fieldsMap.get(scalaDescriptor.findFieldByNumber(25).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
        legacySignatureNeedsResigning = __fieldsMap.get(scalaDescriptor.findFieldByNumber(5).get).map(_.as[_root_.scala.Predef.String]).getOrElse("")
      )
    case _ => throw new RuntimeException("Expected PMessage")
  }
  def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = ReportsProto.javaDescriptor.getMessageTypes().get(0)
  def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = ReportsProto.scalaDescriptor.messages(0)
  def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
    var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
    (__number: @_root_.scala.unchecked) match {
      case 4 => __out = com.google.protobuf.timestamp.Timestamp
      case 3 => __out = com.google.protobuf.timestamp.Timestamp
      case 14 => __out = mdg.engine.proto.reports.Trace.Node
      case 6 => __out = mdg.engine.proto.reports.Trace.Details
      case 10 => __out = mdg.engine.proto.reports.Trace.HTTP
      case 18 => __out = mdg.engine.proto.reports.Trace.CachePolicy
      case 26 => __out = mdg.engine.proto.reports.Trace.QueryPlanNode
    }
    __out
  }
  lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] =
    Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]](
      _root_.mdg.engine.proto.reports.Trace.CachePolicy,
      _root_.mdg.engine.proto.reports.Trace.Details,
      _root_.mdg.engine.proto.reports.Trace.Error,
      _root_.mdg.engine.proto.reports.Trace.HTTP,
      _root_.mdg.engine.proto.reports.Trace.Location,
      _root_.mdg.engine.proto.reports.Trace.Node,
      _root_.mdg.engine.proto.reports.Trace.QueryPlanNode
    )
  def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
  lazy val defaultInstance = mdg.engine.proto.reports.Trace(
    startTime = _root_.scala.None,
    endTime = _root_.scala.None,
    durationNs = 0L,
    root = _root_.scala.None,
    signature = "",
    unexecutedOperationBody = "",
    unexecutedOperationName = "",
    details = _root_.scala.None,
    clientName = "",
    clientVersion = "",
    clientAddress = "",
    clientReferenceId = "",
    http = _root_.scala.None,
    cachePolicy = _root_.scala.None,
    queryPlan = _root_.scala.None,
    fullQueryCacheHit = false,
    persistedQueryHit = false,
    persistedQueryRegister = false,
    registeredOperation = false,
    forbiddenOperation = false,
    legacySignatureNeedsResigning = ""
  )
  /** @param maxAgeNs
    *   use 0 for absent, -1 for 0
    */
  @SerialVersionUID(0L)
  final case class CachePolicy(
      scope: mdg.engine.proto.reports.Trace.CachePolicy.Scope = mdg.engine.proto.reports.Trace.CachePolicy.Scope.UNKNOWN,
      maxAgeNs: _root_.scala.Long = 0L,
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[CachePolicy] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        
        {
          val __value = scope.value
          if (__value != 0) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeEnumSize(1, __value)
          }
        };
        
        {
          val __value = maxAgeNs
          if (__value != 0L) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeInt64Size(2, __value)
          }
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        {
          val __v = scope.value
          if (__v != 0) {
            _output__.writeEnum(1, __v)
          }
        };
        {
          val __v = maxAgeNs
          if (__v != 0L) {
            _output__.writeInt64(2, __v)
          }
        };
        unknownFields.writeTo(_output__)
      }
      def withScope(__v: mdg.engine.proto.reports.Trace.CachePolicy.Scope): CachePolicy = copy(scope = __v)
      def withMaxAgeNs(__v: _root_.scala.Long): CachePolicy = copy(maxAgeNs = __v)
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => {
            val __t = scope.javaValueDescriptor
            if (__t.getNumber() != 0) __t else null
          }
          case 2 => {
            val __t = maxAgeNs
            if (__t != 0L) __t else null
          }
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => _root_.scalapb.descriptors.PEnum(scope.scalaValueDescriptor)
          case 2 => _root_.scalapb.descriptors.PLong(maxAgeNs)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: mdg.engine.proto.reports.Trace.CachePolicy.type = mdg.engine.proto.reports.Trace.CachePolicy
      // @@protoc_insertion_point(GeneratedMessage[mdg.engine.proto.Trace.CachePolicy])
  }
  
  object CachePolicy extends scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.CachePolicy] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.CachePolicy] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): mdg.engine.proto.reports.Trace.CachePolicy = {
      var __scope: mdg.engine.proto.reports.Trace.CachePolicy.Scope = mdg.engine.proto.reports.Trace.CachePolicy.Scope.UNKNOWN
      var __maxAgeNs: _root_.scala.Long = 0L
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 8 =>
            __scope = mdg.engine.proto.reports.Trace.CachePolicy.Scope.fromValue(_input__.readEnum())
          case 16 =>
            __maxAgeNs = _input__.readInt64()
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      mdg.engine.proto.reports.Trace.CachePolicy(
          scope = __scope,
          maxAgeNs = __maxAgeNs,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[mdg.engine.proto.reports.Trace.CachePolicy] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        mdg.engine.proto.reports.Trace.CachePolicy(
          scope = mdg.engine.proto.reports.Trace.CachePolicy.Scope.fromValue(__fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scalapb.descriptors.EnumValueDescriptor]).getOrElse(mdg.engine.proto.reports.Trace.CachePolicy.Scope.UNKNOWN.scalaValueDescriptor).number),
          maxAgeNs = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).map(_.as[_root_.scala.Long]).getOrElse(0L)
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = mdg.engine.proto.reports.Trace.javaDescriptor.getNestedTypes().get(0)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = mdg.engine.proto.reports.Trace.scalaDescriptor.nestedMessages(0)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = {
      (__fieldNumber: @_root_.scala.unchecked) match {
        case 1 => mdg.engine.proto.reports.Trace.CachePolicy.Scope
      }
    }
    lazy val defaultInstance = mdg.engine.proto.reports.Trace.CachePolicy(
      scope = mdg.engine.proto.reports.Trace.CachePolicy.Scope.UNKNOWN,
      maxAgeNs = 0L
    )
    sealed abstract class Scope(val value: _root_.scala.Int) extends _root_.scalapb.GeneratedEnum {
      type EnumType = mdg.engine.proto.reports.Trace.CachePolicy.Scope
      type RecognizedType = mdg.engine.proto.reports.Trace.CachePolicy.Scope.Recognized
      def isUnknown: _root_.scala.Boolean = false
      def isPublic: _root_.scala.Boolean = false
      def isPrivate: _root_.scala.Boolean = false
      def companion: _root_.scalapb.GeneratedEnumCompanion[Scope] = mdg.engine.proto.reports.Trace.CachePolicy.Scope
      final def asRecognized: _root_.scala.Option[mdg.engine.proto.reports.Trace.CachePolicy.Scope.Recognized] = if (isUnrecognized) _root_.scala.None else _root_.scala.Some(this.asInstanceOf[mdg.engine.proto.reports.Trace.CachePolicy.Scope.Recognized])
    }
    
    object Scope extends _root_.scalapb.GeneratedEnumCompanion[Scope] {
      sealed trait Recognized extends Scope
      implicit def enumCompanion: _root_.scalapb.GeneratedEnumCompanion[Scope] = this
      
      @SerialVersionUID(0L)
      case object UNKNOWN extends Scope(0) with Scope.Recognized {
        val index = 0
        val name = "UNKNOWN"
        override def isUnknown: _root_.scala.Boolean = true
      }
      
      @SerialVersionUID(0L)
      case object PUBLIC extends Scope(1) with Scope.Recognized {
        val index = 1
        val name = "PUBLIC"
        override def isPublic: _root_.scala.Boolean = true
      }
      
      @SerialVersionUID(0L)
      case object PRIVATE extends Scope(2) with Scope.Recognized {
        val index = 2
        val name = "PRIVATE"
        override def isPrivate: _root_.scala.Boolean = true
      }
      
      @SerialVersionUID(0L)
      final case class Unrecognized(unrecognizedValue: _root_.scala.Int) extends Scope(unrecognizedValue) with _root_.scalapb.UnrecognizedEnum
      lazy val values: scala.collection.immutable.Seq[ValueType] = scala.collection.immutable.Seq(UNKNOWN, PUBLIC, PRIVATE)
      def fromValue(__value: _root_.scala.Int): Scope = __value match {
        case 0 => UNKNOWN
        case 1 => PUBLIC
        case 2 => PRIVATE
        case __other => Unrecognized(__other)
      }
      def javaDescriptor: _root_.com.google.protobuf.Descriptors.EnumDescriptor = mdg.engine.proto.reports.Trace.CachePolicy.javaDescriptor.getEnumTypes().get(0)
      def scalaDescriptor: _root_.scalapb.descriptors.EnumDescriptor = mdg.engine.proto.reports.Trace.CachePolicy.scalaDescriptor.enums(0)
    }
    implicit class CachePolicyLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.CachePolicy]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, mdg.engine.proto.reports.Trace.CachePolicy](_l) {
      def scope: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.CachePolicy.Scope] = field(_.scope)((c_, f_) => c_.copy(scope = f_))
      def maxAgeNs: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Long] = field(_.maxAgeNs)((c_, f_) => c_.copy(maxAgeNs = f_))
    }
    final val SCOPE_FIELD_NUMBER = 1
    final val MAX_AGE_NS_FIELD_NUMBER = 2
    def of(
      scope: mdg.engine.proto.reports.Trace.CachePolicy.Scope,
      maxAgeNs: _root_.scala.Long
    ): _root_.mdg.engine.proto.reports.Trace.CachePolicy = _root_.mdg.engine.proto.reports.Trace.CachePolicy(
      scope,
      maxAgeNs
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[mdg.engine.proto.Trace.CachePolicy])
  }
  
  /** @param variablesJson
    *   The variables associated with this query (unless the reporting agent is
    *   configured to keep them all private). Values are JSON: ie, strings are
    *   enclosed in double quotes, etc.  The value of a private variable is
    *   the empty string.
    * @param deprecatedVariables
    *   Deprecated. Engineproxy did not encode variable values as JSON, so you
    *   couldn't tell numbers from numeric strings. Send variables_json instead.
    * @param operationName
    *   This is deprecated and only used for legacy applications
    *   don't include this in traces inside a FullTracesReport; the operation
    *   name for these traces comes from the key of the traces_per_query map.
    */
  @SerialVersionUID(0L)
  final case class Details(
      variablesJson: _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, _root_.scala.Predef.String] = _root_.scala.collection.immutable.Map.empty,
      deprecatedVariables: _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, _root_.com.google.protobuf.ByteString] = _root_.scala.collection.immutable.Map.empty,
      operationName: _root_.scala.Predef.String = "",
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[Details] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        variablesJson.foreach { __item =>
          val __value = mdg.engine.proto.reports.Trace.Details._typemapper_variablesJson.toBase(__item)
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        }
        deprecatedVariables.foreach { __item =>
          val __value = mdg.engine.proto.reports.Trace.Details._typemapper_deprecatedVariables.toBase(__item)
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        }
        
        {
          val __value = operationName
          if (!__value.isEmpty) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(3, __value)
          }
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        deprecatedVariables.foreach { __v =>
          val __m = mdg.engine.proto.reports.Trace.Details._typemapper_deprecatedVariables.toBase(__v)
          _output__.writeTag(1, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        {
          val __v = operationName
          if (!__v.isEmpty) {
            _output__.writeString(3, __v)
          }
        };
        variablesJson.foreach { __v =>
          val __m = mdg.engine.proto.reports.Trace.Details._typemapper_variablesJson.toBase(__v)
          _output__.writeTag(4, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        unknownFields.writeTo(_output__)
      }
      def clearVariablesJson = copy(variablesJson = _root_.scala.collection.immutable.Map.empty)
      def addVariablesJson(__vs: (_root_.scala.Predef.String, _root_.scala.Predef.String) *): Details = addAllVariablesJson(__vs)
      def addAllVariablesJson(__vs: Iterable[(_root_.scala.Predef.String, _root_.scala.Predef.String)]): Details = copy(variablesJson = variablesJson ++ __vs)
      def withVariablesJson(__v: _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, _root_.scala.Predef.String]): Details = copy(variablesJson = __v)
      def clearDeprecatedVariables = copy(deprecatedVariables = _root_.scala.collection.immutable.Map.empty)
      def addDeprecatedVariables(__vs: (_root_.scala.Predef.String, _root_.com.google.protobuf.ByteString) *): Details = addAllDeprecatedVariables(__vs)
      def addAllDeprecatedVariables(__vs: Iterable[(_root_.scala.Predef.String, _root_.com.google.protobuf.ByteString)]): Details = copy(deprecatedVariables = deprecatedVariables ++ __vs)
      def withDeprecatedVariables(__v: _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, _root_.com.google.protobuf.ByteString]): Details = copy(deprecatedVariables = __v)
      def withOperationName(__v: _root_.scala.Predef.String): Details = copy(operationName = __v)
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 4 => variablesJson.iterator.map(mdg.engine.proto.reports.Trace.Details._typemapper_variablesJson.toBase(_)).toSeq
          case 1 => deprecatedVariables.iterator.map(mdg.engine.proto.reports.Trace.Details._typemapper_deprecatedVariables.toBase(_)).toSeq
          case 3 => {
            val __t = operationName
            if (__t != "") __t else null
          }
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 4 => _root_.scalapb.descriptors.PRepeated(variablesJson.iterator.map(mdg.engine.proto.reports.Trace.Details._typemapper_variablesJson.toBase(_).toPMessage).toVector)
          case 1 => _root_.scalapb.descriptors.PRepeated(deprecatedVariables.iterator.map(mdg.engine.proto.reports.Trace.Details._typemapper_deprecatedVariables.toBase(_).toPMessage).toVector)
          case 3 => _root_.scalapb.descriptors.PString(operationName)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: mdg.engine.proto.reports.Trace.Details.type = mdg.engine.proto.reports.Trace.Details
      // @@protoc_insertion_point(GeneratedMessage[mdg.engine.proto.Trace.Details])
  }
  
  object Details extends scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.Details] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.Details] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): mdg.engine.proto.reports.Trace.Details = {
      val __variablesJson: _root_.scala.collection.mutable.Builder[(_root_.scala.Predef.String, _root_.scala.Predef.String), _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, _root_.scala.Predef.String]] = _root_.scala.collection.immutable.Map.newBuilder[_root_.scala.Predef.String, _root_.scala.Predef.String]
      val __deprecatedVariables: _root_.scala.collection.mutable.Builder[(_root_.scala.Predef.String, _root_.com.google.protobuf.ByteString), _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, _root_.com.google.protobuf.ByteString]] = _root_.scala.collection.immutable.Map.newBuilder[_root_.scala.Predef.String, _root_.com.google.protobuf.ByteString]
      var __operationName: _root_.scala.Predef.String = ""
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 34 =>
            __variablesJson += mdg.engine.proto.reports.Trace.Details._typemapper_variablesJson.toCustom(_root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry](_input__))
          case 10 =>
            __deprecatedVariables += mdg.engine.proto.reports.Trace.Details._typemapper_deprecatedVariables.toCustom(_root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry](_input__))
          case 26 =>
            __operationName = _input__.readStringRequireUtf8()
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      mdg.engine.proto.reports.Trace.Details(
          variablesJson = __variablesJson.result(),
          deprecatedVariables = __deprecatedVariables.result(),
          operationName = __operationName,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[mdg.engine.proto.reports.Trace.Details] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        mdg.engine.proto.reports.Trace.Details(
          variablesJson = __fieldsMap.get(scalaDescriptor.findFieldByNumber(4).get).map(_.as[_root_.scala.Seq[mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry]]).getOrElse(_root_.scala.Seq.empty).iterator.map(mdg.engine.proto.reports.Trace.Details._typemapper_variablesJson.toCustom(_)).toMap,
          deprecatedVariables = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Seq[mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry]]).getOrElse(_root_.scala.Seq.empty).iterator.map(mdg.engine.proto.reports.Trace.Details._typemapper_deprecatedVariables.toCustom(_)).toMap,
          operationName = __fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).map(_.as[_root_.scala.Predef.String]).getOrElse("")
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = mdg.engine.proto.reports.Trace.javaDescriptor.getNestedTypes().get(1)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = mdg.engine.proto.reports.Trace.scalaDescriptor.nestedMessages(1)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 4 => __out = mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry
        case 1 => __out = mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] =
      Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]](
        _root_.mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry,
        _root_.mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry
      )
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
    lazy val defaultInstance = mdg.engine.proto.reports.Trace.Details(
      variablesJson = _root_.scala.collection.immutable.Map.empty,
      deprecatedVariables = _root_.scala.collection.immutable.Map.empty,
      operationName = ""
    )
    @SerialVersionUID(0L)
    final case class VariablesJsonEntry(
        key: _root_.scala.Predef.String = "",
        value: _root_.scala.Predef.String = "",
        unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
        ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[VariablesJsonEntry] {
        @transient
        private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
        private[this] def __computeSerializedSize(): _root_.scala.Int = {
          var __size = 0
          
          {
            val __value = key
            if (!__value.isEmpty) {
              __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value)
            }
          };
          
          {
            val __value = value
            if (!__value.isEmpty) {
              __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(2, __value)
            }
          };
          __size += unknownFields.serializedSize
          __size
        }
        override def serializedSize: _root_.scala.Int = {
          var __size = __serializedSizeMemoized
          if (__size == 0) {
            __size = __computeSerializedSize() + 1
            __serializedSizeMemoized = __size
          }
          __size - 1
          
        }
        def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
          {
            val __v = key
            if (!__v.isEmpty) {
              _output__.writeString(1, __v)
            }
          };
          {
            val __v = value
            if (!__v.isEmpty) {
              _output__.writeString(2, __v)
            }
          };
          unknownFields.writeTo(_output__)
        }
        def withKey(__v: _root_.scala.Predef.String): VariablesJsonEntry = copy(key = __v)
        def withValue(__v: _root_.scala.Predef.String): VariablesJsonEntry = copy(value = __v)
        def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
        def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
        def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
          (__fieldNumber: @_root_.scala.unchecked) match {
            case 1 => {
              val __t = key
              if (__t != "") __t else null
            }
            case 2 => {
              val __t = value
              if (__t != "") __t else null
            }
          }
        }
        def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
          _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
          (__field.number: @_root_.scala.unchecked) match {
            case 1 => _root_.scalapb.descriptors.PString(key)
            case 2 => _root_.scalapb.descriptors.PString(value)
          }
        }
        def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
        def companion: mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry.type = mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry
        // @@protoc_insertion_point(GeneratedMessage[mdg.engine.proto.Trace.Details.VariablesJsonEntry])
    }
    
    object VariablesJsonEntry extends scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry] {
      implicit def messageCompanion: scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry] = this
      def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry = {
        var __key: _root_.scala.Predef.String = ""
        var __value: _root_.scala.Predef.String = ""
        var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
        var _done__ = false
        while (!_done__) {
          val _tag__ = _input__.readTag()
          _tag__ match {
            case 0 => _done__ = true
            case 10 =>
              __key = _input__.readStringRequireUtf8()
            case 18 =>
              __value = _input__.readStringRequireUtf8()
            case tag =>
              if (_unknownFields__ == null) {
                _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
              }
              _unknownFields__.parseField(tag, _input__)
          }
        }
        mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry(
            key = __key,
            value = __value,
            unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
        )
      }
      implicit def messageReads: _root_.scalapb.descriptors.Reads[mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry] = _root_.scalapb.descriptors.Reads{
        case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
          _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
          mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry(
            key = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
            value = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).map(_.as[_root_.scala.Predef.String]).getOrElse("")
          )
        case _ => throw new RuntimeException("Expected PMessage")
      }
      def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = mdg.engine.proto.reports.Trace.Details.javaDescriptor.getNestedTypes().get(0)
      def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = mdg.engine.proto.reports.Trace.Details.scalaDescriptor.nestedMessages(0)
      def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
      lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
      def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
      lazy val defaultInstance = mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry(
        key = "",
        value = ""
      )
      implicit class VariablesJsonEntryLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry](_l) {
        def key: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.key)((c_, f_) => c_.copy(key = f_))
        def value: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.value)((c_, f_) => c_.copy(value = f_))
      }
      final val KEY_FIELD_NUMBER = 1
      final val VALUE_FIELD_NUMBER = 2
      @transient
      implicit val keyValueMapper: _root_.scalapb.TypeMapper[mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry, (_root_.scala.Predef.String, _root_.scala.Predef.String)] =
        _root_.scalapb.TypeMapper[mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry, (_root_.scala.Predef.String, _root_.scala.Predef.String)](__m => (__m.key, __m.value))(__p => mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry(__p._1, __p._2))
      def of(
        key: _root_.scala.Predef.String,
        value: _root_.scala.Predef.String
      ): _root_.mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry = _root_.mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry(
        key,
        value
      )
      // @@protoc_insertion_point(GeneratedMessageCompanion[mdg.engine.proto.Trace.Details.VariablesJsonEntry])
    }
    
    @SerialVersionUID(0L)
    final case class DeprecatedVariablesEntry(
        key: _root_.scala.Predef.String = "",
        value: _root_.com.google.protobuf.ByteString = _root_.com.google.protobuf.ByteString.EMPTY,
        unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
        ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[DeprecatedVariablesEntry] {
        @transient
        private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
        private[this] def __computeSerializedSize(): _root_.scala.Int = {
          var __size = 0
          
          {
            val __value = key
            if (!__value.isEmpty) {
              __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value)
            }
          };
          
          {
            val __value = value
            if (!__value.isEmpty) {
              __size += _root_.com.google.protobuf.CodedOutputStream.computeBytesSize(2, __value)
            }
          };
          __size += unknownFields.serializedSize
          __size
        }
        override def serializedSize: _root_.scala.Int = {
          var __size = __serializedSizeMemoized
          if (__size == 0) {
            __size = __computeSerializedSize() + 1
            __serializedSizeMemoized = __size
          }
          __size - 1
          
        }
        def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
          {
            val __v = key
            if (!__v.isEmpty) {
              _output__.writeString(1, __v)
            }
          };
          {
            val __v = value
            if (!__v.isEmpty) {
              _output__.writeBytes(2, __v)
            }
          };
          unknownFields.writeTo(_output__)
        }
        def withKey(__v: _root_.scala.Predef.String): DeprecatedVariablesEntry = copy(key = __v)
        def withValue(__v: _root_.com.google.protobuf.ByteString): DeprecatedVariablesEntry = copy(value = __v)
        def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
        def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
        def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
          (__fieldNumber: @_root_.scala.unchecked) match {
            case 1 => {
              val __t = key
              if (__t != "") __t else null
            }
            case 2 => {
              val __t = value
              if (__t != _root_.com.google.protobuf.ByteString.EMPTY) __t else null
            }
          }
        }
        def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
          _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
          (__field.number: @_root_.scala.unchecked) match {
            case 1 => _root_.scalapb.descriptors.PString(key)
            case 2 => _root_.scalapb.descriptors.PByteString(value)
          }
        }
        def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
        def companion: mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry.type = mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry
        // @@protoc_insertion_point(GeneratedMessage[mdg.engine.proto.Trace.Details.DeprecatedVariablesEntry])
    }
    
    object DeprecatedVariablesEntry extends scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry] {
      implicit def messageCompanion: scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry] = this
      def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry = {
        var __key: _root_.scala.Predef.String = ""
        var __value: _root_.com.google.protobuf.ByteString = _root_.com.google.protobuf.ByteString.EMPTY
        var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
        var _done__ = false
        while (!_done__) {
          val _tag__ = _input__.readTag()
          _tag__ match {
            case 0 => _done__ = true
            case 10 =>
              __key = _input__.readStringRequireUtf8()
            case 18 =>
              __value = _input__.readBytes()
            case tag =>
              if (_unknownFields__ == null) {
                _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
              }
              _unknownFields__.parseField(tag, _input__)
          }
        }
        mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry(
            key = __key,
            value = __value,
            unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
        )
      }
      implicit def messageReads: _root_.scalapb.descriptors.Reads[mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry] = _root_.scalapb.descriptors.Reads{
        case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
          _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
          mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry(
            key = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
            value = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).map(_.as[_root_.com.google.protobuf.ByteString]).getOrElse(_root_.com.google.protobuf.ByteString.EMPTY)
          )
        case _ => throw new RuntimeException("Expected PMessage")
      }
      def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = mdg.engine.proto.reports.Trace.Details.javaDescriptor.getNestedTypes().get(1)
      def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = mdg.engine.proto.reports.Trace.Details.scalaDescriptor.nestedMessages(1)
      def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
      lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
      def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
      lazy val defaultInstance = mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry(
        key = "",
        value = _root_.com.google.protobuf.ByteString.EMPTY
      )
      implicit class DeprecatedVariablesEntryLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry](_l) {
        def key: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.key)((c_, f_) => c_.copy(key = f_))
        def value: _root_.scalapb.lenses.Lens[UpperPB, _root_.com.google.protobuf.ByteString] = field(_.value)((c_, f_) => c_.copy(value = f_))
      }
      final val KEY_FIELD_NUMBER = 1
      final val VALUE_FIELD_NUMBER = 2
      @transient
      implicit val keyValueMapper: _root_.scalapb.TypeMapper[mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry, (_root_.scala.Predef.String, _root_.com.google.protobuf.ByteString)] =
        _root_.scalapb.TypeMapper[mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry, (_root_.scala.Predef.String, _root_.com.google.protobuf.ByteString)](__m => (__m.key, __m.value))(__p => mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry(__p._1, __p._2))
      def of(
        key: _root_.scala.Predef.String,
        value: _root_.com.google.protobuf.ByteString
      ): _root_.mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry = _root_.mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry(
        key,
        value
      )
      // @@protoc_insertion_point(GeneratedMessageCompanion[mdg.engine.proto.Trace.Details.DeprecatedVariablesEntry])
    }
    
    implicit class DetailsLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.Details]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, mdg.engine.proto.reports.Trace.Details](_l) {
      def variablesJson: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, _root_.scala.Predef.String]] = field(_.variablesJson)((c_, f_) => c_.copy(variablesJson = f_))
      def deprecatedVariables: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, _root_.com.google.protobuf.ByteString]] = field(_.deprecatedVariables)((c_, f_) => c_.copy(deprecatedVariables = f_))
      def operationName: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.operationName)((c_, f_) => c_.copy(operationName = f_))
    }
    final val VARIABLES_JSON_FIELD_NUMBER = 4
    final val DEPRECATED_VARIABLES_FIELD_NUMBER = 1
    final val OPERATION_NAME_FIELD_NUMBER = 3
    @transient
    private[reports] val _typemapper_variablesJson: _root_.scalapb.TypeMapper[mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry, (_root_.scala.Predef.String, _root_.scala.Predef.String)] = implicitly[_root_.scalapb.TypeMapper[mdg.engine.proto.reports.Trace.Details.VariablesJsonEntry, (_root_.scala.Predef.String, _root_.scala.Predef.String)]]
    @transient
    private[reports] val _typemapper_deprecatedVariables: _root_.scalapb.TypeMapper[mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry, (_root_.scala.Predef.String, _root_.com.google.protobuf.ByteString)] = implicitly[_root_.scalapb.TypeMapper[mdg.engine.proto.reports.Trace.Details.DeprecatedVariablesEntry, (_root_.scala.Predef.String, _root_.com.google.protobuf.ByteString)]]
    def of(
      variablesJson: _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, _root_.scala.Predef.String],
      deprecatedVariables: _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, _root_.com.google.protobuf.ByteString],
      operationName: _root_.scala.Predef.String
    ): _root_.mdg.engine.proto.reports.Trace.Details = _root_.mdg.engine.proto.reports.Trace.Details(
      variablesJson,
      deprecatedVariables,
      operationName
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[mdg.engine.proto.Trace.Details])
  }
  
  /** @param message
    *   required
    */
  @SerialVersionUID(0L)
  final case class Error(
      message: _root_.scala.Predef.String = "",
      location: _root_.scala.Seq[mdg.engine.proto.reports.Trace.Location] = _root_.scala.Seq.empty,
      timeNs: _root_.scala.Long = 0L,
      json: _root_.scala.Predef.String = "",
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[Error] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        
        {
          val __value = message
          if (!__value.isEmpty) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value)
          }
        };
        location.foreach { __item =>
          val __value = __item
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        }
        
        {
          val __value = timeNs
          if (__value != 0L) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeUInt64Size(3, __value)
          }
        };
        
        {
          val __value = json
          if (!__value.isEmpty) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(4, __value)
          }
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        {
          val __v = message
          if (!__v.isEmpty) {
            _output__.writeString(1, __v)
          }
        };
        location.foreach { __v =>
          val __m = __v
          _output__.writeTag(2, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        {
          val __v = timeNs
          if (__v != 0L) {
            _output__.writeUInt64(3, __v)
          }
        };
        {
          val __v = json
          if (!__v.isEmpty) {
            _output__.writeString(4, __v)
          }
        };
        unknownFields.writeTo(_output__)
      }
      def withMessage(__v: _root_.scala.Predef.String): Error = copy(message = __v)
      def clearLocation = copy(location = _root_.scala.Seq.empty)
      def addLocation(__vs: mdg.engine.proto.reports.Trace.Location *): Error = addAllLocation(__vs)
      def addAllLocation(__vs: Iterable[mdg.engine.proto.reports.Trace.Location]): Error = copy(location = location ++ __vs)
      def withLocation(__v: _root_.scala.Seq[mdg.engine.proto.reports.Trace.Location]): Error = copy(location = __v)
      def withTimeNs(__v: _root_.scala.Long): Error = copy(timeNs = __v)
      def withJson(__v: _root_.scala.Predef.String): Error = copy(json = __v)
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => {
            val __t = message
            if (__t != "") __t else null
          }
          case 2 => location
          case 3 => {
            val __t = timeNs
            if (__t != 0L) __t else null
          }
          case 4 => {
            val __t = json
            if (__t != "") __t else null
          }
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => _root_.scalapb.descriptors.PString(message)
          case 2 => _root_.scalapb.descriptors.PRepeated(location.iterator.map(_.toPMessage).toVector)
          case 3 => _root_.scalapb.descriptors.PLong(timeNs)
          case 4 => _root_.scalapb.descriptors.PString(json)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: mdg.engine.proto.reports.Trace.Error.type = mdg.engine.proto.reports.Trace.Error
      // @@protoc_insertion_point(GeneratedMessage[mdg.engine.proto.Trace.Error])
  }
  
  object Error extends scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.Error] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.Error] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): mdg.engine.proto.reports.Trace.Error = {
      var __message: _root_.scala.Predef.String = ""
      val __location: _root_.scala.collection.immutable.VectorBuilder[mdg.engine.proto.reports.Trace.Location] = new _root_.scala.collection.immutable.VectorBuilder[mdg.engine.proto.reports.Trace.Location]
      var __timeNs: _root_.scala.Long = 0L
      var __json: _root_.scala.Predef.String = ""
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 10 =>
            __message = _input__.readStringRequireUtf8()
          case 18 =>
            __location += _root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.Location](_input__)
          case 24 =>
            __timeNs = _input__.readUInt64()
          case 34 =>
            __json = _input__.readStringRequireUtf8()
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      mdg.engine.proto.reports.Trace.Error(
          message = __message,
          location = __location.result(),
          timeNs = __timeNs,
          json = __json,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[mdg.engine.proto.reports.Trace.Error] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        mdg.engine.proto.reports.Trace.Error(
          message = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
          location = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).map(_.as[_root_.scala.Seq[mdg.engine.proto.reports.Trace.Location]]).getOrElse(_root_.scala.Seq.empty),
          timeNs = __fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).map(_.as[_root_.scala.Long]).getOrElse(0L),
          json = __fieldsMap.get(scalaDescriptor.findFieldByNumber(4).get).map(_.as[_root_.scala.Predef.String]).getOrElse("")
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = mdg.engine.proto.reports.Trace.javaDescriptor.getNestedTypes().get(2)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = mdg.engine.proto.reports.Trace.scalaDescriptor.nestedMessages(2)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 2 => __out = mdg.engine.proto.reports.Trace.Location
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
    lazy val defaultInstance = mdg.engine.proto.reports.Trace.Error(
      message = "",
      location = _root_.scala.Seq.empty,
      timeNs = 0L,
      json = ""
    )
    implicit class ErrorLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.Error]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, mdg.engine.proto.reports.Trace.Error](_l) {
      def message: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.message)((c_, f_) => c_.copy(message = f_))
      def location: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[mdg.engine.proto.reports.Trace.Location]] = field(_.location)((c_, f_) => c_.copy(location = f_))
      def timeNs: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Long] = field(_.timeNs)((c_, f_) => c_.copy(timeNs = f_))
      def json: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.json)((c_, f_) => c_.copy(json = f_))
    }
    final val MESSAGE_FIELD_NUMBER = 1
    final val LOCATION_FIELD_NUMBER = 2
    final val TIME_NS_FIELD_NUMBER = 3
    final val JSON_FIELD_NUMBER = 4
    def of(
      message: _root_.scala.Predef.String,
      location: _root_.scala.Seq[mdg.engine.proto.reports.Trace.Location],
      timeNs: _root_.scala.Long,
      json: _root_.scala.Predef.String
    ): _root_.mdg.engine.proto.reports.Trace.Error = _root_.mdg.engine.proto.reports.Trace.Error(
      message,
      location,
      timeNs,
      json
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[mdg.engine.proto.Trace.Error])
  }
  
  /** @param requestHeaders
    *   Should exclude manual blacklist ("Auth" by default)
    * @param secure
    *   TLS was used
    * @param protocol
    *   by convention "HTTP/1.0", "HTTP/1.1", "HTTP/2" or "h2"
    */
  @SerialVersionUID(0L)
  final case class HTTP(
      method: mdg.engine.proto.reports.Trace.HTTP.Method = mdg.engine.proto.reports.Trace.HTTP.Method.UNKNOWN,
      host: _root_.scala.Predef.String = "",
      path: _root_.scala.Predef.String = "",
      requestHeaders: _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values] = _root_.scala.collection.immutable.Map.empty,
      responseHeaders: _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values] = _root_.scala.collection.immutable.Map.empty,
      statusCode: _root_.scala.Int = 0,
      secure: _root_.scala.Boolean = false,
      protocol: _root_.scala.Predef.String = "",
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[HTTP] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        
        {
          val __value = method.value
          if (__value != 0) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeEnumSize(1, __value)
          }
        };
        
        {
          val __value = host
          if (!__value.isEmpty) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(2, __value)
          }
        };
        
        {
          val __value = path
          if (!__value.isEmpty) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(3, __value)
          }
        };
        requestHeaders.foreach { __item =>
          val __value = mdg.engine.proto.reports.Trace.HTTP._typemapper_requestHeaders.toBase(__item)
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        }
        responseHeaders.foreach { __item =>
          val __value = mdg.engine.proto.reports.Trace.HTTP._typemapper_responseHeaders.toBase(__item)
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        }
        
        {
          val __value = statusCode
          if (__value != 0) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeUInt32Size(6, __value)
          }
        };
        
        {
          val __value = secure
          if (__value != false) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(8, __value)
          }
        };
        
        {
          val __value = protocol
          if (!__value.isEmpty) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(9, __value)
          }
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        {
          val __v = method.value
          if (__v != 0) {
            _output__.writeEnum(1, __v)
          }
        };
        {
          val __v = host
          if (!__v.isEmpty) {
            _output__.writeString(2, __v)
          }
        };
        {
          val __v = path
          if (!__v.isEmpty) {
            _output__.writeString(3, __v)
          }
        };
        requestHeaders.foreach { __v =>
          val __m = mdg.engine.proto.reports.Trace.HTTP._typemapper_requestHeaders.toBase(__v)
          _output__.writeTag(4, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        responseHeaders.foreach { __v =>
          val __m = mdg.engine.proto.reports.Trace.HTTP._typemapper_responseHeaders.toBase(__v)
          _output__.writeTag(5, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        {
          val __v = statusCode
          if (__v != 0) {
            _output__.writeUInt32(6, __v)
          }
        };
        {
          val __v = secure
          if (__v != false) {
            _output__.writeBool(8, __v)
          }
        };
        {
          val __v = protocol
          if (!__v.isEmpty) {
            _output__.writeString(9, __v)
          }
        };
        unknownFields.writeTo(_output__)
      }
      def withMethod(__v: mdg.engine.proto.reports.Trace.HTTP.Method): HTTP = copy(method = __v)
      def withHost(__v: _root_.scala.Predef.String): HTTP = copy(host = __v)
      def withPath(__v: _root_.scala.Predef.String): HTTP = copy(path = __v)
      def clearRequestHeaders = copy(requestHeaders = _root_.scala.collection.immutable.Map.empty)
      def addRequestHeaders(__vs: (_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values) *): HTTP = addAllRequestHeaders(__vs)
      def addAllRequestHeaders(__vs: Iterable[(_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values)]): HTTP = copy(requestHeaders = requestHeaders ++ __vs)
      def withRequestHeaders(__v: _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values]): HTTP = copy(requestHeaders = __v)
      def clearResponseHeaders = copy(responseHeaders = _root_.scala.collection.immutable.Map.empty)
      def addResponseHeaders(__vs: (_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values) *): HTTP = addAllResponseHeaders(__vs)
      def addAllResponseHeaders(__vs: Iterable[(_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values)]): HTTP = copy(responseHeaders = responseHeaders ++ __vs)
      def withResponseHeaders(__v: _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values]): HTTP = copy(responseHeaders = __v)
      def withStatusCode(__v: _root_.scala.Int): HTTP = copy(statusCode = __v)
      def withSecure(__v: _root_.scala.Boolean): HTTP = copy(secure = __v)
      def withProtocol(__v: _root_.scala.Predef.String): HTTP = copy(protocol = __v)
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => {
            val __t = method.javaValueDescriptor
            if (__t.getNumber() != 0) __t else null
          }
          case 2 => {
            val __t = host
            if (__t != "") __t else null
          }
          case 3 => {
            val __t = path
            if (__t != "") __t else null
          }
          case 4 => requestHeaders.iterator.map(mdg.engine.proto.reports.Trace.HTTP._typemapper_requestHeaders.toBase(_)).toSeq
          case 5 => responseHeaders.iterator.map(mdg.engine.proto.reports.Trace.HTTP._typemapper_responseHeaders.toBase(_)).toSeq
          case 6 => {
            val __t = statusCode
            if (__t != 0) __t else null
          }
          case 8 => {
            val __t = secure
            if (__t != false) __t else null
          }
          case 9 => {
            val __t = protocol
            if (__t != "") __t else null
          }
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => _root_.scalapb.descriptors.PEnum(method.scalaValueDescriptor)
          case 2 => _root_.scalapb.descriptors.PString(host)
          case 3 => _root_.scalapb.descriptors.PString(path)
          case 4 => _root_.scalapb.descriptors.PRepeated(requestHeaders.iterator.map(mdg.engine.proto.reports.Trace.HTTP._typemapper_requestHeaders.toBase(_).toPMessage).toVector)
          case 5 => _root_.scalapb.descriptors.PRepeated(responseHeaders.iterator.map(mdg.engine.proto.reports.Trace.HTTP._typemapper_responseHeaders.toBase(_).toPMessage).toVector)
          case 6 => _root_.scalapb.descriptors.PInt(statusCode)
          case 8 => _root_.scalapb.descriptors.PBoolean(secure)
          case 9 => _root_.scalapb.descriptors.PString(protocol)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: mdg.engine.proto.reports.Trace.HTTP.type = mdg.engine.proto.reports.Trace.HTTP
      // @@protoc_insertion_point(GeneratedMessage[mdg.engine.proto.Trace.HTTP])
  }
  
  object HTTP extends scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.HTTP] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.HTTP] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): mdg.engine.proto.reports.Trace.HTTP = {
      var __method: mdg.engine.proto.reports.Trace.HTTP.Method = mdg.engine.proto.reports.Trace.HTTP.Method.UNKNOWN
      var __host: _root_.scala.Predef.String = ""
      var __path: _root_.scala.Predef.String = ""
      val __requestHeaders: _root_.scala.collection.mutable.Builder[(_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values), _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values]] = _root_.scala.collection.immutable.Map.newBuilder[_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values]
      val __responseHeaders: _root_.scala.collection.mutable.Builder[(_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values), _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values]] = _root_.scala.collection.immutable.Map.newBuilder[_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values]
      var __statusCode: _root_.scala.Int = 0
      var __secure: _root_.scala.Boolean = false
      var __protocol: _root_.scala.Predef.String = ""
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 8 =>
            __method = mdg.engine.proto.reports.Trace.HTTP.Method.fromValue(_input__.readEnum())
          case 18 =>
            __host = _input__.readStringRequireUtf8()
          case 26 =>
            __path = _input__.readStringRequireUtf8()
          case 34 =>
            __requestHeaders += mdg.engine.proto.reports.Trace.HTTP._typemapper_requestHeaders.toCustom(_root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry](_input__))
          case 42 =>
            __responseHeaders += mdg.engine.proto.reports.Trace.HTTP._typemapper_responseHeaders.toCustom(_root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry](_input__))
          case 48 =>
            __statusCode = _input__.readUInt32()
          case 64 =>
            __secure = _input__.readBool()
          case 74 =>
            __protocol = _input__.readStringRequireUtf8()
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      mdg.engine.proto.reports.Trace.HTTP(
          method = __method,
          host = __host,
          path = __path,
          requestHeaders = __requestHeaders.result(),
          responseHeaders = __responseHeaders.result(),
          statusCode = __statusCode,
          secure = __secure,
          protocol = __protocol,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[mdg.engine.proto.reports.Trace.HTTP] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        mdg.engine.proto.reports.Trace.HTTP(
          method = mdg.engine.proto.reports.Trace.HTTP.Method.fromValue(__fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scalapb.descriptors.EnumValueDescriptor]).getOrElse(mdg.engine.proto.reports.Trace.HTTP.Method.UNKNOWN.scalaValueDescriptor).number),
          host = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
          path = __fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
          requestHeaders = __fieldsMap.get(scalaDescriptor.findFieldByNumber(4).get).map(_.as[_root_.scala.Seq[mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry]]).getOrElse(_root_.scala.Seq.empty).iterator.map(mdg.engine.proto.reports.Trace.HTTP._typemapper_requestHeaders.toCustom(_)).toMap,
          responseHeaders = __fieldsMap.get(scalaDescriptor.findFieldByNumber(5).get).map(_.as[_root_.scala.Seq[mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry]]).getOrElse(_root_.scala.Seq.empty).iterator.map(mdg.engine.proto.reports.Trace.HTTP._typemapper_responseHeaders.toCustom(_)).toMap,
          statusCode = __fieldsMap.get(scalaDescriptor.findFieldByNumber(6).get).map(_.as[_root_.scala.Int]).getOrElse(0),
          secure = __fieldsMap.get(scalaDescriptor.findFieldByNumber(8).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
          protocol = __fieldsMap.get(scalaDescriptor.findFieldByNumber(9).get).map(_.as[_root_.scala.Predef.String]).getOrElse("")
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = mdg.engine.proto.reports.Trace.javaDescriptor.getNestedTypes().get(3)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = mdg.engine.proto.reports.Trace.scalaDescriptor.nestedMessages(3)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 4 => __out = mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry
        case 5 => __out = mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] =
      Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]](
        _root_.mdg.engine.proto.reports.Trace.HTTP.Values,
        _root_.mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry,
        _root_.mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry
      )
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = {
      (__fieldNumber: @_root_.scala.unchecked) match {
        case 1 => mdg.engine.proto.reports.Trace.HTTP.Method
      }
    }
    lazy val defaultInstance = mdg.engine.proto.reports.Trace.HTTP(
      method = mdg.engine.proto.reports.Trace.HTTP.Method.UNKNOWN,
      host = "",
      path = "",
      requestHeaders = _root_.scala.collection.immutable.Map.empty,
      responseHeaders = _root_.scala.collection.immutable.Map.empty,
      statusCode = 0,
      secure = false,
      protocol = ""
    )
    sealed abstract class Method(val value: _root_.scala.Int) extends _root_.scalapb.GeneratedEnum {
      type EnumType = mdg.engine.proto.reports.Trace.HTTP.Method
      type RecognizedType = mdg.engine.proto.reports.Trace.HTTP.Method.Recognized
      def isUnknown: _root_.scala.Boolean = false
      def isOptions: _root_.scala.Boolean = false
      def isGet: _root_.scala.Boolean = false
      def isHead: _root_.scala.Boolean = false
      def isPost: _root_.scala.Boolean = false
      def isPut: _root_.scala.Boolean = false
      def isDelete: _root_.scala.Boolean = false
      def isTrace: _root_.scala.Boolean = false
      def isConnect: _root_.scala.Boolean = false
      def isPatch: _root_.scala.Boolean = false
      def companion: _root_.scalapb.GeneratedEnumCompanion[Method] = mdg.engine.proto.reports.Trace.HTTP.Method
      final def asRecognized: _root_.scala.Option[mdg.engine.proto.reports.Trace.HTTP.Method.Recognized] = if (isUnrecognized) _root_.scala.None else _root_.scala.Some(this.asInstanceOf[mdg.engine.proto.reports.Trace.HTTP.Method.Recognized])
    }
    
    object Method extends _root_.scalapb.GeneratedEnumCompanion[Method] {
      sealed trait Recognized extends Method
      implicit def enumCompanion: _root_.scalapb.GeneratedEnumCompanion[Method] = this
      
      @SerialVersionUID(0L)
      case object UNKNOWN extends Method(0) with Method.Recognized {
        val index = 0
        val name = "UNKNOWN"
        override def isUnknown: _root_.scala.Boolean = true
      }
      
      @SerialVersionUID(0L)
      case object OPTIONS extends Method(1) with Method.Recognized {
        val index = 1
        val name = "OPTIONS"
        override def isOptions: _root_.scala.Boolean = true
      }
      
      @SerialVersionUID(0L)
      case object GET extends Method(2) with Method.Recognized {
        val index = 2
        val name = "GET"
        override def isGet: _root_.scala.Boolean = true
      }
      
      @SerialVersionUID(0L)
      case object HEAD extends Method(3) with Method.Recognized {
        val index = 3
        val name = "HEAD"
        override def isHead: _root_.scala.Boolean = true
      }
      
      @SerialVersionUID(0L)
      case object POST extends Method(4) with Method.Recognized {
        val index = 4
        val name = "POST"
        override def isPost: _root_.scala.Boolean = true
      }
      
      @SerialVersionUID(0L)
      case object PUT extends Method(5) with Method.Recognized {
        val index = 5
        val name = "PUT"
        override def isPut: _root_.scala.Boolean = true
      }
      
      @SerialVersionUID(0L)
      case object DELETE extends Method(6) with Method.Recognized {
        val index = 6
        val name = "DELETE"
        override def isDelete: _root_.scala.Boolean = true
      }
      
      @SerialVersionUID(0L)
      case object TRACE extends Method(7) with Method.Recognized {
        val index = 7
        val name = "TRACE"
        override def isTrace: _root_.scala.Boolean = true
      }
      
      @SerialVersionUID(0L)
      case object CONNECT extends Method(8) with Method.Recognized {
        val index = 8
        val name = "CONNECT"
        override def isConnect: _root_.scala.Boolean = true
      }
      
      @SerialVersionUID(0L)
      case object PATCH extends Method(9) with Method.Recognized {
        val index = 9
        val name = "PATCH"
        override def isPatch: _root_.scala.Boolean = true
      }
      
      @SerialVersionUID(0L)
      final case class Unrecognized(unrecognizedValue: _root_.scala.Int) extends Method(unrecognizedValue) with _root_.scalapb.UnrecognizedEnum
      lazy val values: scala.collection.immutable.Seq[ValueType] = scala.collection.immutable.Seq(UNKNOWN, OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT, PATCH)
      def fromValue(__value: _root_.scala.Int): Method = __value match {
        case 0 => UNKNOWN
        case 1 => OPTIONS
        case 2 => GET
        case 3 => HEAD
        case 4 => POST
        case 5 => PUT
        case 6 => DELETE
        case 7 => TRACE
        case 8 => CONNECT
        case 9 => PATCH
        case __other => Unrecognized(__other)
      }
      def javaDescriptor: _root_.com.google.protobuf.Descriptors.EnumDescriptor = mdg.engine.proto.reports.Trace.HTTP.javaDescriptor.getEnumTypes().get(0)
      def scalaDescriptor: _root_.scalapb.descriptors.EnumDescriptor = mdg.engine.proto.reports.Trace.HTTP.scalaDescriptor.enums(0)
    }
    @SerialVersionUID(0L)
    final case class Values(
        value: _root_.scala.Seq[_root_.scala.Predef.String] = _root_.scala.Seq.empty,
        unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
        ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[Values] {
        @transient
        private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
        private[this] def __computeSerializedSize(): _root_.scala.Int = {
          var __size = 0
          value.foreach { __item =>
            val __value = __item
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value)
          }
          __size += unknownFields.serializedSize
          __size
        }
        override def serializedSize: _root_.scala.Int = {
          var __size = __serializedSizeMemoized
          if (__size == 0) {
            __size = __computeSerializedSize() + 1
            __serializedSizeMemoized = __size
          }
          __size - 1
          
        }
        def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
          value.foreach { __v =>
            val __m = __v
            _output__.writeString(1, __m)
          };
          unknownFields.writeTo(_output__)
        }
        def clearValue = copy(value = _root_.scala.Seq.empty)
        def addValue(__vs: _root_.scala.Predef.String *): Values = addAllValue(__vs)
        def addAllValue(__vs: Iterable[_root_.scala.Predef.String]): Values = copy(value = value ++ __vs)
        def withValue(__v: _root_.scala.Seq[_root_.scala.Predef.String]): Values = copy(value = __v)
        def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
        def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
        def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
          (__fieldNumber: @_root_.scala.unchecked) match {
            case 1 => value
          }
        }
        def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
          _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
          (__field.number: @_root_.scala.unchecked) match {
            case 1 => _root_.scalapb.descriptors.PRepeated(value.iterator.map(_root_.scalapb.descriptors.PString(_)).toVector)
          }
        }
        def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
        def companion: mdg.engine.proto.reports.Trace.HTTP.Values.type = mdg.engine.proto.reports.Trace.HTTP.Values
        // @@protoc_insertion_point(GeneratedMessage[mdg.engine.proto.Trace.HTTP.Values])
    }
    
    object Values extends scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.HTTP.Values] {
      implicit def messageCompanion: scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.HTTP.Values] = this
      def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): mdg.engine.proto.reports.Trace.HTTP.Values = {
        val __value: _root_.scala.collection.immutable.VectorBuilder[_root_.scala.Predef.String] = new _root_.scala.collection.immutable.VectorBuilder[_root_.scala.Predef.String]
        var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
        var _done__ = false
        while (!_done__) {
          val _tag__ = _input__.readTag()
          _tag__ match {
            case 0 => _done__ = true
            case 10 =>
              __value += _input__.readStringRequireUtf8()
            case tag =>
              if (_unknownFields__ == null) {
                _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
              }
              _unknownFields__.parseField(tag, _input__)
          }
        }
        mdg.engine.proto.reports.Trace.HTTP.Values(
            value = __value.result(),
            unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
        )
      }
      implicit def messageReads: _root_.scalapb.descriptors.Reads[mdg.engine.proto.reports.Trace.HTTP.Values] = _root_.scalapb.descriptors.Reads{
        case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
          _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
          mdg.engine.proto.reports.Trace.HTTP.Values(
            value = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Seq[_root_.scala.Predef.String]]).getOrElse(_root_.scala.Seq.empty)
          )
        case _ => throw new RuntimeException("Expected PMessage")
      }
      def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = mdg.engine.proto.reports.Trace.HTTP.javaDescriptor.getNestedTypes().get(0)
      def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = mdg.engine.proto.reports.Trace.HTTP.scalaDescriptor.nestedMessages(0)
      def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
      lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
      def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
      lazy val defaultInstance = mdg.engine.proto.reports.Trace.HTTP.Values(
        value = _root_.scala.Seq.empty
      )
      implicit class ValuesLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.HTTP.Values]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, mdg.engine.proto.reports.Trace.HTTP.Values](_l) {
        def value: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[_root_.scala.Predef.String]] = field(_.value)((c_, f_) => c_.copy(value = f_))
      }
      final val VALUE_FIELD_NUMBER = 1
      def of(
        value: _root_.scala.Seq[_root_.scala.Predef.String]
      ): _root_.mdg.engine.proto.reports.Trace.HTTP.Values = _root_.mdg.engine.proto.reports.Trace.HTTP.Values(
        value
      )
      // @@protoc_insertion_point(GeneratedMessageCompanion[mdg.engine.proto.Trace.HTTP.Values])
    }
    
    @SerialVersionUID(0L)
    final case class RequestHeadersEntry(
        key: _root_.scala.Predef.String = "",
        value: _root_.scala.Option[mdg.engine.proto.reports.Trace.HTTP.Values] = _root_.scala.None,
        unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
        ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[RequestHeadersEntry] {
        @transient
        private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
        private[this] def __computeSerializedSize(): _root_.scala.Int = {
          var __size = 0
          
          {
            val __value = key
            if (!__value.isEmpty) {
              __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value)
            }
          };
          if (value.isDefined) {
            val __value = value.get
            __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
          };
          __size += unknownFields.serializedSize
          __size
        }
        override def serializedSize: _root_.scala.Int = {
          var __size = __serializedSizeMemoized
          if (__size == 0) {
            __size = __computeSerializedSize() + 1
            __serializedSizeMemoized = __size
          }
          __size - 1
          
        }
        def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
          {
            val __v = key
            if (!__v.isEmpty) {
              _output__.writeString(1, __v)
            }
          };
          value.foreach { __v =>
            val __m = __v
            _output__.writeTag(2, 2)
            _output__.writeUInt32NoTag(__m.serializedSize)
            __m.writeTo(_output__)
          };
          unknownFields.writeTo(_output__)
        }
        def withKey(__v: _root_.scala.Predef.String): RequestHeadersEntry = copy(key = __v)
        def getValue: mdg.engine.proto.reports.Trace.HTTP.Values = value.getOrElse(mdg.engine.proto.reports.Trace.HTTP.Values.defaultInstance)
        def clearValue: RequestHeadersEntry = copy(value = _root_.scala.None)
        def withValue(__v: mdg.engine.proto.reports.Trace.HTTP.Values): RequestHeadersEntry = copy(value = Option(__v))
        def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
        def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
        def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
          (__fieldNumber: @_root_.scala.unchecked) match {
            case 1 => {
              val __t = key
              if (__t != "") __t else null
            }
            case 2 => value.orNull
          }
        }
        def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
          _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
          (__field.number: @_root_.scala.unchecked) match {
            case 1 => _root_.scalapb.descriptors.PString(key)
            case 2 => value.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          }
        }
        def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
        def companion: mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry.type = mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry
        // @@protoc_insertion_point(GeneratedMessage[mdg.engine.proto.Trace.HTTP.RequestHeadersEntry])
    }
    
    object RequestHeadersEntry extends scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry] {
      implicit def messageCompanion: scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry] = this
      def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry = {
        var __key: _root_.scala.Predef.String = ""
        var __value: _root_.scala.Option[mdg.engine.proto.reports.Trace.HTTP.Values] = _root_.scala.None
        var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
        var _done__ = false
        while (!_done__) {
          val _tag__ = _input__.readTag()
          _tag__ match {
            case 0 => _done__ = true
            case 10 =>
              __key = _input__.readStringRequireUtf8()
            case 18 =>
              __value = _root_.scala.Option(__value.fold(_root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.HTTP.Values](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
            case tag =>
              if (_unknownFields__ == null) {
                _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
              }
              _unknownFields__.parseField(tag, _input__)
          }
        }
        mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry(
            key = __key,
            value = __value,
            unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
        )
      }
      implicit def messageReads: _root_.scalapb.descriptors.Reads[mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry] = _root_.scalapb.descriptors.Reads{
        case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
          _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
          mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry(
            key = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
            value = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[mdg.engine.proto.reports.Trace.HTTP.Values]])
          )
        case _ => throw new RuntimeException("Expected PMessage")
      }
      def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = mdg.engine.proto.reports.Trace.HTTP.javaDescriptor.getNestedTypes().get(1)
      def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = mdg.engine.proto.reports.Trace.HTTP.scalaDescriptor.nestedMessages(1)
      def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
        var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
        (__number: @_root_.scala.unchecked) match {
          case 2 => __out = mdg.engine.proto.reports.Trace.HTTP.Values
        }
        __out
      }
      lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
      def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
      lazy val defaultInstance = mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry(
        key = "",
        value = _root_.scala.None
      )
      implicit class RequestHeadersEntryLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry](_l) {
        def key: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.key)((c_, f_) => c_.copy(key = f_))
        def value: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.HTTP.Values] = field(_.getValue)((c_, f_) => c_.copy(value = _root_.scala.Option(f_)))
        def optionalValue: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[mdg.engine.proto.reports.Trace.HTTP.Values]] = field(_.value)((c_, f_) => c_.copy(value = f_))
      }
      final val KEY_FIELD_NUMBER = 1
      final val VALUE_FIELD_NUMBER = 2
      @transient
      implicit val keyValueMapper: _root_.scalapb.TypeMapper[mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry, (_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values)] =
        _root_.scalapb.TypeMapper[mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry, (_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values)](__m => (__m.key, __m.getValue))(__p => mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry(__p._1, Some(__p._2)))
      def of(
        key: _root_.scala.Predef.String,
        value: _root_.scala.Option[mdg.engine.proto.reports.Trace.HTTP.Values]
      ): _root_.mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry = _root_.mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry(
        key,
        value
      )
      // @@protoc_insertion_point(GeneratedMessageCompanion[mdg.engine.proto.Trace.HTTP.RequestHeadersEntry])
    }
    
    @SerialVersionUID(0L)
    final case class ResponseHeadersEntry(
        key: _root_.scala.Predef.String = "",
        value: _root_.scala.Option[mdg.engine.proto.reports.Trace.HTTP.Values] = _root_.scala.None,
        unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
        ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[ResponseHeadersEntry] {
        @transient
        private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
        private[this] def __computeSerializedSize(): _root_.scala.Int = {
          var __size = 0
          
          {
            val __value = key
            if (!__value.isEmpty) {
              __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value)
            }
          };
          if (value.isDefined) {
            val __value = value.get
            __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
          };
          __size += unknownFields.serializedSize
          __size
        }
        override def serializedSize: _root_.scala.Int = {
          var __size = __serializedSizeMemoized
          if (__size == 0) {
            __size = __computeSerializedSize() + 1
            __serializedSizeMemoized = __size
          }
          __size - 1
          
        }
        def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
          {
            val __v = key
            if (!__v.isEmpty) {
              _output__.writeString(1, __v)
            }
          };
          value.foreach { __v =>
            val __m = __v
            _output__.writeTag(2, 2)
            _output__.writeUInt32NoTag(__m.serializedSize)
            __m.writeTo(_output__)
          };
          unknownFields.writeTo(_output__)
        }
        def withKey(__v: _root_.scala.Predef.String): ResponseHeadersEntry = copy(key = __v)
        def getValue: mdg.engine.proto.reports.Trace.HTTP.Values = value.getOrElse(mdg.engine.proto.reports.Trace.HTTP.Values.defaultInstance)
        def clearValue: ResponseHeadersEntry = copy(value = _root_.scala.None)
        def withValue(__v: mdg.engine.proto.reports.Trace.HTTP.Values): ResponseHeadersEntry = copy(value = Option(__v))
        def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
        def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
        def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
          (__fieldNumber: @_root_.scala.unchecked) match {
            case 1 => {
              val __t = key
              if (__t != "") __t else null
            }
            case 2 => value.orNull
          }
        }
        def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
          _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
          (__field.number: @_root_.scala.unchecked) match {
            case 1 => _root_.scalapb.descriptors.PString(key)
            case 2 => value.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          }
        }
        def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
        def companion: mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry.type = mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry
        // @@protoc_insertion_point(GeneratedMessage[mdg.engine.proto.Trace.HTTP.ResponseHeadersEntry])
    }
    
    object ResponseHeadersEntry extends scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry] {
      implicit def messageCompanion: scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry] = this
      def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry = {
        var __key: _root_.scala.Predef.String = ""
        var __value: _root_.scala.Option[mdg.engine.proto.reports.Trace.HTTP.Values] = _root_.scala.None
        var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
        var _done__ = false
        while (!_done__) {
          val _tag__ = _input__.readTag()
          _tag__ match {
            case 0 => _done__ = true
            case 10 =>
              __key = _input__.readStringRequireUtf8()
            case 18 =>
              __value = _root_.scala.Option(__value.fold(_root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.HTTP.Values](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
            case tag =>
              if (_unknownFields__ == null) {
                _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
              }
              _unknownFields__.parseField(tag, _input__)
          }
        }
        mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry(
            key = __key,
            value = __value,
            unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
        )
      }
      implicit def messageReads: _root_.scalapb.descriptors.Reads[mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry] = _root_.scalapb.descriptors.Reads{
        case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
          _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
          mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry(
            key = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
            value = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[mdg.engine.proto.reports.Trace.HTTP.Values]])
          )
        case _ => throw new RuntimeException("Expected PMessage")
      }
      def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = mdg.engine.proto.reports.Trace.HTTP.javaDescriptor.getNestedTypes().get(2)
      def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = mdg.engine.proto.reports.Trace.HTTP.scalaDescriptor.nestedMessages(2)
      def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
        var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
        (__number: @_root_.scala.unchecked) match {
          case 2 => __out = mdg.engine.proto.reports.Trace.HTTP.Values
        }
        __out
      }
      lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
      def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
      lazy val defaultInstance = mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry(
        key = "",
        value = _root_.scala.None
      )
      implicit class ResponseHeadersEntryLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry](_l) {
        def key: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.key)((c_, f_) => c_.copy(key = f_))
        def value: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.HTTP.Values] = field(_.getValue)((c_, f_) => c_.copy(value = _root_.scala.Option(f_)))
        def optionalValue: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[mdg.engine.proto.reports.Trace.HTTP.Values]] = field(_.value)((c_, f_) => c_.copy(value = f_))
      }
      final val KEY_FIELD_NUMBER = 1
      final val VALUE_FIELD_NUMBER = 2
      @transient
      implicit val keyValueMapper: _root_.scalapb.TypeMapper[mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry, (_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values)] =
        _root_.scalapb.TypeMapper[mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry, (_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values)](__m => (__m.key, __m.getValue))(__p => mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry(__p._1, Some(__p._2)))
      def of(
        key: _root_.scala.Predef.String,
        value: _root_.scala.Option[mdg.engine.proto.reports.Trace.HTTP.Values]
      ): _root_.mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry = _root_.mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry(
        key,
        value
      )
      // @@protoc_insertion_point(GeneratedMessageCompanion[mdg.engine.proto.Trace.HTTP.ResponseHeadersEntry])
    }
    
    implicit class HTTPLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.HTTP]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, mdg.engine.proto.reports.Trace.HTTP](_l) {
      def method: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.HTTP.Method] = field(_.method)((c_, f_) => c_.copy(method = f_))
      def host: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.host)((c_, f_) => c_.copy(host = f_))
      def path: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.path)((c_, f_) => c_.copy(path = f_))
      def requestHeaders: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values]] = field(_.requestHeaders)((c_, f_) => c_.copy(requestHeaders = f_))
      def responseHeaders: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values]] = field(_.responseHeaders)((c_, f_) => c_.copy(responseHeaders = f_))
      def statusCode: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Int] = field(_.statusCode)((c_, f_) => c_.copy(statusCode = f_))
      def secure: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.secure)((c_, f_) => c_.copy(secure = f_))
      def protocol: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.protocol)((c_, f_) => c_.copy(protocol = f_))
    }
    final val METHOD_FIELD_NUMBER = 1
    final val HOST_FIELD_NUMBER = 2
    final val PATH_FIELD_NUMBER = 3
    final val REQUEST_HEADERS_FIELD_NUMBER = 4
    final val RESPONSE_HEADERS_FIELD_NUMBER = 5
    final val STATUS_CODE_FIELD_NUMBER = 6
    final val SECURE_FIELD_NUMBER = 8
    final val PROTOCOL_FIELD_NUMBER = 9
    @transient
    private[reports] val _typemapper_requestHeaders: _root_.scalapb.TypeMapper[mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry, (_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values)] = implicitly[_root_.scalapb.TypeMapper[mdg.engine.proto.reports.Trace.HTTP.RequestHeadersEntry, (_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values)]]
    @transient
    private[reports] val _typemapper_responseHeaders: _root_.scalapb.TypeMapper[mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry, (_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values)] = implicitly[_root_.scalapb.TypeMapper[mdg.engine.proto.reports.Trace.HTTP.ResponseHeadersEntry, (_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values)]]
    def of(
      method: mdg.engine.proto.reports.Trace.HTTP.Method,
      host: _root_.scala.Predef.String,
      path: _root_.scala.Predef.String,
      requestHeaders: _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values],
      responseHeaders: _root_.scala.collection.immutable.Map[_root_.scala.Predef.String, mdg.engine.proto.reports.Trace.HTTP.Values],
      statusCode: _root_.scala.Int,
      secure: _root_.scala.Boolean,
      protocol: _root_.scala.Predef.String
    ): _root_.mdg.engine.proto.reports.Trace.HTTP = _root_.mdg.engine.proto.reports.Trace.HTTP(
      method,
      host,
      path,
      requestHeaders,
      responseHeaders,
      statusCode,
      secure,
      protocol
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[mdg.engine.proto.Trace.HTTP])
  }
  
  @SerialVersionUID(0L)
  final case class Location(
      line: _root_.scala.Int = 0,
      column: _root_.scala.Int = 0,
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[Location] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        
        {
          val __value = line
          if (__value != 0) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeUInt32Size(1, __value)
          }
        };
        
        {
          val __value = column
          if (__value != 0) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeUInt32Size(2, __value)
          }
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        {
          val __v = line
          if (__v != 0) {
            _output__.writeUInt32(1, __v)
          }
        };
        {
          val __v = column
          if (__v != 0) {
            _output__.writeUInt32(2, __v)
          }
        };
        unknownFields.writeTo(_output__)
      }
      def withLine(__v: _root_.scala.Int): Location = copy(line = __v)
      def withColumn(__v: _root_.scala.Int): Location = copy(column = __v)
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => {
            val __t = line
            if (__t != 0) __t else null
          }
          case 2 => {
            val __t = column
            if (__t != 0) __t else null
          }
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => _root_.scalapb.descriptors.PInt(line)
          case 2 => _root_.scalapb.descriptors.PInt(column)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: mdg.engine.proto.reports.Trace.Location.type = mdg.engine.proto.reports.Trace.Location
      // @@protoc_insertion_point(GeneratedMessage[mdg.engine.proto.Trace.Location])
  }
  
  object Location extends scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.Location] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.Location] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): mdg.engine.proto.reports.Trace.Location = {
      var __line: _root_.scala.Int = 0
      var __column: _root_.scala.Int = 0
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 8 =>
            __line = _input__.readUInt32()
          case 16 =>
            __column = _input__.readUInt32()
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      mdg.engine.proto.reports.Trace.Location(
          line = __line,
          column = __column,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[mdg.engine.proto.reports.Trace.Location] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        mdg.engine.proto.reports.Trace.Location(
          line = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Int]).getOrElse(0),
          column = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).map(_.as[_root_.scala.Int]).getOrElse(0)
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = mdg.engine.proto.reports.Trace.javaDescriptor.getNestedTypes().get(4)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = mdg.engine.proto.reports.Trace.scalaDescriptor.nestedMessages(4)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
    lazy val defaultInstance = mdg.engine.proto.reports.Trace.Location(
      line = 0,
      column = 0
    )
    implicit class LocationLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.Location]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, mdg.engine.proto.reports.Trace.Location](_l) {
      def line: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Int] = field(_.line)((c_, f_) => c_.copy(line = f_))
      def column: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Int] = field(_.column)((c_, f_) => c_.copy(column = f_))
    }
    final val LINE_FIELD_NUMBER = 1
    final val COLUMN_FIELD_NUMBER = 2
    def of(
      line: _root_.scala.Int,
      column: _root_.scala.Int
    ): _root_.mdg.engine.proto.reports.Trace.Location = _root_.mdg.engine.proto.reports.Trace.Location(
      line,
      column
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[mdg.engine.proto.Trace.Location])
  }
  
  /** We store information on each resolver execution as a Node on a tree.
    * The structure of the tree corresponds to the structure of the GraphQL
    * response; it does not indicate the order in which resolvers were
    * invoked.  Note that nodes representing indexes (and the root node)
    * don't contain all Node fields (eg types and times).
    *
    * @param type
    *   The field's return type; e.g. "String!" for User.email:String!
    * @param parentType
    *   The field's parent type; e.g. "User" for User.email:String!
    * @param startTime
    *   relative to the trace's start_time, in ns
    * @param endTime
    *   relative to the trace's start_time, in ns
    */
  @SerialVersionUID(0L)
  final case class Node(
      id: mdg.engine.proto.reports.Trace.Node.Id = mdg.engine.proto.reports.Trace.Node.Id.Empty,
      originalFieldName: _root_.scala.Predef.String = "",
      `type`: _root_.scala.Predef.String = "",
      parentType: _root_.scala.Predef.String = "",
      cachePolicy: _root_.scala.Option[mdg.engine.proto.reports.Trace.CachePolicy] = _root_.scala.None,
      startTime: _root_.scala.Long = 0L,
      endTime: _root_.scala.Long = 0L,
      error: _root_.scala.Seq[mdg.engine.proto.reports.Trace.Error] = _root_.scala.Seq.empty,
      child: _root_.scala.Seq[mdg.engine.proto.reports.Trace.Node] = _root_.scala.Seq.empty,
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[Node] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        if (id.responseName.isDefined) {
          val __value = id.responseName.get
          __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value)
        };
        if (id.index.isDefined) {
          val __value = id.index.get
          __size += _root_.com.google.protobuf.CodedOutputStream.computeUInt32Size(2, __value)
        };
        
        {
          val __value = originalFieldName
          if (!__value.isEmpty) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(14, __value)
          }
        };
        
        {
          val __value = `type`
          if (!__value.isEmpty) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(3, __value)
          }
        };
        
        {
          val __value = parentType
          if (!__value.isEmpty) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(13, __value)
          }
        };
        if (cachePolicy.isDefined) {
          val __value = cachePolicy.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        
        {
          val __value = startTime
          if (__value != 0L) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeUInt64Size(8, __value)
          }
        };
        
        {
          val __value = endTime
          if (__value != 0L) {
            __size += _root_.com.google.protobuf.CodedOutputStream.computeUInt64Size(9, __value)
          }
        };
        error.foreach { __item =>
          val __value = __item
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        }
        child.foreach { __item =>
          val __value = __item
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        }
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        id.responseName.foreach { __v =>
          val __m = __v
          _output__.writeString(1, __m)
        };
        id.index.foreach { __v =>
          val __m = __v
          _output__.writeUInt32(2, __m)
        };
        {
          val __v = `type`
          if (!__v.isEmpty) {
            _output__.writeString(3, __v)
          }
        };
        cachePolicy.foreach { __v =>
          val __m = __v
          _output__.writeTag(5, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        {
          val __v = startTime
          if (__v != 0L) {
            _output__.writeUInt64(8, __v)
          }
        };
        {
          val __v = endTime
          if (__v != 0L) {
            _output__.writeUInt64(9, __v)
          }
        };
        error.foreach { __v =>
          val __m = __v
          _output__.writeTag(11, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        child.foreach { __v =>
          val __m = __v
          _output__.writeTag(12, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        {
          val __v = parentType
          if (!__v.isEmpty) {
            _output__.writeString(13, __v)
          }
        };
        {
          val __v = originalFieldName
          if (!__v.isEmpty) {
            _output__.writeString(14, __v)
          }
        };
        unknownFields.writeTo(_output__)
      }
      def getResponseName: _root_.scala.Predef.String = id.responseName.getOrElse("")
      def withResponseName(__v: _root_.scala.Predef.String): Node = copy(id = mdg.engine.proto.reports.Trace.Node.Id.ResponseName(__v))
      def getIndex: _root_.scala.Int = id.index.getOrElse(0)
      def withIndex(__v: _root_.scala.Int): Node = copy(id = mdg.engine.proto.reports.Trace.Node.Id.Index(__v))
      def withOriginalFieldName(__v: _root_.scala.Predef.String): Node = copy(originalFieldName = __v)
      def withType(__v: _root_.scala.Predef.String): Node = copy(`type` = __v)
      def withParentType(__v: _root_.scala.Predef.String): Node = copy(parentType = __v)
      def getCachePolicy: mdg.engine.proto.reports.Trace.CachePolicy = cachePolicy.getOrElse(mdg.engine.proto.reports.Trace.CachePolicy.defaultInstance)
      def clearCachePolicy: Node = copy(cachePolicy = _root_.scala.None)
      def withCachePolicy(__v: mdg.engine.proto.reports.Trace.CachePolicy): Node = copy(cachePolicy = Option(__v))
      def withStartTime(__v: _root_.scala.Long): Node = copy(startTime = __v)
      def withEndTime(__v: _root_.scala.Long): Node = copy(endTime = __v)
      def clearError = copy(error = _root_.scala.Seq.empty)
      def addError(__vs: mdg.engine.proto.reports.Trace.Error *): Node = addAllError(__vs)
      def addAllError(__vs: Iterable[mdg.engine.proto.reports.Trace.Error]): Node = copy(error = error ++ __vs)
      def withError(__v: _root_.scala.Seq[mdg.engine.proto.reports.Trace.Error]): Node = copy(error = __v)
      def clearChild = copy(child = _root_.scala.Seq.empty)
      def addChild(__vs: mdg.engine.proto.reports.Trace.Node *): Node = addAllChild(__vs)
      def addAllChild(__vs: Iterable[mdg.engine.proto.reports.Trace.Node]): Node = copy(child = child ++ __vs)
      def withChild(__v: _root_.scala.Seq[mdg.engine.proto.reports.Trace.Node]): Node = copy(child = __v)
      def clearId: Node = copy(id = mdg.engine.proto.reports.Trace.Node.Id.Empty)
      def withId(__v: mdg.engine.proto.reports.Trace.Node.Id): Node = copy(id = __v)
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => id.responseName.orNull
          case 2 => id.index.orNull
          case 14 => {
            val __t = originalFieldName
            if (__t != "") __t else null
          }
          case 3 => {
            val __t = `type`
            if (__t != "") __t else null
          }
          case 13 => {
            val __t = parentType
            if (__t != "") __t else null
          }
          case 5 => cachePolicy.orNull
          case 8 => {
            val __t = startTime
            if (__t != 0L) __t else null
          }
          case 9 => {
            val __t = endTime
            if (__t != 0L) __t else null
          }
          case 11 => error
          case 12 => child
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => id.responseName.map(_root_.scalapb.descriptors.PString(_)).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 2 => id.index.map(_root_.scalapb.descriptors.PInt(_)).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 14 => _root_.scalapb.descriptors.PString(originalFieldName)
          case 3 => _root_.scalapb.descriptors.PString(`type`)
          case 13 => _root_.scalapb.descriptors.PString(parentType)
          case 5 => cachePolicy.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 8 => _root_.scalapb.descriptors.PLong(startTime)
          case 9 => _root_.scalapb.descriptors.PLong(endTime)
          case 11 => _root_.scalapb.descriptors.PRepeated(error.iterator.map(_.toPMessage).toVector)
          case 12 => _root_.scalapb.descriptors.PRepeated(child.iterator.map(_.toPMessage).toVector)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: mdg.engine.proto.reports.Trace.Node.type = mdg.engine.proto.reports.Trace.Node
      // @@protoc_insertion_point(GeneratedMessage[mdg.engine.proto.Trace.Node])
  }
  
  object Node extends scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.Node] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.Node] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): mdg.engine.proto.reports.Trace.Node = {
      var __originalFieldName: _root_.scala.Predef.String = ""
      var __type: _root_.scala.Predef.String = ""
      var __parentType: _root_.scala.Predef.String = ""
      var __cachePolicy: _root_.scala.Option[mdg.engine.proto.reports.Trace.CachePolicy] = _root_.scala.None
      var __startTime: _root_.scala.Long = 0L
      var __endTime: _root_.scala.Long = 0L
      val __error: _root_.scala.collection.immutable.VectorBuilder[mdg.engine.proto.reports.Trace.Error] = new _root_.scala.collection.immutable.VectorBuilder[mdg.engine.proto.reports.Trace.Error]
      val __child: _root_.scala.collection.immutable.VectorBuilder[mdg.engine.proto.reports.Trace.Node] = new _root_.scala.collection.immutable.VectorBuilder[mdg.engine.proto.reports.Trace.Node]
      var __id: mdg.engine.proto.reports.Trace.Node.Id = mdg.engine.proto.reports.Trace.Node.Id.Empty
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 10 =>
            __id = mdg.engine.proto.reports.Trace.Node.Id.ResponseName(_input__.readStringRequireUtf8())
          case 16 =>
            __id = mdg.engine.proto.reports.Trace.Node.Id.Index(_input__.readUInt32())
          case 114 =>
            __originalFieldName = _input__.readStringRequireUtf8()
          case 26 =>
            __type = _input__.readStringRequireUtf8()
          case 106 =>
            __parentType = _input__.readStringRequireUtf8()
          case 42 =>
            __cachePolicy = _root_.scala.Option(__cachePolicy.fold(_root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.CachePolicy](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case 64 =>
            __startTime = _input__.readUInt64()
          case 72 =>
            __endTime = _input__.readUInt64()
          case 90 =>
            __error += _root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.Error](_input__)
          case 98 =>
            __child += _root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.Node](_input__)
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      mdg.engine.proto.reports.Trace.Node(
          originalFieldName = __originalFieldName,
          `type` = __type,
          parentType = __parentType,
          cachePolicy = __cachePolicy,
          startTime = __startTime,
          endTime = __endTime,
          error = __error.result(),
          child = __child.result(),
          id = __id,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[mdg.engine.proto.reports.Trace.Node] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        mdg.engine.proto.reports.Trace.Node(
          originalFieldName = __fieldsMap.get(scalaDescriptor.findFieldByNumber(14).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
          `type` = __fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
          parentType = __fieldsMap.get(scalaDescriptor.findFieldByNumber(13).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
          cachePolicy = __fieldsMap.get(scalaDescriptor.findFieldByNumber(5).get).flatMap(_.as[_root_.scala.Option[mdg.engine.proto.reports.Trace.CachePolicy]]),
          startTime = __fieldsMap.get(scalaDescriptor.findFieldByNumber(8).get).map(_.as[_root_.scala.Long]).getOrElse(0L),
          endTime = __fieldsMap.get(scalaDescriptor.findFieldByNumber(9).get).map(_.as[_root_.scala.Long]).getOrElse(0L),
          error = __fieldsMap.get(scalaDescriptor.findFieldByNumber(11).get).map(_.as[_root_.scala.Seq[mdg.engine.proto.reports.Trace.Error]]).getOrElse(_root_.scala.Seq.empty),
          child = __fieldsMap.get(scalaDescriptor.findFieldByNumber(12).get).map(_.as[_root_.scala.Seq[mdg.engine.proto.reports.Trace.Node]]).getOrElse(_root_.scala.Seq.empty),
          id = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).flatMap(_.as[_root_.scala.Option[_root_.scala.Predef.String]]).map(mdg.engine.proto.reports.Trace.Node.Id.ResponseName(_))
              .orElse[mdg.engine.proto.reports.Trace.Node.Id](__fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[_root_.scala.Int]]).map(mdg.engine.proto.reports.Trace.Node.Id.Index(_)))
              .getOrElse(mdg.engine.proto.reports.Trace.Node.Id.Empty)
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = mdg.engine.proto.reports.Trace.javaDescriptor.getNestedTypes().get(5)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = mdg.engine.proto.reports.Trace.scalaDescriptor.nestedMessages(5)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 5 => __out = mdg.engine.proto.reports.Trace.CachePolicy
        case 11 => __out = mdg.engine.proto.reports.Trace.Error
        case 12 => __out = mdg.engine.proto.reports.Trace.Node
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
    lazy val defaultInstance = mdg.engine.proto.reports.Trace.Node(
      originalFieldName = "",
      `type` = "",
      parentType = "",
      cachePolicy = _root_.scala.None,
      startTime = 0L,
      endTime = 0L,
      error = _root_.scala.Seq.empty,
      child = _root_.scala.Seq.empty,
      id = mdg.engine.proto.reports.Trace.Node.Id.Empty
    )
    sealed trait Id extends _root_.scalapb.GeneratedOneof {
      def isEmpty: _root_.scala.Boolean = false
      def isDefined: _root_.scala.Boolean = true
      def isResponseName: _root_.scala.Boolean = false
      def isIndex: _root_.scala.Boolean = false
      def responseName: _root_.scala.Option[_root_.scala.Predef.String] = _root_.scala.None
      def index: _root_.scala.Option[_root_.scala.Int] = _root_.scala.None
    }
    object Id {
      @SerialVersionUID(0L)
      case object Empty extends mdg.engine.proto.reports.Trace.Node.Id {
        type ValueType = _root_.scala.Nothing
        override def isEmpty: _root_.scala.Boolean = true
        override def isDefined: _root_.scala.Boolean = false
        override def number: _root_.scala.Int = 0
        override def value: _root_.scala.Nothing = throw new java.util.NoSuchElementException("Empty.value")
      }
    
      @SerialVersionUID(0L)
      final case class ResponseName(value: _root_.scala.Predef.String) extends mdg.engine.proto.reports.Trace.Node.Id {
        type ValueType = _root_.scala.Predef.String
        override def isResponseName: _root_.scala.Boolean = true
        override def responseName: _root_.scala.Option[_root_.scala.Predef.String] = Some(value)
        override def number: _root_.scala.Int = 1
      }
      @SerialVersionUID(0L)
      final case class Index(value: _root_.scala.Int) extends mdg.engine.proto.reports.Trace.Node.Id {
        type ValueType = _root_.scala.Int
        override def isIndex: _root_.scala.Boolean = true
        override def index: _root_.scala.Option[_root_.scala.Int] = Some(value)
        override def number: _root_.scala.Int = 2
      }
    }
    implicit class NodeLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.Node]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, mdg.engine.proto.reports.Trace.Node](_l) {
      def responseName: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.getResponseName)((c_, f_) => c_.copy(id = mdg.engine.proto.reports.Trace.Node.Id.ResponseName(f_)))
      def index: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Int] = field(_.getIndex)((c_, f_) => c_.copy(id = mdg.engine.proto.reports.Trace.Node.Id.Index(f_)))
      def originalFieldName: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.originalFieldName)((c_, f_) => c_.copy(originalFieldName = f_))
      def `type`: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.`type`)((c_, f_) => c_.copy(`type` = f_))
      def parentType: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.parentType)((c_, f_) => c_.copy(parentType = f_))
      def cachePolicy: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.CachePolicy] = field(_.getCachePolicy)((c_, f_) => c_.copy(cachePolicy = _root_.scala.Option(f_)))
      def optionalCachePolicy: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[mdg.engine.proto.reports.Trace.CachePolicy]] = field(_.cachePolicy)((c_, f_) => c_.copy(cachePolicy = f_))
      def startTime: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Long] = field(_.startTime)((c_, f_) => c_.copy(startTime = f_))
      def endTime: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Long] = field(_.endTime)((c_, f_) => c_.copy(endTime = f_))
      def error: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[mdg.engine.proto.reports.Trace.Error]] = field(_.error)((c_, f_) => c_.copy(error = f_))
      def child: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[mdg.engine.proto.reports.Trace.Node]] = field(_.child)((c_, f_) => c_.copy(child = f_))
      def id: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.Node.Id] = field(_.id)((c_, f_) => c_.copy(id = f_))
    }
    final val RESPONSE_NAME_FIELD_NUMBER = 1
    final val INDEX_FIELD_NUMBER = 2
    final val ORIGINAL_FIELD_NAME_FIELD_NUMBER = 14
    final val TYPE_FIELD_NUMBER = 3
    final val PARENT_TYPE_FIELD_NUMBER = 13
    final val CACHE_POLICY_FIELD_NUMBER = 5
    final val START_TIME_FIELD_NUMBER = 8
    final val END_TIME_FIELD_NUMBER = 9
    final val ERROR_FIELD_NUMBER = 11
    final val CHILD_FIELD_NUMBER = 12
    def of(
      id: mdg.engine.proto.reports.Trace.Node.Id,
      originalFieldName: _root_.scala.Predef.String,
      `type`: _root_.scala.Predef.String,
      parentType: _root_.scala.Predef.String,
      cachePolicy: _root_.scala.Option[mdg.engine.proto.reports.Trace.CachePolicy],
      startTime: _root_.scala.Long,
      endTime: _root_.scala.Long,
      error: _root_.scala.Seq[mdg.engine.proto.reports.Trace.Error],
      child: _root_.scala.Seq[mdg.engine.proto.reports.Trace.Node]
    ): _root_.mdg.engine.proto.reports.Trace.Node = _root_.mdg.engine.proto.reports.Trace.Node(
      id,
      originalFieldName,
      `type`,
      parentType,
      cachePolicy,
      startTime,
      endTime,
      error,
      child
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[mdg.engine.proto.Trace.Node])
  }
  
  /** represents a node in the query plan, under which there is a trace tree for that service fetch.
    * In particular, each fetch node represents a call to an implementing service, and calls to implementing
    * services may not be unique. See https://github.com/apollographql/apollo-server/blob/main/packages/apollo-gateway/src/QueryPlan.ts
    * for more information and details.
    */
  @SerialVersionUID(0L)
  final case class QueryPlanNode(
      node: mdg.engine.proto.reports.Trace.QueryPlanNode.Node = mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Empty,
      unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
      ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[QueryPlanNode] {
      @transient
      private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
      private[this] def __computeSerializedSize(): _root_.scala.Int = {
        var __size = 0
        if (node.sequence.isDefined) {
          val __value = node.sequence.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        if (node.parallel.isDefined) {
          val __value = node.parallel.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        if (node.fetch.isDefined) {
          val __value = node.fetch.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        if (node.flatten.isDefined) {
          val __value = node.flatten.get
          __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
        };
        __size += unknownFields.serializedSize
        __size
      }
      override def serializedSize: _root_.scala.Int = {
        var __size = __serializedSizeMemoized
        if (__size == 0) {
          __size = __computeSerializedSize() + 1
          __serializedSizeMemoized = __size
        }
        __size - 1
        
      }
      def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
        node.sequence.foreach { __v =>
          val __m = __v
          _output__.writeTag(1, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        node.parallel.foreach { __v =>
          val __m = __v
          _output__.writeTag(2, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        node.fetch.foreach { __v =>
          val __m = __v
          _output__.writeTag(3, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        node.flatten.foreach { __v =>
          val __m = __v
          _output__.writeTag(4, 2)
          _output__.writeUInt32NoTag(__m.serializedSize)
          __m.writeTo(_output__)
        };
        unknownFields.writeTo(_output__)
      }
      def getSequence: mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode = node.sequence.getOrElse(mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode.defaultInstance)
      def withSequence(__v: mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode): QueryPlanNode = copy(node = mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Sequence(__v))
      def getParallel: mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode = node.parallel.getOrElse(mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode.defaultInstance)
      def withParallel(__v: mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode): QueryPlanNode = copy(node = mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Parallel(__v))
      def getFetch: mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode = node.fetch.getOrElse(mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode.defaultInstance)
      def withFetch(__v: mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode): QueryPlanNode = copy(node = mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Fetch(__v))
      def getFlatten: mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode = node.flatten.getOrElse(mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode.defaultInstance)
      def withFlatten(__v: mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode): QueryPlanNode = copy(node = mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Flatten(__v))
      def clearNode: QueryPlanNode = copy(node = mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Empty)
      def withNode(__v: mdg.engine.proto.reports.Trace.QueryPlanNode.Node): QueryPlanNode = copy(node = __v)
      def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
      def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
      def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
        (__fieldNumber: @_root_.scala.unchecked) match {
          case 1 => node.sequence.orNull
          case 2 => node.parallel.orNull
          case 3 => node.fetch.orNull
          case 4 => node.flatten.orNull
        }
      }
      def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
        _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
        (__field.number: @_root_.scala.unchecked) match {
          case 1 => node.sequence.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 2 => node.parallel.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 3 => node.fetch.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          case 4 => node.flatten.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
        }
      }
      def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
      def companion: mdg.engine.proto.reports.Trace.QueryPlanNode.type = mdg.engine.proto.reports.Trace.QueryPlanNode
      // @@protoc_insertion_point(GeneratedMessage[mdg.engine.proto.Trace.QueryPlanNode])
  }
  
  object QueryPlanNode extends scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.QueryPlanNode] {
    implicit def messageCompanion: scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.QueryPlanNode] = this
    def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): mdg.engine.proto.reports.Trace.QueryPlanNode = {
      var __node: mdg.engine.proto.reports.Trace.QueryPlanNode.Node = mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Empty
      var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
      var _done__ = false
      while (!_done__) {
        val _tag__ = _input__.readTag()
        _tag__ match {
          case 0 => _done__ = true
          case 10 =>
            __node = mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Sequence(__node.sequence.fold(_root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case 18 =>
            __node = mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Parallel(__node.parallel.fold(_root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case 26 =>
            __node = mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Fetch(__node.fetch.fold(_root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case 34 =>
            __node = mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Flatten(__node.flatten.fold(_root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
          case tag =>
            if (_unknownFields__ == null) {
              _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
            }
            _unknownFields__.parseField(tag, _input__)
        }
      }
      mdg.engine.proto.reports.Trace.QueryPlanNode(
          node = __node,
          unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
      )
    }
    implicit def messageReads: _root_.scalapb.descriptors.Reads[mdg.engine.proto.reports.Trace.QueryPlanNode] = _root_.scalapb.descriptors.Reads{
      case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
        _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
        mdg.engine.proto.reports.Trace.QueryPlanNode(
          node = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).flatMap(_.as[_root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode]]).map(mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Sequence(_))
              .orElse[mdg.engine.proto.reports.Trace.QueryPlanNode.Node](__fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode]]).map(mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Parallel(_)))
              .orElse[mdg.engine.proto.reports.Trace.QueryPlanNode.Node](__fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).flatMap(_.as[_root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode]]).map(mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Fetch(_)))
              .orElse[mdg.engine.proto.reports.Trace.QueryPlanNode.Node](__fieldsMap.get(scalaDescriptor.findFieldByNumber(4).get).flatMap(_.as[_root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode]]).map(mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Flatten(_)))
              .getOrElse(mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Empty)
        )
      case _ => throw new RuntimeException("Expected PMessage")
    }
    def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = mdg.engine.proto.reports.Trace.javaDescriptor.getNestedTypes().get(6)
    def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = mdg.engine.proto.reports.Trace.scalaDescriptor.nestedMessages(6)
    def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
      var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
      (__number: @_root_.scala.unchecked) match {
        case 1 => __out = mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode
        case 2 => __out = mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode
        case 3 => __out = mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode
        case 4 => __out = mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode
      }
      __out
    }
    lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] =
      Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]](
        _root_.mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode,
        _root_.mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode,
        _root_.mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode,
        _root_.mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode,
        _root_.mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement
      )
    def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
    lazy val defaultInstance = mdg.engine.proto.reports.Trace.QueryPlanNode(
      node = mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Empty
    )
    sealed trait Node extends _root_.scalapb.GeneratedOneof {
      def isEmpty: _root_.scala.Boolean = false
      def isDefined: _root_.scala.Boolean = true
      def isSequence: _root_.scala.Boolean = false
      def isParallel: _root_.scala.Boolean = false
      def isFetch: _root_.scala.Boolean = false
      def isFlatten: _root_.scala.Boolean = false
      def sequence: _root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode] = _root_.scala.None
      def parallel: _root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode] = _root_.scala.None
      def fetch: _root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode] = _root_.scala.None
      def flatten: _root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode] = _root_.scala.None
    }
    object Node {
      @SerialVersionUID(0L)
      case object Empty extends mdg.engine.proto.reports.Trace.QueryPlanNode.Node {
        type ValueType = _root_.scala.Nothing
        override def isEmpty: _root_.scala.Boolean = true
        override def isDefined: _root_.scala.Boolean = false
        override def number: _root_.scala.Int = 0
        override def value: _root_.scala.Nothing = throw new java.util.NoSuchElementException("Empty.value")
      }
    
      @SerialVersionUID(0L)
      final case class Sequence(value: mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode) extends mdg.engine.proto.reports.Trace.QueryPlanNode.Node {
        type ValueType = mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode
        override def isSequence: _root_.scala.Boolean = true
        override def sequence: _root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode] = Some(value)
        override def number: _root_.scala.Int = 1
      }
      @SerialVersionUID(0L)
      final case class Parallel(value: mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode) extends mdg.engine.proto.reports.Trace.QueryPlanNode.Node {
        type ValueType = mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode
        override def isParallel: _root_.scala.Boolean = true
        override def parallel: _root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode] = Some(value)
        override def number: _root_.scala.Int = 2
      }
      @SerialVersionUID(0L)
      final case class Fetch(value: mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode) extends mdg.engine.proto.reports.Trace.QueryPlanNode.Node {
        type ValueType = mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode
        override def isFetch: _root_.scala.Boolean = true
        override def fetch: _root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode] = Some(value)
        override def number: _root_.scala.Int = 3
      }
      @SerialVersionUID(0L)
      final case class Flatten(value: mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode) extends mdg.engine.proto.reports.Trace.QueryPlanNode.Node {
        type ValueType = mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode
        override def isFlatten: _root_.scala.Boolean = true
        override def flatten: _root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode] = Some(value)
        override def number: _root_.scala.Int = 4
      }
    }
    /** This represents a set of nodes to be executed sequentially by the Gateway executor
      */
    @SerialVersionUID(0L)
    final case class SequenceNode(
        nodes: _root_.scala.Seq[mdg.engine.proto.reports.Trace.QueryPlanNode] = _root_.scala.Seq.empty,
        unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
        ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[SequenceNode] {
        @transient
        private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
        private[this] def __computeSerializedSize(): _root_.scala.Int = {
          var __size = 0
          nodes.foreach { __item =>
            val __value = __item
            __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
          }
          __size += unknownFields.serializedSize
          __size
        }
        override def serializedSize: _root_.scala.Int = {
          var __size = __serializedSizeMemoized
          if (__size == 0) {
            __size = __computeSerializedSize() + 1
            __serializedSizeMemoized = __size
          }
          __size - 1
          
        }
        def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
          nodes.foreach { __v =>
            val __m = __v
            _output__.writeTag(1, 2)
            _output__.writeUInt32NoTag(__m.serializedSize)
            __m.writeTo(_output__)
          };
          unknownFields.writeTo(_output__)
        }
        def clearNodes = copy(nodes = _root_.scala.Seq.empty)
        def addNodes(__vs: mdg.engine.proto.reports.Trace.QueryPlanNode *): SequenceNode = addAllNodes(__vs)
        def addAllNodes(__vs: Iterable[mdg.engine.proto.reports.Trace.QueryPlanNode]): SequenceNode = copy(nodes = nodes ++ __vs)
        def withNodes(__v: _root_.scala.Seq[mdg.engine.proto.reports.Trace.QueryPlanNode]): SequenceNode = copy(nodes = __v)
        def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
        def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
        def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
          (__fieldNumber: @_root_.scala.unchecked) match {
            case 1 => nodes
          }
        }
        def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
          _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
          (__field.number: @_root_.scala.unchecked) match {
            case 1 => _root_.scalapb.descriptors.PRepeated(nodes.iterator.map(_.toPMessage).toVector)
          }
        }
        def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
        def companion: mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode.type = mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode
        // @@protoc_insertion_point(GeneratedMessage[mdg.engine.proto.Trace.QueryPlanNode.SequenceNode])
    }
    
    object SequenceNode extends scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode] {
      implicit def messageCompanion: scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode] = this
      def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode = {
        val __nodes: _root_.scala.collection.immutable.VectorBuilder[mdg.engine.proto.reports.Trace.QueryPlanNode] = new _root_.scala.collection.immutable.VectorBuilder[mdg.engine.proto.reports.Trace.QueryPlanNode]
        var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
        var _done__ = false
        while (!_done__) {
          val _tag__ = _input__.readTag()
          _tag__ match {
            case 0 => _done__ = true
            case 10 =>
              __nodes += _root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.QueryPlanNode](_input__)
            case tag =>
              if (_unknownFields__ == null) {
                _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
              }
              _unknownFields__.parseField(tag, _input__)
          }
        }
        mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode(
            nodes = __nodes.result(),
            unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
        )
      }
      implicit def messageReads: _root_.scalapb.descriptors.Reads[mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode] = _root_.scalapb.descriptors.Reads{
        case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
          _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
          mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode(
            nodes = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Seq[mdg.engine.proto.reports.Trace.QueryPlanNode]]).getOrElse(_root_.scala.Seq.empty)
          )
        case _ => throw new RuntimeException("Expected PMessage")
      }
      def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = mdg.engine.proto.reports.Trace.QueryPlanNode.javaDescriptor.getNestedTypes().get(0)
      def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = mdg.engine.proto.reports.Trace.QueryPlanNode.scalaDescriptor.nestedMessages(0)
      def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
        var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
        (__number: @_root_.scala.unchecked) match {
          case 1 => __out = mdg.engine.proto.reports.Trace.QueryPlanNode
        }
        __out
      }
      lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
      def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
      lazy val defaultInstance = mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode(
        nodes = _root_.scala.Seq.empty
      )
      implicit class SequenceNodeLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode](_l) {
        def nodes: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[mdg.engine.proto.reports.Trace.QueryPlanNode]] = field(_.nodes)((c_, f_) => c_.copy(nodes = f_))
      }
      final val NODES_FIELD_NUMBER = 1
      def of(
        nodes: _root_.scala.Seq[mdg.engine.proto.reports.Trace.QueryPlanNode]
      ): _root_.mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode = _root_.mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode(
        nodes
      )
      // @@protoc_insertion_point(GeneratedMessageCompanion[mdg.engine.proto.Trace.QueryPlanNode.SequenceNode])
    }
    
    /** This represents a set of nodes to be executed in parallel by the Gateway executor
      */
    @SerialVersionUID(0L)
    final case class ParallelNode(
        nodes: _root_.scala.Seq[mdg.engine.proto.reports.Trace.QueryPlanNode] = _root_.scala.Seq.empty,
        unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
        ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[ParallelNode] {
        @transient
        private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
        private[this] def __computeSerializedSize(): _root_.scala.Int = {
          var __size = 0
          nodes.foreach { __item =>
            val __value = __item
            __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
          }
          __size += unknownFields.serializedSize
          __size
        }
        override def serializedSize: _root_.scala.Int = {
          var __size = __serializedSizeMemoized
          if (__size == 0) {
            __size = __computeSerializedSize() + 1
            __serializedSizeMemoized = __size
          }
          __size - 1
          
        }
        def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
          nodes.foreach { __v =>
            val __m = __v
            _output__.writeTag(1, 2)
            _output__.writeUInt32NoTag(__m.serializedSize)
            __m.writeTo(_output__)
          };
          unknownFields.writeTo(_output__)
        }
        def clearNodes = copy(nodes = _root_.scala.Seq.empty)
        def addNodes(__vs: mdg.engine.proto.reports.Trace.QueryPlanNode *): ParallelNode = addAllNodes(__vs)
        def addAllNodes(__vs: Iterable[mdg.engine.proto.reports.Trace.QueryPlanNode]): ParallelNode = copy(nodes = nodes ++ __vs)
        def withNodes(__v: _root_.scala.Seq[mdg.engine.proto.reports.Trace.QueryPlanNode]): ParallelNode = copy(nodes = __v)
        def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
        def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
        def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
          (__fieldNumber: @_root_.scala.unchecked) match {
            case 1 => nodes
          }
        }
        def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
          _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
          (__field.number: @_root_.scala.unchecked) match {
            case 1 => _root_.scalapb.descriptors.PRepeated(nodes.iterator.map(_.toPMessage).toVector)
          }
        }
        def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
        def companion: mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode.type = mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode
        // @@protoc_insertion_point(GeneratedMessage[mdg.engine.proto.Trace.QueryPlanNode.ParallelNode])
    }
    
    object ParallelNode extends scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode] {
      implicit def messageCompanion: scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode] = this
      def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode = {
        val __nodes: _root_.scala.collection.immutable.VectorBuilder[mdg.engine.proto.reports.Trace.QueryPlanNode] = new _root_.scala.collection.immutable.VectorBuilder[mdg.engine.proto.reports.Trace.QueryPlanNode]
        var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
        var _done__ = false
        while (!_done__) {
          val _tag__ = _input__.readTag()
          _tag__ match {
            case 0 => _done__ = true
            case 10 =>
              __nodes += _root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.QueryPlanNode](_input__)
            case tag =>
              if (_unknownFields__ == null) {
                _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
              }
              _unknownFields__.parseField(tag, _input__)
          }
        }
        mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode(
            nodes = __nodes.result(),
            unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
        )
      }
      implicit def messageReads: _root_.scalapb.descriptors.Reads[mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode] = _root_.scalapb.descriptors.Reads{
        case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
          _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
          mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode(
            nodes = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Seq[mdg.engine.proto.reports.Trace.QueryPlanNode]]).getOrElse(_root_.scala.Seq.empty)
          )
        case _ => throw new RuntimeException("Expected PMessage")
      }
      def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = mdg.engine.proto.reports.Trace.QueryPlanNode.javaDescriptor.getNestedTypes().get(1)
      def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = mdg.engine.proto.reports.Trace.QueryPlanNode.scalaDescriptor.nestedMessages(1)
      def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
        var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
        (__number: @_root_.scala.unchecked) match {
          case 1 => __out = mdg.engine.proto.reports.Trace.QueryPlanNode
        }
        __out
      }
      lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
      def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
      lazy val defaultInstance = mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode(
        nodes = _root_.scala.Seq.empty
      )
      implicit class ParallelNodeLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode](_l) {
        def nodes: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[mdg.engine.proto.reports.Trace.QueryPlanNode]] = field(_.nodes)((c_, f_) => c_.copy(nodes = f_))
      }
      final val NODES_FIELD_NUMBER = 1
      def of(
        nodes: _root_.scala.Seq[mdg.engine.proto.reports.Trace.QueryPlanNode]
      ): _root_.mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode = _root_.mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode(
        nodes
      )
      // @@protoc_insertion_point(GeneratedMessageCompanion[mdg.engine.proto.Trace.QueryPlanNode.ParallelNode])
    }
    
    /** This represents a node to send an operation to an implementing service
      *
      * @param serviceName
      *   XXX When we want to include more details about the sub-operation that was
      *   executed against this service, we should include that here in each fetch node.
      *   This might include an operation signature, requires directive, reference resolutions, etc.
      * @param trace
      *   This Trace only contains start_time, end_time, duration_ns, and root;
      *   all timings were calculated **on the federated service**, and clock skew
      *   will be handled by the ingress server.
      * @param sentTimeOffset
      *   relative to the outer trace's start_time, in ns, measured in the gateway.
      * @param sentTime
      *   Wallclock times measured in the gateway for when this operation was
      *   sent and received.
      */
    @SerialVersionUID(0L)
    final case class FetchNode(
        serviceName: _root_.scala.Predef.String = "",
        traceParsingFailed: _root_.scala.Boolean = false,
        trace: _root_.scala.Option[mdg.engine.proto.reports.Trace] = _root_.scala.None,
        sentTimeOffset: _root_.scala.Long = 0L,
        sentTime: _root_.scala.Option[com.google.protobuf.timestamp.Timestamp] = _root_.scala.None,
        receivedTime: _root_.scala.Option[com.google.protobuf.timestamp.Timestamp] = _root_.scala.None,
        unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
        ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[FetchNode] {
        @transient
        private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
        private[this] def __computeSerializedSize(): _root_.scala.Int = {
          var __size = 0
          
          {
            val __value = serviceName
            if (!__value.isEmpty) {
              __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value)
            }
          };
          
          {
            val __value = traceParsingFailed
            if (__value != false) {
              __size += _root_.com.google.protobuf.CodedOutputStream.computeBoolSize(2, __value)
            }
          };
          if (trace.isDefined) {
            val __value = trace.get
            __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
          };
          
          {
            val __value = sentTimeOffset
            if (__value != 0L) {
              __size += _root_.com.google.protobuf.CodedOutputStream.computeUInt64Size(4, __value)
            }
          };
          if (sentTime.isDefined) {
            val __value = sentTime.get
            __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
          };
          if (receivedTime.isDefined) {
            val __value = receivedTime.get
            __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
          };
          __size += unknownFields.serializedSize
          __size
        }
        override def serializedSize: _root_.scala.Int = {
          var __size = __serializedSizeMemoized
          if (__size == 0) {
            __size = __computeSerializedSize() + 1
            __serializedSizeMemoized = __size
          }
          __size - 1
          
        }
        def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
          {
            val __v = serviceName
            if (!__v.isEmpty) {
              _output__.writeString(1, __v)
            }
          };
          {
            val __v = traceParsingFailed
            if (__v != false) {
              _output__.writeBool(2, __v)
            }
          };
          trace.foreach { __v =>
            val __m = __v
            _output__.writeTag(3, 2)
            _output__.writeUInt32NoTag(__m.serializedSize)
            __m.writeTo(_output__)
          };
          {
            val __v = sentTimeOffset
            if (__v != 0L) {
              _output__.writeUInt64(4, __v)
            }
          };
          sentTime.foreach { __v =>
            val __m = __v
            _output__.writeTag(5, 2)
            _output__.writeUInt32NoTag(__m.serializedSize)
            __m.writeTo(_output__)
          };
          receivedTime.foreach { __v =>
            val __m = __v
            _output__.writeTag(6, 2)
            _output__.writeUInt32NoTag(__m.serializedSize)
            __m.writeTo(_output__)
          };
          unknownFields.writeTo(_output__)
        }
        def withServiceName(__v: _root_.scala.Predef.String): FetchNode = copy(serviceName = __v)
        def withTraceParsingFailed(__v: _root_.scala.Boolean): FetchNode = copy(traceParsingFailed = __v)
        def getTrace: mdg.engine.proto.reports.Trace = trace.getOrElse(mdg.engine.proto.reports.Trace.defaultInstance)
        def clearTrace: FetchNode = copy(trace = _root_.scala.None)
        def withTrace(__v: mdg.engine.proto.reports.Trace): FetchNode = copy(trace = Option(__v))
        def withSentTimeOffset(__v: _root_.scala.Long): FetchNode = copy(sentTimeOffset = __v)
        def getSentTime: com.google.protobuf.timestamp.Timestamp = sentTime.getOrElse(com.google.protobuf.timestamp.Timestamp.defaultInstance)
        def clearSentTime: FetchNode = copy(sentTime = _root_.scala.None)
        def withSentTime(__v: com.google.protobuf.timestamp.Timestamp): FetchNode = copy(sentTime = Option(__v))
        def getReceivedTime: com.google.protobuf.timestamp.Timestamp = receivedTime.getOrElse(com.google.protobuf.timestamp.Timestamp.defaultInstance)
        def clearReceivedTime: FetchNode = copy(receivedTime = _root_.scala.None)
        def withReceivedTime(__v: com.google.protobuf.timestamp.Timestamp): FetchNode = copy(receivedTime = Option(__v))
        def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
        def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
        def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
          (__fieldNumber: @_root_.scala.unchecked) match {
            case 1 => {
              val __t = serviceName
              if (__t != "") __t else null
            }
            case 2 => {
              val __t = traceParsingFailed
              if (__t != false) __t else null
            }
            case 3 => trace.orNull
            case 4 => {
              val __t = sentTimeOffset
              if (__t != 0L) __t else null
            }
            case 5 => sentTime.orNull
            case 6 => receivedTime.orNull
          }
        }
        def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
          _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
          (__field.number: @_root_.scala.unchecked) match {
            case 1 => _root_.scalapb.descriptors.PString(serviceName)
            case 2 => _root_.scalapb.descriptors.PBoolean(traceParsingFailed)
            case 3 => trace.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
            case 4 => _root_.scalapb.descriptors.PLong(sentTimeOffset)
            case 5 => sentTime.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
            case 6 => receivedTime.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          }
        }
        def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
        def companion: mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode.type = mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode
        // @@protoc_insertion_point(GeneratedMessage[mdg.engine.proto.Trace.QueryPlanNode.FetchNode])
    }
    
    object FetchNode extends scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode] {
      implicit def messageCompanion: scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode] = this
      def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode = {
        var __serviceName: _root_.scala.Predef.String = ""
        var __traceParsingFailed: _root_.scala.Boolean = false
        var __trace: _root_.scala.Option[mdg.engine.proto.reports.Trace] = _root_.scala.None
        var __sentTimeOffset: _root_.scala.Long = 0L
        var __sentTime: _root_.scala.Option[com.google.protobuf.timestamp.Timestamp] = _root_.scala.None
        var __receivedTime: _root_.scala.Option[com.google.protobuf.timestamp.Timestamp] = _root_.scala.None
        var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
        var _done__ = false
        while (!_done__) {
          val _tag__ = _input__.readTag()
          _tag__ match {
            case 0 => _done__ = true
            case 10 =>
              __serviceName = _input__.readStringRequireUtf8()
            case 16 =>
              __traceParsingFailed = _input__.readBool()
            case 26 =>
              __trace = _root_.scala.Option(__trace.fold(_root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
            case 32 =>
              __sentTimeOffset = _input__.readUInt64()
            case 42 =>
              __sentTime = _root_.scala.Option(__sentTime.fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.timestamp.Timestamp](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
            case 50 =>
              __receivedTime = _root_.scala.Option(__receivedTime.fold(_root_.scalapb.LiteParser.readMessage[com.google.protobuf.timestamp.Timestamp](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
            case tag =>
              if (_unknownFields__ == null) {
                _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
              }
              _unknownFields__.parseField(tag, _input__)
          }
        }
        mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode(
            serviceName = __serviceName,
            traceParsingFailed = __traceParsingFailed,
            trace = __trace,
            sentTimeOffset = __sentTimeOffset,
            sentTime = __sentTime,
            receivedTime = __receivedTime,
            unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
        )
      }
      implicit def messageReads: _root_.scalapb.descriptors.Reads[mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode] = _root_.scalapb.descriptors.Reads{
        case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
          _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
          mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode(
            serviceName = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Predef.String]).getOrElse(""),
            traceParsingFailed = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).map(_.as[_root_.scala.Boolean]).getOrElse(false),
            trace = __fieldsMap.get(scalaDescriptor.findFieldByNumber(3).get).flatMap(_.as[_root_.scala.Option[mdg.engine.proto.reports.Trace]]),
            sentTimeOffset = __fieldsMap.get(scalaDescriptor.findFieldByNumber(4).get).map(_.as[_root_.scala.Long]).getOrElse(0L),
            sentTime = __fieldsMap.get(scalaDescriptor.findFieldByNumber(5).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.timestamp.Timestamp]]),
            receivedTime = __fieldsMap.get(scalaDescriptor.findFieldByNumber(6).get).flatMap(_.as[_root_.scala.Option[com.google.protobuf.timestamp.Timestamp]])
          )
        case _ => throw new RuntimeException("Expected PMessage")
      }
      def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = mdg.engine.proto.reports.Trace.QueryPlanNode.javaDescriptor.getNestedTypes().get(2)
      def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = mdg.engine.proto.reports.Trace.QueryPlanNode.scalaDescriptor.nestedMessages(2)
      def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
        var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
        (__number: @_root_.scala.unchecked) match {
          case 3 => __out = mdg.engine.proto.reports.Trace
          case 5 => __out = com.google.protobuf.timestamp.Timestamp
          case 6 => __out = com.google.protobuf.timestamp.Timestamp
        }
        __out
      }
      lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
      def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
      lazy val defaultInstance = mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode(
        serviceName = "",
        traceParsingFailed = false,
        trace = _root_.scala.None,
        sentTimeOffset = 0L,
        sentTime = _root_.scala.None,
        receivedTime = _root_.scala.None
      )
      implicit class FetchNodeLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode](_l) {
        def serviceName: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.serviceName)((c_, f_) => c_.copy(serviceName = f_))
        def traceParsingFailed: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.traceParsingFailed)((c_, f_) => c_.copy(traceParsingFailed = f_))
        def trace: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace] = field(_.getTrace)((c_, f_) => c_.copy(trace = _root_.scala.Option(f_)))
        def optionalTrace: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[mdg.engine.proto.reports.Trace]] = field(_.trace)((c_, f_) => c_.copy(trace = f_))
        def sentTimeOffset: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Long] = field(_.sentTimeOffset)((c_, f_) => c_.copy(sentTimeOffset = f_))
        def sentTime: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.timestamp.Timestamp] = field(_.getSentTime)((c_, f_) => c_.copy(sentTime = _root_.scala.Option(f_)))
        def optionalSentTime: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[com.google.protobuf.timestamp.Timestamp]] = field(_.sentTime)((c_, f_) => c_.copy(sentTime = f_))
        def receivedTime: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.timestamp.Timestamp] = field(_.getReceivedTime)((c_, f_) => c_.copy(receivedTime = _root_.scala.Option(f_)))
        def optionalReceivedTime: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[com.google.protobuf.timestamp.Timestamp]] = field(_.receivedTime)((c_, f_) => c_.copy(receivedTime = f_))
      }
      final val SERVICE_NAME_FIELD_NUMBER = 1
      final val TRACE_PARSING_FAILED_FIELD_NUMBER = 2
      final val TRACE_FIELD_NUMBER = 3
      final val SENT_TIME_OFFSET_FIELD_NUMBER = 4
      final val SENT_TIME_FIELD_NUMBER = 5
      final val RECEIVED_TIME_FIELD_NUMBER = 6
      def of(
        serviceName: _root_.scala.Predef.String,
        traceParsingFailed: _root_.scala.Boolean,
        trace: _root_.scala.Option[mdg.engine.proto.reports.Trace],
        sentTimeOffset: _root_.scala.Long,
        sentTime: _root_.scala.Option[com.google.protobuf.timestamp.Timestamp],
        receivedTime: _root_.scala.Option[com.google.protobuf.timestamp.Timestamp]
      ): _root_.mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode = _root_.mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode(
        serviceName,
        traceParsingFailed,
        trace,
        sentTimeOffset,
        sentTime,
        receivedTime
      )
      // @@protoc_insertion_point(GeneratedMessageCompanion[mdg.engine.proto.Trace.QueryPlanNode.FetchNode])
    }
    
    /** This node represents a way to reach into the response path and attach related entities.
      * XXX Flatten is really not the right name and this node may be renamed in the query planner.
      */
    @SerialVersionUID(0L)
    final case class FlattenNode(
        responsePath: _root_.scala.Seq[mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement] = _root_.scala.Seq.empty,
        node: _root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode] = _root_.scala.None,
        unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
        ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[FlattenNode] {
        @transient
        private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
        private[this] def __computeSerializedSize(): _root_.scala.Int = {
          var __size = 0
          responsePath.foreach { __item =>
            val __value = __item
            __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
          }
          if (node.isDefined) {
            val __value = node.get
            __size += 1 + _root_.com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(__value.serializedSize) + __value.serializedSize
          };
          __size += unknownFields.serializedSize
          __size
        }
        override def serializedSize: _root_.scala.Int = {
          var __size = __serializedSizeMemoized
          if (__size == 0) {
            __size = __computeSerializedSize() + 1
            __serializedSizeMemoized = __size
          }
          __size - 1
          
        }
        def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
          responsePath.foreach { __v =>
            val __m = __v
            _output__.writeTag(1, 2)
            _output__.writeUInt32NoTag(__m.serializedSize)
            __m.writeTo(_output__)
          };
          node.foreach { __v =>
            val __m = __v
            _output__.writeTag(2, 2)
            _output__.writeUInt32NoTag(__m.serializedSize)
            __m.writeTo(_output__)
          };
          unknownFields.writeTo(_output__)
        }
        def clearResponsePath = copy(responsePath = _root_.scala.Seq.empty)
        def addResponsePath(__vs: mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement *): FlattenNode = addAllResponsePath(__vs)
        def addAllResponsePath(__vs: Iterable[mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement]): FlattenNode = copy(responsePath = responsePath ++ __vs)
        def withResponsePath(__v: _root_.scala.Seq[mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement]): FlattenNode = copy(responsePath = __v)
        def getNode: mdg.engine.proto.reports.Trace.QueryPlanNode = node.getOrElse(mdg.engine.proto.reports.Trace.QueryPlanNode.defaultInstance)
        def clearNode: FlattenNode = copy(node = _root_.scala.None)
        def withNode(__v: mdg.engine.proto.reports.Trace.QueryPlanNode): FlattenNode = copy(node = Option(__v))
        def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
        def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
        def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
          (__fieldNumber: @_root_.scala.unchecked) match {
            case 1 => responsePath
            case 2 => node.orNull
          }
        }
        def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
          _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
          (__field.number: @_root_.scala.unchecked) match {
            case 1 => _root_.scalapb.descriptors.PRepeated(responsePath.iterator.map(_.toPMessage).toVector)
            case 2 => node.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
          }
        }
        def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
        def companion: mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode.type = mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode
        // @@protoc_insertion_point(GeneratedMessage[mdg.engine.proto.Trace.QueryPlanNode.FlattenNode])
    }
    
    object FlattenNode extends scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode] {
      implicit def messageCompanion: scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode] = this
      def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode = {
        val __responsePath: _root_.scala.collection.immutable.VectorBuilder[mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement] = new _root_.scala.collection.immutable.VectorBuilder[mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement]
        var __node: _root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode] = _root_.scala.None
        var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
        var _done__ = false
        while (!_done__) {
          val _tag__ = _input__.readTag()
          _tag__ match {
            case 0 => _done__ = true
            case 10 =>
              __responsePath += _root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement](_input__)
            case 18 =>
              __node = _root_.scala.Option(__node.fold(_root_.scalapb.LiteParser.readMessage[mdg.engine.proto.reports.Trace.QueryPlanNode](_input__))(_root_.scalapb.LiteParser.readMessage(_input__, _)))
            case tag =>
              if (_unknownFields__ == null) {
                _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
              }
              _unknownFields__.parseField(tag, _input__)
          }
        }
        mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode(
            responsePath = __responsePath.result(),
            node = __node,
            unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
        )
      }
      implicit def messageReads: _root_.scalapb.descriptors.Reads[mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode] = _root_.scalapb.descriptors.Reads{
        case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
          _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
          mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode(
            responsePath = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).map(_.as[_root_.scala.Seq[mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement]]).getOrElse(_root_.scala.Seq.empty),
            node = __fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode]])
          )
        case _ => throw new RuntimeException("Expected PMessage")
      }
      def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = mdg.engine.proto.reports.Trace.QueryPlanNode.javaDescriptor.getNestedTypes().get(3)
      def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = mdg.engine.proto.reports.Trace.QueryPlanNode.scalaDescriptor.nestedMessages(3)
      def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = {
        var __out: _root_.scalapb.GeneratedMessageCompanion[_] = null
        (__number: @_root_.scala.unchecked) match {
          case 1 => __out = mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement
          case 2 => __out = mdg.engine.proto.reports.Trace.QueryPlanNode
        }
        __out
      }
      lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
      def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
      lazy val defaultInstance = mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode(
        responsePath = _root_.scala.Seq.empty,
        node = _root_.scala.None
      )
      implicit class FlattenNodeLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode](_l) {
        def responsePath: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Seq[mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement]] = field(_.responsePath)((c_, f_) => c_.copy(responsePath = f_))
        def node: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.QueryPlanNode] = field(_.getNode)((c_, f_) => c_.copy(node = _root_.scala.Option(f_)))
        def optionalNode: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode]] = field(_.node)((c_, f_) => c_.copy(node = f_))
      }
      final val RESPONSE_PATH_FIELD_NUMBER = 1
      final val NODE_FIELD_NUMBER = 2
      def of(
        responsePath: _root_.scala.Seq[mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement],
        node: _root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode]
      ): _root_.mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode = _root_.mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode(
        responsePath,
        node
      )
      // @@protoc_insertion_point(GeneratedMessageCompanion[mdg.engine.proto.Trace.QueryPlanNode.FlattenNode])
    }
    
    @SerialVersionUID(0L)
    final case class ResponsePathElement(
        id: mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id = mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id.Empty,
        unknownFields: _root_.scalapb.UnknownFieldSet = _root_.scalapb.UnknownFieldSet.empty
        ) extends scalapb.GeneratedMessage with scalapb.lenses.Updatable[ResponsePathElement] {
        @transient
        private[this] var __serializedSizeMemoized: _root_.scala.Int = 0
        private[this] def __computeSerializedSize(): _root_.scala.Int = {
          var __size = 0
          if (id.fieldName.isDefined) {
            val __value = id.fieldName.get
            __size += _root_.com.google.protobuf.CodedOutputStream.computeStringSize(1, __value)
          };
          if (id.index.isDefined) {
            val __value = id.index.get
            __size += _root_.com.google.protobuf.CodedOutputStream.computeUInt32Size(2, __value)
          };
          __size += unknownFields.serializedSize
          __size
        }
        override def serializedSize: _root_.scala.Int = {
          var __size = __serializedSizeMemoized
          if (__size == 0) {
            __size = __computeSerializedSize() + 1
            __serializedSizeMemoized = __size
          }
          __size - 1
          
        }
        def writeTo(`_output__`: _root_.com.google.protobuf.CodedOutputStream): _root_.scala.Unit = {
          id.fieldName.foreach { __v =>
            val __m = __v
            _output__.writeString(1, __m)
          };
          id.index.foreach { __v =>
            val __m = __v
            _output__.writeUInt32(2, __m)
          };
          unknownFields.writeTo(_output__)
        }
        def getFieldName: _root_.scala.Predef.String = id.fieldName.getOrElse("")
        def withFieldName(__v: _root_.scala.Predef.String): ResponsePathElement = copy(id = mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id.FieldName(__v))
        def getIndex: _root_.scala.Int = id.index.getOrElse(0)
        def withIndex(__v: _root_.scala.Int): ResponsePathElement = copy(id = mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id.Index(__v))
        def clearId: ResponsePathElement = copy(id = mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id.Empty)
        def withId(__v: mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id): ResponsePathElement = copy(id = __v)
        def withUnknownFields(__v: _root_.scalapb.UnknownFieldSet) = copy(unknownFields = __v)
        def discardUnknownFields = copy(unknownFields = _root_.scalapb.UnknownFieldSet.empty)
        def getFieldByNumber(__fieldNumber: _root_.scala.Int): _root_.scala.Any = {
          (__fieldNumber: @_root_.scala.unchecked) match {
            case 1 => id.fieldName.orNull
            case 2 => id.index.orNull
          }
        }
        def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
          _root_.scala.Predef.require(__field.containingMessage eq companion.scalaDescriptor)
          (__field.number: @_root_.scala.unchecked) match {
            case 1 => id.fieldName.map(_root_.scalapb.descriptors.PString(_)).getOrElse(_root_.scalapb.descriptors.PEmpty)
            case 2 => id.index.map(_root_.scalapb.descriptors.PInt(_)).getOrElse(_root_.scalapb.descriptors.PEmpty)
          }
        }
        def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
        def companion: mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.type = mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement
        // @@protoc_insertion_point(GeneratedMessage[mdg.engine.proto.Trace.QueryPlanNode.ResponsePathElement])
    }
    
    object ResponsePathElement extends scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement] {
      implicit def messageCompanion: scalapb.GeneratedMessageCompanion[mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement] = this
      def parseFrom(`_input__`: _root_.com.google.protobuf.CodedInputStream): mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement = {
        var __id: mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id = mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id.Empty
        var `_unknownFields__`: _root_.scalapb.UnknownFieldSet.Builder = null
        var _done__ = false
        while (!_done__) {
          val _tag__ = _input__.readTag()
          _tag__ match {
            case 0 => _done__ = true
            case 10 =>
              __id = mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id.FieldName(_input__.readStringRequireUtf8())
            case 16 =>
              __id = mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id.Index(_input__.readUInt32())
            case tag =>
              if (_unknownFields__ == null) {
                _unknownFields__ = new _root_.scalapb.UnknownFieldSet.Builder()
              }
              _unknownFields__.parseField(tag, _input__)
          }
        }
        mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement(
            id = __id,
            unknownFields = if (_unknownFields__ == null) _root_.scalapb.UnknownFieldSet.empty else _unknownFields__.result()
        )
      }
      implicit def messageReads: _root_.scalapb.descriptors.Reads[mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement] = _root_.scalapb.descriptors.Reads{
        case _root_.scalapb.descriptors.PMessage(__fieldsMap) =>
          _root_.scala.Predef.require(__fieldsMap.keys.forall(_.containingMessage eq scalaDescriptor), "FieldDescriptor does not match message type.")
          mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement(
            id = __fieldsMap.get(scalaDescriptor.findFieldByNumber(1).get).flatMap(_.as[_root_.scala.Option[_root_.scala.Predef.String]]).map(mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id.FieldName(_))
                .orElse[mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id](__fieldsMap.get(scalaDescriptor.findFieldByNumber(2).get).flatMap(_.as[_root_.scala.Option[_root_.scala.Int]]).map(mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id.Index(_)))
                .getOrElse(mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id.Empty)
          )
        case _ => throw new RuntimeException("Expected PMessage")
      }
      def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = mdg.engine.proto.reports.Trace.QueryPlanNode.javaDescriptor.getNestedTypes().get(4)
      def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = mdg.engine.proto.reports.Trace.QueryPlanNode.scalaDescriptor.nestedMessages(4)
      def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
      lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
      def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
      lazy val defaultInstance = mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement(
        id = mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id.Empty
      )
      sealed trait Id extends _root_.scalapb.GeneratedOneof {
        def isEmpty: _root_.scala.Boolean = false
        def isDefined: _root_.scala.Boolean = true
        def isFieldName: _root_.scala.Boolean = false
        def isIndex: _root_.scala.Boolean = false
        def fieldName: _root_.scala.Option[_root_.scala.Predef.String] = _root_.scala.None
        def index: _root_.scala.Option[_root_.scala.Int] = _root_.scala.None
      }
      object Id {
        @SerialVersionUID(0L)
        case object Empty extends mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id {
          type ValueType = _root_.scala.Nothing
          override def isEmpty: _root_.scala.Boolean = true
          override def isDefined: _root_.scala.Boolean = false
          override def number: _root_.scala.Int = 0
          override def value: _root_.scala.Nothing = throw new java.util.NoSuchElementException("Empty.value")
        }
      
        @SerialVersionUID(0L)
        final case class FieldName(value: _root_.scala.Predef.String) extends mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id {
          type ValueType = _root_.scala.Predef.String
          override def isFieldName: _root_.scala.Boolean = true
          override def fieldName: _root_.scala.Option[_root_.scala.Predef.String] = Some(value)
          override def number: _root_.scala.Int = 1
        }
        @SerialVersionUID(0L)
        final case class Index(value: _root_.scala.Int) extends mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id {
          type ValueType = _root_.scala.Int
          override def isIndex: _root_.scala.Boolean = true
          override def index: _root_.scala.Option[_root_.scala.Int] = Some(value)
          override def number: _root_.scala.Int = 2
        }
      }
      implicit class ResponsePathElementLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement](_l) {
        def fieldName: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.getFieldName)((c_, f_) => c_.copy(id = mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id.FieldName(f_)))
        def index: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Int] = field(_.getIndex)((c_, f_) => c_.copy(id = mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id.Index(f_)))
        def id: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id] = field(_.id)((c_, f_) => c_.copy(id = f_))
      }
      final val FIELD_NAME_FIELD_NUMBER = 1
      final val INDEX_FIELD_NUMBER = 2
      def of(
        id: mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement.Id
      ): _root_.mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement = _root_.mdg.engine.proto.reports.Trace.QueryPlanNode.ResponsePathElement(
        id
      )
      // @@protoc_insertion_point(GeneratedMessageCompanion[mdg.engine.proto.Trace.QueryPlanNode.ResponsePathElement])
    }
    
    implicit class QueryPlanNodeLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.QueryPlanNode]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, mdg.engine.proto.reports.Trace.QueryPlanNode](_l) {
      def sequence: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.QueryPlanNode.SequenceNode] = field(_.getSequence)((c_, f_) => c_.copy(node = mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Sequence(f_)))
      def parallel: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.QueryPlanNode.ParallelNode] = field(_.getParallel)((c_, f_) => c_.copy(node = mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Parallel(f_)))
      def fetch: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.QueryPlanNode.FetchNode] = field(_.getFetch)((c_, f_) => c_.copy(node = mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Fetch(f_)))
      def flatten: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.QueryPlanNode.FlattenNode] = field(_.getFlatten)((c_, f_) => c_.copy(node = mdg.engine.proto.reports.Trace.QueryPlanNode.Node.Flatten(f_)))
      def node: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.QueryPlanNode.Node] = field(_.node)((c_, f_) => c_.copy(node = f_))
    }
    final val SEQUENCE_FIELD_NUMBER = 1
    final val PARALLEL_FIELD_NUMBER = 2
    final val FETCH_FIELD_NUMBER = 3
    final val FLATTEN_FIELD_NUMBER = 4
    def of(
      node: mdg.engine.proto.reports.Trace.QueryPlanNode.Node
    ): _root_.mdg.engine.proto.reports.Trace.QueryPlanNode = _root_.mdg.engine.proto.reports.Trace.QueryPlanNode(
      node
    )
    // @@protoc_insertion_point(GeneratedMessageCompanion[mdg.engine.proto.Trace.QueryPlanNode])
  }
  
  implicit class TraceLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, mdg.engine.proto.reports.Trace](_l) {
    def startTime: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.timestamp.Timestamp] = field(_.getStartTime)((c_, f_) => c_.copy(startTime = _root_.scala.Option(f_)))
    def optionalStartTime: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[com.google.protobuf.timestamp.Timestamp]] = field(_.startTime)((c_, f_) => c_.copy(startTime = f_))
    def endTime: _root_.scalapb.lenses.Lens[UpperPB, com.google.protobuf.timestamp.Timestamp] = field(_.getEndTime)((c_, f_) => c_.copy(endTime = _root_.scala.Option(f_)))
    def optionalEndTime: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[com.google.protobuf.timestamp.Timestamp]] = field(_.endTime)((c_, f_) => c_.copy(endTime = f_))
    def durationNs: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Long] = field(_.durationNs)((c_, f_) => c_.copy(durationNs = f_))
    def root: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.Node] = field(_.getRoot)((c_, f_) => c_.copy(root = _root_.scala.Option(f_)))
    def optionalRoot: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[mdg.engine.proto.reports.Trace.Node]] = field(_.root)((c_, f_) => c_.copy(root = f_))
    def signature: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.signature)((c_, f_) => c_.copy(signature = f_))
    def unexecutedOperationBody: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.unexecutedOperationBody)((c_, f_) => c_.copy(unexecutedOperationBody = f_))
    def unexecutedOperationName: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.unexecutedOperationName)((c_, f_) => c_.copy(unexecutedOperationName = f_))
    def details: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.Details] = field(_.getDetails)((c_, f_) => c_.copy(details = _root_.scala.Option(f_)))
    def optionalDetails: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[mdg.engine.proto.reports.Trace.Details]] = field(_.details)((c_, f_) => c_.copy(details = f_))
    def clientName: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.clientName)((c_, f_) => c_.copy(clientName = f_))
    def clientVersion: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.clientVersion)((c_, f_) => c_.copy(clientVersion = f_))
    def clientAddress: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.clientAddress)((c_, f_) => c_.copy(clientAddress = f_))
    def clientReferenceId: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.clientReferenceId)((c_, f_) => c_.copy(clientReferenceId = f_))
    def http: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.HTTP] = field(_.getHttp)((c_, f_) => c_.copy(http = _root_.scala.Option(f_)))
    def optionalHttp: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[mdg.engine.proto.reports.Trace.HTTP]] = field(_.http)((c_, f_) => c_.copy(http = f_))
    def cachePolicy: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.CachePolicy] = field(_.getCachePolicy)((c_, f_) => c_.copy(cachePolicy = _root_.scala.Option(f_)))
    def optionalCachePolicy: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[mdg.engine.proto.reports.Trace.CachePolicy]] = field(_.cachePolicy)((c_, f_) => c_.copy(cachePolicy = f_))
    def queryPlan: _root_.scalapb.lenses.Lens[UpperPB, mdg.engine.proto.reports.Trace.QueryPlanNode] = field(_.getQueryPlan)((c_, f_) => c_.copy(queryPlan = _root_.scala.Option(f_)))
    def optionalQueryPlan: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode]] = field(_.queryPlan)((c_, f_) => c_.copy(queryPlan = f_))
    def fullQueryCacheHit: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.fullQueryCacheHit)((c_, f_) => c_.copy(fullQueryCacheHit = f_))
    def persistedQueryHit: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.persistedQueryHit)((c_, f_) => c_.copy(persistedQueryHit = f_))
    def persistedQueryRegister: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.persistedQueryRegister)((c_, f_) => c_.copy(persistedQueryRegister = f_))
    def registeredOperation: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.registeredOperation)((c_, f_) => c_.copy(registeredOperation = f_))
    def forbiddenOperation: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Boolean] = field(_.forbiddenOperation)((c_, f_) => c_.copy(forbiddenOperation = f_))
    def legacySignatureNeedsResigning: _root_.scalapb.lenses.Lens[UpperPB, _root_.scala.Predef.String] = field(_.legacySignatureNeedsResigning)((c_, f_) => c_.copy(legacySignatureNeedsResigning = f_))
  }
  final val START_TIME_FIELD_NUMBER = 4
  final val END_TIME_FIELD_NUMBER = 3
  final val DURATION_NS_FIELD_NUMBER = 11
  final val ROOT_FIELD_NUMBER = 14
  final val SIGNATURE_FIELD_NUMBER = 19
  final val UNEXECUTEDOPERATIONBODY_FIELD_NUMBER = 27
  final val UNEXECUTEDOPERATIONNAME_FIELD_NUMBER = 28
  final val DETAILS_FIELD_NUMBER = 6
  final val CLIENT_NAME_FIELD_NUMBER = 7
  final val CLIENT_VERSION_FIELD_NUMBER = 8
  final val CLIENT_ADDRESS_FIELD_NUMBER = 9
  final val CLIENT_REFERENCE_ID_FIELD_NUMBER = 23
  final val HTTP_FIELD_NUMBER = 10
  final val CACHE_POLICY_FIELD_NUMBER = 18
  final val QUERY_PLAN_FIELD_NUMBER = 26
  final val FULL_QUERY_CACHE_HIT_FIELD_NUMBER = 20
  final val PERSISTED_QUERY_HIT_FIELD_NUMBER = 21
  final val PERSISTED_QUERY_REGISTER_FIELD_NUMBER = 22
  final val REGISTERED_OPERATION_FIELD_NUMBER = 24
  final val FORBIDDEN_OPERATION_FIELD_NUMBER = 25
  final val LEGACY_SIGNATURE_NEEDS_RESIGNING_FIELD_NUMBER = 5
  def of(
    startTime: _root_.scala.Option[com.google.protobuf.timestamp.Timestamp],
    endTime: _root_.scala.Option[com.google.protobuf.timestamp.Timestamp],
    durationNs: _root_.scala.Long,
    root: _root_.scala.Option[mdg.engine.proto.reports.Trace.Node],
    signature: _root_.scala.Predef.String,
    unexecutedOperationBody: _root_.scala.Predef.String,
    unexecutedOperationName: _root_.scala.Predef.String,
    details: _root_.scala.Option[mdg.engine.proto.reports.Trace.Details],
    clientName: _root_.scala.Predef.String,
    clientVersion: _root_.scala.Predef.String,
    clientAddress: _root_.scala.Predef.String,
    clientReferenceId: _root_.scala.Predef.String,
    http: _root_.scala.Option[mdg.engine.proto.reports.Trace.HTTP],
    cachePolicy: _root_.scala.Option[mdg.engine.proto.reports.Trace.CachePolicy],
    queryPlan: _root_.scala.Option[mdg.engine.proto.reports.Trace.QueryPlanNode],
    fullQueryCacheHit: _root_.scala.Boolean,
    persistedQueryHit: _root_.scala.Boolean,
    persistedQueryRegister: _root_.scala.Boolean,
    registeredOperation: _root_.scala.Boolean,
    forbiddenOperation: _root_.scala.Boolean,
    legacySignatureNeedsResigning: _root_.scala.Predef.String
  ): _root_.mdg.engine.proto.reports.Trace = _root_.mdg.engine.proto.reports.Trace(
    startTime,
    endTime,
    durationNs,
    root,
    signature,
    unexecutedOperationBody,
    unexecutedOperationName,
    details,
    clientName,
    clientVersion,
    clientAddress,
    clientReferenceId,
    http,
    cachePolicy,
    queryPlan,
    fullQueryCacheHit,
    persistedQueryHit,
    persistedQueryRegister,
    registeredOperation,
    forbiddenOperation,
    legacySignatureNeedsResigning
  )
  // @@protoc_insertion_point(GeneratedMessageCompanion[mdg.engine.proto.Trace])
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy