apollo-tracing-protobuf 0.1.0

A simple lib which expose generated rust file from Apollo Tracing protobuf configuration
Documentation
// This file is generated by rust-protobuf 2.18.0. Do not edit
// @generated

// https://github.com/rust-lang/rust-clippy/issues/702
#![allow(unknown_lints)]
#![allow(clippy::all)]
#![allow(unused_attributes)]
#![allow(box_pointers)]
#![allow(dead_code)]
#![allow(missing_docs)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
#![allow(non_upper_case_globals)]
#![allow(trivial_casts)]
#![allow(unused_imports)]
#![allow(unused_results)]
//! Generated file from `tracing.proto`

#[rustfmt::skip]
/// Generated files are compatible only with the same version
/// of protobuf runtime.
// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_18_0;

#[derive(PartialEq,Clone,Default)]
pub struct Trace {
    // message fields
    pub start_time: ::protobuf::SingularPtrField<::protobuf::well_known_types::Timestamp>,
    pub end_time: ::protobuf::SingularPtrField<::protobuf::well_known_types::Timestamp>,
    pub duration_ns: u64,
    pub root: ::protobuf::SingularPtrField<Trace_Node>,
    pub signature: ::std::string::String,
    pub unexecutedOperationBody: ::std::string::String,
    pub unexecutedOperationName: ::std::string::String,
    pub details: ::protobuf::SingularPtrField<Trace_Details>,
    pub client_name: ::std::string::String,
    pub client_version: ::std::string::String,
    pub client_address: ::std::string::String,
    pub client_reference_id: ::std::string::String,
    pub http: ::protobuf::SingularPtrField<Trace_HTTP>,
    pub cache_policy: ::protobuf::SingularPtrField<Trace_CachePolicy>,
    pub query_plan: ::protobuf::SingularPtrField<Trace_QueryPlanNode>,
    pub full_query_cache_hit: bool,
    pub persisted_query_hit: bool,
    pub persisted_query_register: bool,
    pub registered_operation: bool,
    pub forbidden_operation: bool,
    pub legacy_signature_needs_resigning: ::std::string::String,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a Trace {
    fn default() -> &'a Trace {
        <Trace as ::protobuf::Message>::default_instance()
    }
}

impl Trace {
    pub fn new() -> Trace {
        ::std::default::Default::default()
    }

    // .google.protobuf.Timestamp start_time = 4;

    pub fn get_start_time(&self) -> &::protobuf::well_known_types::Timestamp {
        self.start_time.as_ref().unwrap_or_else(|| {
            <::protobuf::well_known_types::Timestamp as ::protobuf::Message>::default_instance()
        })
    }
    pub fn clear_start_time(&mut self) {
        self.start_time.clear();
    }

    pub fn has_start_time(&self) -> bool {
        self.start_time.is_some()
    }

    // Param is passed by value, moved
    pub fn set_start_time(&mut self, v: ::protobuf::well_known_types::Timestamp) {
        self.start_time = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_start_time(&mut self) -> &mut ::protobuf::well_known_types::Timestamp {
        if self.start_time.is_none() {
            self.start_time.set_default();
        }
        self.start_time.as_mut().unwrap()
    }

    // Take field
    pub fn take_start_time(&mut self) -> ::protobuf::well_known_types::Timestamp {
        self.start_time
            .take()
            .unwrap_or_else(|| ::protobuf::well_known_types::Timestamp::new())
    }

    // .google.protobuf.Timestamp end_time = 3;

    pub fn get_end_time(&self) -> &::protobuf::well_known_types::Timestamp {
        self.end_time.as_ref().unwrap_or_else(|| {
            <::protobuf::well_known_types::Timestamp as ::protobuf::Message>::default_instance()
        })
    }
    pub fn clear_end_time(&mut self) {
        self.end_time.clear();
    }

    pub fn has_end_time(&self) -> bool {
        self.end_time.is_some()
    }

    // Param is passed by value, moved
    pub fn set_end_time(&mut self, v: ::protobuf::well_known_types::Timestamp) {
        self.end_time = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_end_time(&mut self) -> &mut ::protobuf::well_known_types::Timestamp {
        if self.end_time.is_none() {
            self.end_time.set_default();
        }
        self.end_time.as_mut().unwrap()
    }

    // Take field
    pub fn take_end_time(&mut self) -> ::protobuf::well_known_types::Timestamp {
        self.end_time
            .take()
            .unwrap_or_else(|| ::protobuf::well_known_types::Timestamp::new())
    }

    // uint64 duration_ns = 11;

    pub fn get_duration_ns(&self) -> u64 {
        self.duration_ns
    }
    pub fn clear_duration_ns(&mut self) {
        self.duration_ns = 0;
    }

    // Param is passed by value, moved
    pub fn set_duration_ns(&mut self, v: u64) {
        self.duration_ns = v;
    }

    // .mdg.engine.proto.Trace.Node root = 14;

    pub fn get_root(&self) -> &Trace_Node {
        self.root
            .as_ref()
            .unwrap_or_else(|| <Trace_Node as ::protobuf::Message>::default_instance())
    }
    pub fn clear_root(&mut self) {
        self.root.clear();
    }

    pub fn has_root(&self) -> bool {
        self.root.is_some()
    }

    // Param is passed by value, moved
    pub fn set_root(&mut self, v: Trace_Node) {
        self.root = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_root(&mut self) -> &mut Trace_Node {
        if self.root.is_none() {
            self.root.set_default();
        }
        self.root.as_mut().unwrap()
    }

    // Take field
    pub fn take_root(&mut self) -> Trace_Node {
        self.root.take().unwrap_or_else(|| Trace_Node::new())
    }

    // string signature = 19;

    pub fn get_signature(&self) -> &str {
        &self.signature
    }
    pub fn clear_signature(&mut self) {
        self.signature.clear();
    }

    // Param is passed by value, moved
    pub fn set_signature(&mut self, v: ::std::string::String) {
        self.signature = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_signature(&mut self) -> &mut ::std::string::String {
        &mut self.signature
    }

    // Take field
    pub fn take_signature(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.signature, ::std::string::String::new())
    }

    // string unexecutedOperationBody = 27;

    pub fn get_unexecutedOperationBody(&self) -> &str {
        &self.unexecutedOperationBody
    }
    pub fn clear_unexecutedOperationBody(&mut self) {
        self.unexecutedOperationBody.clear();
    }

    // Param is passed by value, moved
    pub fn set_unexecutedOperationBody(&mut self, v: ::std::string::String) {
        self.unexecutedOperationBody = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_unexecutedOperationBody(&mut self) -> &mut ::std::string::String {
        &mut self.unexecutedOperationBody
    }

    // Take field
    pub fn take_unexecutedOperationBody(&mut self) -> ::std::string::String {
        ::std::mem::replace(
            &mut self.unexecutedOperationBody,
            ::std::string::String::new(),
        )
    }

    // string unexecutedOperationName = 28;

    pub fn get_unexecutedOperationName(&self) -> &str {
        &self.unexecutedOperationName
    }
    pub fn clear_unexecutedOperationName(&mut self) {
        self.unexecutedOperationName.clear();
    }

    // Param is passed by value, moved
    pub fn set_unexecutedOperationName(&mut self, v: ::std::string::String) {
        self.unexecutedOperationName = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_unexecutedOperationName(&mut self) -> &mut ::std::string::String {
        &mut self.unexecutedOperationName
    }

    // Take field
    pub fn take_unexecutedOperationName(&mut self) -> ::std::string::String {
        ::std::mem::replace(
            &mut self.unexecutedOperationName,
            ::std::string::String::new(),
        )
    }

    // .mdg.engine.proto.Trace.Details details = 6;

    pub fn get_details(&self) -> &Trace_Details {
        self.details
            .as_ref()
            .unwrap_or_else(|| <Trace_Details as ::protobuf::Message>::default_instance())
    }
    pub fn clear_details(&mut self) {
        self.details.clear();
    }

    pub fn has_details(&self) -> bool {
        self.details.is_some()
    }

    // Param is passed by value, moved
    pub fn set_details(&mut self, v: Trace_Details) {
        self.details = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_details(&mut self) -> &mut Trace_Details {
        if self.details.is_none() {
            self.details.set_default();
        }
        self.details.as_mut().unwrap()
    }

    // Take field
    pub fn take_details(&mut self) -> Trace_Details {
        self.details.take().unwrap_or_else(|| Trace_Details::new())
    }

    // string client_name = 7;

    pub fn get_client_name(&self) -> &str {
        &self.client_name
    }
    pub fn clear_client_name(&mut self) {
        self.client_name.clear();
    }

    // Param is passed by value, moved
    pub fn set_client_name(&mut self, v: ::std::string::String) {
        self.client_name = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_client_name(&mut self) -> &mut ::std::string::String {
        &mut self.client_name
    }

    // Take field
    pub fn take_client_name(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.client_name, ::std::string::String::new())
    }

    // string client_version = 8;

    pub fn get_client_version(&self) -> &str {
        &self.client_version
    }
    pub fn clear_client_version(&mut self) {
        self.client_version.clear();
    }

    // Param is passed by value, moved
    pub fn set_client_version(&mut self, v: ::std::string::String) {
        self.client_version = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_client_version(&mut self) -> &mut ::std::string::String {
        &mut self.client_version
    }

    // Take field
    pub fn take_client_version(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.client_version, ::std::string::String::new())
    }

    // string client_address = 9;

    pub fn get_client_address(&self) -> &str {
        &self.client_address
    }
    pub fn clear_client_address(&mut self) {
        self.client_address.clear();
    }

    // Param is passed by value, moved
    pub fn set_client_address(&mut self, v: ::std::string::String) {
        self.client_address = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_client_address(&mut self) -> &mut ::std::string::String {
        &mut self.client_address
    }

    // Take field
    pub fn take_client_address(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.client_address, ::std::string::String::new())
    }

    // string client_reference_id = 23;

    pub fn get_client_reference_id(&self) -> &str {
        &self.client_reference_id
    }
    pub fn clear_client_reference_id(&mut self) {
        self.client_reference_id.clear();
    }

    // Param is passed by value, moved
    pub fn set_client_reference_id(&mut self, v: ::std::string::String) {
        self.client_reference_id = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_client_reference_id(&mut self) -> &mut ::std::string::String {
        &mut self.client_reference_id
    }

    // Take field
    pub fn take_client_reference_id(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.client_reference_id, ::std::string::String::new())
    }

    // .mdg.engine.proto.Trace.HTTP http = 10;

    pub fn get_http(&self) -> &Trace_HTTP {
        self.http
            .as_ref()
            .unwrap_or_else(|| <Trace_HTTP as ::protobuf::Message>::default_instance())
    }
    pub fn clear_http(&mut self) {
        self.http.clear();
    }

    pub fn has_http(&self) -> bool {
        self.http.is_some()
    }

    // Param is passed by value, moved
    pub fn set_http(&mut self, v: Trace_HTTP) {
        self.http = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_http(&mut self) -> &mut Trace_HTTP {
        if self.http.is_none() {
            self.http.set_default();
        }
        self.http.as_mut().unwrap()
    }

    // Take field
    pub fn take_http(&mut self) -> Trace_HTTP {
        self.http.take().unwrap_or_else(|| Trace_HTTP::new())
    }

    // .mdg.engine.proto.Trace.CachePolicy cache_policy = 18;

    pub fn get_cache_policy(&self) -> &Trace_CachePolicy {
        self.cache_policy
            .as_ref()
            .unwrap_or_else(|| <Trace_CachePolicy as ::protobuf::Message>::default_instance())
    }
    pub fn clear_cache_policy(&mut self) {
        self.cache_policy.clear();
    }

    pub fn has_cache_policy(&self) -> bool {
        self.cache_policy.is_some()
    }

    // Param is passed by value, moved
    pub fn set_cache_policy(&mut self, v: Trace_CachePolicy) {
        self.cache_policy = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_cache_policy(&mut self) -> &mut Trace_CachePolicy {
        if self.cache_policy.is_none() {
            self.cache_policy.set_default();
        }
        self.cache_policy.as_mut().unwrap()
    }

    // Take field
    pub fn take_cache_policy(&mut self) -> Trace_CachePolicy {
        self.cache_policy
            .take()
            .unwrap_or_else(|| Trace_CachePolicy::new())
    }

    // .mdg.engine.proto.Trace.QueryPlanNode query_plan = 26;

    pub fn get_query_plan(&self) -> &Trace_QueryPlanNode {
        self.query_plan
            .as_ref()
            .unwrap_or_else(|| <Trace_QueryPlanNode as ::protobuf::Message>::default_instance())
    }
    pub fn clear_query_plan(&mut self) {
        self.query_plan.clear();
    }

    pub fn has_query_plan(&self) -> bool {
        self.query_plan.is_some()
    }

    // Param is passed by value, moved
    pub fn set_query_plan(&mut self, v: Trace_QueryPlanNode) {
        self.query_plan = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_query_plan(&mut self) -> &mut Trace_QueryPlanNode {
        if self.query_plan.is_none() {
            self.query_plan.set_default();
        }
        self.query_plan.as_mut().unwrap()
    }

    // Take field
    pub fn take_query_plan(&mut self) -> Trace_QueryPlanNode {
        self.query_plan
            .take()
            .unwrap_or_else(|| Trace_QueryPlanNode::new())
    }

    // bool full_query_cache_hit = 20;

    pub fn get_full_query_cache_hit(&self) -> bool {
        self.full_query_cache_hit
    }
    pub fn clear_full_query_cache_hit(&mut self) {
        self.full_query_cache_hit = false;
    }

    // Param is passed by value, moved
    pub fn set_full_query_cache_hit(&mut self, v: bool) {
        self.full_query_cache_hit = v;
    }

    // bool persisted_query_hit = 21;

    pub fn get_persisted_query_hit(&self) -> bool {
        self.persisted_query_hit
    }
    pub fn clear_persisted_query_hit(&mut self) {
        self.persisted_query_hit = false;
    }

    // Param is passed by value, moved
    pub fn set_persisted_query_hit(&mut self, v: bool) {
        self.persisted_query_hit = v;
    }

    // bool persisted_query_register = 22;

    pub fn get_persisted_query_register(&self) -> bool {
        self.persisted_query_register
    }
    pub fn clear_persisted_query_register(&mut self) {
        self.persisted_query_register = false;
    }

    // Param is passed by value, moved
    pub fn set_persisted_query_register(&mut self, v: bool) {
        self.persisted_query_register = v;
    }

    // bool registered_operation = 24;

    pub fn get_registered_operation(&self) -> bool {
        self.registered_operation
    }
    pub fn clear_registered_operation(&mut self) {
        self.registered_operation = false;
    }

    // Param is passed by value, moved
    pub fn set_registered_operation(&mut self, v: bool) {
        self.registered_operation = v;
    }

    // bool forbidden_operation = 25;

    pub fn get_forbidden_operation(&self) -> bool {
        self.forbidden_operation
    }
    pub fn clear_forbidden_operation(&mut self) {
        self.forbidden_operation = false;
    }

    // Param is passed by value, moved
    pub fn set_forbidden_operation(&mut self, v: bool) {
        self.forbidden_operation = v;
    }

    // string legacy_signature_needs_resigning = 5;

    pub fn get_legacy_signature_needs_resigning(&self) -> &str {
        &self.legacy_signature_needs_resigning
    }
    pub fn clear_legacy_signature_needs_resigning(&mut self) {
        self.legacy_signature_needs_resigning.clear();
    }

    // Param is passed by value, moved
    pub fn set_legacy_signature_needs_resigning(&mut self, v: ::std::string::String) {
        self.legacy_signature_needs_resigning = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_legacy_signature_needs_resigning(&mut self) -> &mut ::std::string::String {
        &mut self.legacy_signature_needs_resigning
    }

    // Take field
    pub fn take_legacy_signature_needs_resigning(&mut self) -> ::std::string::String {
        ::std::mem::replace(
            &mut self.legacy_signature_needs_resigning,
            ::std::string::String::new(),
        )
    }
}

impl ::protobuf::Message for Trace {
    fn is_initialized(&self) -> bool {
        for v in &self.start_time {
            if !v.is_initialized() {
                return false;
            }
        }
        for v in &self.end_time {
            if !v.is_initialized() {
                return false;
            }
        }
        for v in &self.root {
            if !v.is_initialized() {
                return false;
            }
        }
        for v in &self.details {
            if !v.is_initialized() {
                return false;
            }
        }
        for v in &self.http {
            if !v.is_initialized() {
                return false;
            }
        }
        for v in &self.cache_policy {
            if !v.is_initialized() {
                return false;
            }
        }
        for v in &self.query_plan {
            if !v.is_initialized() {
                return false;
            }
        }
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                4 => {
                    ::protobuf::rt::read_singular_message_into(
                        wire_type,
                        is,
                        &mut self.start_time,
                    )?;
                }
                3 => {
                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.end_time)?;
                }
                11 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_uint64()?;
                    self.duration_ns = tmp;
                }
                14 => {
                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.root)?;
                }
                19 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.signature,
                    )?;
                }
                27 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.unexecutedOperationBody,
                    )?;
                }
                28 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.unexecutedOperationName,
                    )?;
                }
                6 => {
                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.details)?;
                }
                7 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.client_name,
                    )?;
                }
                8 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.client_version,
                    )?;
                }
                9 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.client_address,
                    )?;
                }
                23 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.client_reference_id,
                    )?;
                }
                10 => {
                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.http)?;
                }
                18 => {
                    ::protobuf::rt::read_singular_message_into(
                        wire_type,
                        is,
                        &mut self.cache_policy,
                    )?;
                }
                26 => {
                    ::protobuf::rt::read_singular_message_into(
                        wire_type,
                        is,
                        &mut self.query_plan,
                    )?;
                }
                20 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_bool()?;
                    self.full_query_cache_hit = tmp;
                }
                21 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_bool()?;
                    self.persisted_query_hit = tmp;
                }
                22 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_bool()?;
                    self.persisted_query_register = tmp;
                }
                24 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_bool()?;
                    self.registered_operation = tmp;
                }
                25 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_bool()?;
                    self.forbidden_operation = tmp;
                }
                5 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.legacy_signature_needs_resigning,
                    )?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if let Some(ref v) = self.start_time.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        if let Some(ref v) = self.end_time.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        if self.duration_ns != 0 {
            my_size += ::protobuf::rt::value_size(
                11,
                self.duration_ns,
                ::protobuf::wire_format::WireTypeVarint,
            );
        }
        if let Some(ref v) = self.root.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        if !self.signature.is_empty() {
            my_size += ::protobuf::rt::string_size(19, &self.signature);
        }
        if !self.unexecutedOperationBody.is_empty() {
            my_size += ::protobuf::rt::string_size(27, &self.unexecutedOperationBody);
        }
        if !self.unexecutedOperationName.is_empty() {
            my_size += ::protobuf::rt::string_size(28, &self.unexecutedOperationName);
        }
        if let Some(ref v) = self.details.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        if !self.client_name.is_empty() {
            my_size += ::protobuf::rt::string_size(7, &self.client_name);
        }
        if !self.client_version.is_empty() {
            my_size += ::protobuf::rt::string_size(8, &self.client_version);
        }
        if !self.client_address.is_empty() {
            my_size += ::protobuf::rt::string_size(9, &self.client_address);
        }
        if !self.client_reference_id.is_empty() {
            my_size += ::protobuf::rt::string_size(23, &self.client_reference_id);
        }
        if let Some(ref v) = self.http.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        if let Some(ref v) = self.cache_policy.as_ref() {
            let len = v.compute_size();
            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        if let Some(ref v) = self.query_plan.as_ref() {
            let len = v.compute_size();
            my_size += 2 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        if self.full_query_cache_hit != false {
            my_size += 3;
        }
        if self.persisted_query_hit != false {
            my_size += 3;
        }
        if self.persisted_query_register != false {
            my_size += 3;
        }
        if self.registered_operation != false {
            my_size += 3;
        }
        if self.forbidden_operation != false {
            my_size += 3;
        }
        if !self.legacy_signature_needs_resigning.is_empty() {
            my_size += ::protobuf::rt::string_size(5, &self.legacy_signature_needs_resigning);
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        if let Some(ref v) = self.start_time.as_ref() {
            os.write_tag(4, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        if let Some(ref v) = self.end_time.as_ref() {
            os.write_tag(3, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        if self.duration_ns != 0 {
            os.write_uint64(11, self.duration_ns)?;
        }
        if let Some(ref v) = self.root.as_ref() {
            os.write_tag(14, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        if !self.signature.is_empty() {
            os.write_string(19, &self.signature)?;
        }
        if !self.unexecutedOperationBody.is_empty() {
            os.write_string(27, &self.unexecutedOperationBody)?;
        }
        if !self.unexecutedOperationName.is_empty() {
            os.write_string(28, &self.unexecutedOperationName)?;
        }
        if let Some(ref v) = self.details.as_ref() {
            os.write_tag(6, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        if !self.client_name.is_empty() {
            os.write_string(7, &self.client_name)?;
        }
        if !self.client_version.is_empty() {
            os.write_string(8, &self.client_version)?;
        }
        if !self.client_address.is_empty() {
            os.write_string(9, &self.client_address)?;
        }
        if !self.client_reference_id.is_empty() {
            os.write_string(23, &self.client_reference_id)?;
        }
        if let Some(ref v) = self.http.as_ref() {
            os.write_tag(10, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        if let Some(ref v) = self.cache_policy.as_ref() {
            os.write_tag(18, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        if let Some(ref v) = self.query_plan.as_ref() {
            os.write_tag(26, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        if self.full_query_cache_hit != false {
            os.write_bool(20, self.full_query_cache_hit)?;
        }
        if self.persisted_query_hit != false {
            os.write_bool(21, self.persisted_query_hit)?;
        }
        if self.persisted_query_register != false {
            os.write_bool(22, self.persisted_query_register)?;
        }
        if self.registered_operation != false {
            os.write_bool(24, self.registered_operation)?;
        }
        if self.forbidden_operation != false {
            os.write_bool(25, self.forbidden_operation)?;
        }
        if !self.legacy_signature_needs_resigning.is_empty() {
            os.write_string(5, &self.legacy_signature_needs_resigning)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> Trace {
        Trace::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(
                ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<::protobuf::well_known_types::Timestamp>,
                >(
                    "start_time",
                    |m: &Trace| &m.start_time,
                    |m: &mut Trace| &mut m.start_time,
                ),
            );
            fields.push(
                ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<::protobuf::well_known_types::Timestamp>,
                >(
                    "end_time",
                    |m: &Trace| &m.end_time,
                    |m: &mut Trace| &mut m.end_time,
                ),
            );
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeUint64,
            >(
                "duration_ns",
                |m: &Trace| &m.duration_ns,
                |m: &mut Trace| &mut m.duration_ns,
            ));
            fields.push(
                ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<Trace_Node>,
                >("root", |m: &Trace| &m.root, |m: &mut Trace| &mut m.root),
            );
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "signature",
                |m: &Trace| &m.signature,
                |m: &mut Trace| &mut m.signature,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "unexecutedOperationBody",
                |m: &Trace| &m.unexecutedOperationBody,
                |m: &mut Trace| &mut m.unexecutedOperationBody,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "unexecutedOperationName",
                |m: &Trace| &m.unexecutedOperationName,
                |m: &mut Trace| &mut m.unexecutedOperationName,
            ));
            fields.push(
                ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<Trace_Details>,
                >(
                    "details",
                    |m: &Trace| &m.details,
                    |m: &mut Trace| &mut m.details,
                ),
            );
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "client_name",
                |m: &Trace| &m.client_name,
                |m: &mut Trace| &mut m.client_name,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "client_version",
                |m: &Trace| &m.client_version,
                |m: &mut Trace| &mut m.client_version,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "client_address",
                |m: &Trace| &m.client_address,
                |m: &mut Trace| &mut m.client_address,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "client_reference_id",
                |m: &Trace| &m.client_reference_id,
                |m: &mut Trace| &mut m.client_reference_id,
            ));
            fields.push(
                ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<Trace_HTTP>,
                >("http", |m: &Trace| &m.http, |m: &mut Trace| &mut m.http),
            );
            fields.push(
                ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<Trace_CachePolicy>,
                >(
                    "cache_policy",
                    |m: &Trace| &m.cache_policy,
                    |m: &mut Trace| &mut m.cache_policy,
                ),
            );
            fields.push(
                ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<Trace_QueryPlanNode>,
                >(
                    "query_plan",
                    |m: &Trace| &m.query_plan,
                    |m: &mut Trace| &mut m.query_plan,
                ),
            );
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeBool,
            >(
                "full_query_cache_hit",
                |m: &Trace| &m.full_query_cache_hit,
                |m: &mut Trace| &mut m.full_query_cache_hit,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeBool,
            >(
                "persisted_query_hit",
                |m: &Trace| &m.persisted_query_hit,
                |m: &mut Trace| &mut m.persisted_query_hit,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeBool,
            >(
                "persisted_query_register",
                |m: &Trace| &m.persisted_query_register,
                |m: &mut Trace| &mut m.persisted_query_register,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeBool,
            >(
                "registered_operation",
                |m: &Trace| &m.registered_operation,
                |m: &mut Trace| &mut m.registered_operation,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeBool,
            >(
                "forbidden_operation",
                |m: &Trace| &m.forbidden_operation,
                |m: &mut Trace| &mut m.forbidden_operation,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "legacy_signature_needs_resigning",
                |m: &Trace| &m.legacy_signature_needs_resigning,
                |m: &mut Trace| &mut m.legacy_signature_needs_resigning,
            ));
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<Trace>(
                "Trace",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static Trace {
        static instance: ::protobuf::rt::LazyV2<Trace> = ::protobuf::rt::LazyV2::INIT;
        instance.get(Trace::new)
    }
}

impl ::protobuf::Clear for Trace {
    fn clear(&mut self) {
        self.start_time.clear();
        self.end_time.clear();
        self.duration_ns = 0;
        self.root.clear();
        self.signature.clear();
        self.unexecutedOperationBody.clear();
        self.unexecutedOperationName.clear();
        self.details.clear();
        self.client_name.clear();
        self.client_version.clear();
        self.client_address.clear();
        self.client_reference_id.clear();
        self.http.clear();
        self.cache_policy.clear();
        self.query_plan.clear();
        self.full_query_cache_hit = false;
        self.persisted_query_hit = false;
        self.persisted_query_register = false;
        self.registered_operation = false;
        self.forbidden_operation = false;
        self.legacy_signature_needs_resigning.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for Trace {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for Trace {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct Trace_CachePolicy {
    // message fields
    pub scope: Trace_CachePolicy_Scope,
    pub max_age_ns: i64,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a Trace_CachePolicy {
    fn default() -> &'a Trace_CachePolicy {
        <Trace_CachePolicy as ::protobuf::Message>::default_instance()
    }
}

impl Trace_CachePolicy {
    pub fn new() -> Trace_CachePolicy {
        ::std::default::Default::default()
    }

    // .mdg.engine.proto.Trace.CachePolicy.Scope scope = 1;

    pub fn get_scope(&self) -> Trace_CachePolicy_Scope {
        self.scope
    }
    pub fn clear_scope(&mut self) {
        self.scope = Trace_CachePolicy_Scope::UNKNOWN;
    }

    // Param is passed by value, moved
    pub fn set_scope(&mut self, v: Trace_CachePolicy_Scope) {
        self.scope = v;
    }

    // int64 max_age_ns = 2;

    pub fn get_max_age_ns(&self) -> i64 {
        self.max_age_ns
    }
    pub fn clear_max_age_ns(&mut self) {
        self.max_age_ns = 0;
    }

    // Param is passed by value, moved
    pub fn set_max_age_ns(&mut self, v: i64) {
        self.max_age_ns = v;
    }
}

impl ::protobuf::Message for Trace_CachePolicy {
    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => ::protobuf::rt::read_proto3_enum_with_unknown_fields_into(
                    wire_type,
                    is,
                    &mut self.scope,
                    1,
                    &mut self.unknown_fields,
                )?,
                2 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_int64()?;
                    self.max_age_ns = tmp;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if self.scope != Trace_CachePolicy_Scope::UNKNOWN {
            my_size += ::protobuf::rt::enum_size(1, self.scope);
        }
        if self.max_age_ns != 0 {
            my_size += ::protobuf::rt::value_size(
                2,
                self.max_age_ns,
                ::protobuf::wire_format::WireTypeVarint,
            );
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        if self.scope != Trace_CachePolicy_Scope::UNKNOWN {
            os.write_enum(1, ::protobuf::ProtobufEnum::value(&self.scope))?;
        }
        if self.max_age_ns != 0 {
            os.write_int64(2, self.max_age_ns)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> Trace_CachePolicy {
        Trace_CachePolicy::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeEnum<Trace_CachePolicy_Scope>,
            >(
                "scope",
                |m: &Trace_CachePolicy| &m.scope,
                |m: &mut Trace_CachePolicy| &mut m.scope,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeInt64,
            >(
                "max_age_ns",
                |m: &Trace_CachePolicy| &m.max_age_ns,
                |m: &mut Trace_CachePolicy| &mut m.max_age_ns,
            ));
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<Trace_CachePolicy>(
                "Trace.CachePolicy",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static Trace_CachePolicy {
        static instance: ::protobuf::rt::LazyV2<Trace_CachePolicy> = ::protobuf::rt::LazyV2::INIT;
        instance.get(Trace_CachePolicy::new)
    }
}

impl ::protobuf::Clear for Trace_CachePolicy {
    fn clear(&mut self) {
        self.scope = Trace_CachePolicy_Scope::UNKNOWN;
        self.max_age_ns = 0;
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for Trace_CachePolicy {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for Trace_CachePolicy {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(Clone, PartialEq, Eq, Debug, Hash)]
pub enum Trace_CachePolicy_Scope {
    UNKNOWN = 0,
    PUBLIC = 1,
    PRIVATE = 2,
}

impl ::protobuf::ProtobufEnum for Trace_CachePolicy_Scope {
    fn value(&self) -> i32 {
        *self as i32
    }

    fn from_i32(value: i32) -> ::std::option::Option<Trace_CachePolicy_Scope> {
        match value {
            0 => ::std::option::Option::Some(Trace_CachePolicy_Scope::UNKNOWN),
            1 => ::std::option::Option::Some(Trace_CachePolicy_Scope::PUBLIC),
            2 => ::std::option::Option::Some(Trace_CachePolicy_Scope::PRIVATE),
            _ => ::std::option::Option::None,
        }
    }

    fn values() -> &'static [Self] {
        static values: &'static [Trace_CachePolicy_Scope] = &[
            Trace_CachePolicy_Scope::UNKNOWN,
            Trace_CachePolicy_Scope::PUBLIC,
            Trace_CachePolicy_Scope::PRIVATE,
        ];
        values
    }

    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::EnumDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            ::protobuf::reflect::EnumDescriptor::new_pb_name::<Trace_CachePolicy_Scope>(
                "Trace.CachePolicy.Scope",
                file_descriptor_proto(),
            )
        })
    }
}

impl ::std::marker::Copy for Trace_CachePolicy_Scope {}

impl ::std::default::Default for Trace_CachePolicy_Scope {
    fn default() -> Self {
        Trace_CachePolicy_Scope::UNKNOWN
    }
}

impl ::protobuf::reflect::ProtobufValue for Trace_CachePolicy_Scope {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Enum(::protobuf::ProtobufEnum::descriptor(self))
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct Trace_Details {
    // message fields
    pub variables_json: ::std::collections::HashMap<::std::string::String, ::std::string::String>,
    pub deprecated_variables:
        ::std::collections::HashMap<::std::string::String, ::std::vec::Vec<u8>>,
    pub operation_name: ::std::string::String,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a Trace_Details {
    fn default() -> &'a Trace_Details {
        <Trace_Details as ::protobuf::Message>::default_instance()
    }
}

impl Trace_Details {
    pub fn new() -> Trace_Details {
        ::std::default::Default::default()
    }

    // repeated .mdg.engine.proto.Trace.Details.VariablesJsonEntry variables_json = 4;

    pub fn get_variables_json(
        &self,
    ) -> &::std::collections::HashMap<::std::string::String, ::std::string::String> {
        &self.variables_json
    }
    pub fn clear_variables_json(&mut self) {
        self.variables_json.clear();
    }

    // Param is passed by value, moved
    pub fn set_variables_json(
        &mut self,
        v: ::std::collections::HashMap<::std::string::String, ::std::string::String>,
    ) {
        self.variables_json = v;
    }

    // Mutable pointer to the field.
    pub fn mut_variables_json(
        &mut self,
    ) -> &mut ::std::collections::HashMap<::std::string::String, ::std::string::String> {
        &mut self.variables_json
    }

    // Take field
    pub fn take_variables_json(
        &mut self,
    ) -> ::std::collections::HashMap<::std::string::String, ::std::string::String> {
        ::std::mem::replace(&mut self.variables_json, ::std::collections::HashMap::new())
    }

    // repeated .mdg.engine.proto.Trace.Details.DeprecatedVariablesEntry deprecated_variables = 1;

    pub fn get_deprecated_variables(
        &self,
    ) -> &::std::collections::HashMap<::std::string::String, ::std::vec::Vec<u8>> {
        &self.deprecated_variables
    }
    pub fn clear_deprecated_variables(&mut self) {
        self.deprecated_variables.clear();
    }

    // Param is passed by value, moved
    pub fn set_deprecated_variables(
        &mut self,
        v: ::std::collections::HashMap<::std::string::String, ::std::vec::Vec<u8>>,
    ) {
        self.deprecated_variables = v;
    }

    // Mutable pointer to the field.
    pub fn mut_deprecated_variables(
        &mut self,
    ) -> &mut ::std::collections::HashMap<::std::string::String, ::std::vec::Vec<u8>> {
        &mut self.deprecated_variables
    }

    // Take field
    pub fn take_deprecated_variables(
        &mut self,
    ) -> ::std::collections::HashMap<::std::string::String, ::std::vec::Vec<u8>> {
        ::std::mem::replace(
            &mut self.deprecated_variables,
            ::std::collections::HashMap::new(),
        )
    }

    // string operation_name = 3;

    pub fn get_operation_name(&self) -> &str {
        &self.operation_name
    }
    pub fn clear_operation_name(&mut self) {
        self.operation_name.clear();
    }

    // Param is passed by value, moved
    pub fn set_operation_name(&mut self, v: ::std::string::String) {
        self.operation_name = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_operation_name(&mut self) -> &mut ::std::string::String {
        &mut self.operation_name
    }

    // Take field
    pub fn take_operation_name(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.operation_name, ::std::string::String::new())
    }
}

impl ::protobuf::Message for Trace_Details {
    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                4 => {
                    ::protobuf::rt::read_map_into::<
                        ::protobuf::types::ProtobufTypeString,
                        ::protobuf::types::ProtobufTypeString,
                    >(wire_type, is, &mut self.variables_json)?;
                }
                1 => {
                    ::protobuf::rt::read_map_into::<
                        ::protobuf::types::ProtobufTypeString,
                        ::protobuf::types::ProtobufTypeBytes,
                    >(wire_type, is, &mut self.deprecated_variables)?;
                }
                3 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.operation_name,
                    )?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        my_size += ::protobuf::rt::compute_map_size::<
            ::protobuf::types::ProtobufTypeString,
            ::protobuf::types::ProtobufTypeString,
        >(4, &self.variables_json);
        my_size += ::protobuf::rt::compute_map_size::<
            ::protobuf::types::ProtobufTypeString,
            ::protobuf::types::ProtobufTypeBytes,
        >(1, &self.deprecated_variables);
        if !self.operation_name.is_empty() {
            my_size += ::protobuf::rt::string_size(3, &self.operation_name);
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        ::protobuf::rt::write_map_with_cached_sizes::<
            ::protobuf::types::ProtobufTypeString,
            ::protobuf::types::ProtobufTypeString,
        >(4, &self.variables_json, os)?;
        ::protobuf::rt::write_map_with_cached_sizes::<
            ::protobuf::types::ProtobufTypeString,
            ::protobuf::types::ProtobufTypeBytes,
        >(1, &self.deprecated_variables, os)?;
        if !self.operation_name.is_empty() {
            os.write_string(3, &self.operation_name)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> Trace_Details {
        Trace_Details::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(::protobuf::reflect::accessor::make_map_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
                ::protobuf::types::ProtobufTypeString,
            >(
                "variables_json",
                |m: &Trace_Details| &m.variables_json,
                |m: &mut Trace_Details| &mut m.variables_json,
            ));
            fields.push(::protobuf::reflect::accessor::make_map_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
                ::protobuf::types::ProtobufTypeBytes,
            >(
                "deprecated_variables",
                |m: &Trace_Details| &m.deprecated_variables,
                |m: &mut Trace_Details| &mut m.deprecated_variables,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "operation_name",
                |m: &Trace_Details| &m.operation_name,
                |m: &mut Trace_Details| &mut m.operation_name,
            ));
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<Trace_Details>(
                "Trace.Details",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static Trace_Details {
        static instance: ::protobuf::rt::LazyV2<Trace_Details> = ::protobuf::rt::LazyV2::INIT;
        instance.get(Trace_Details::new)
    }
}

impl ::protobuf::Clear for Trace_Details {
    fn clear(&mut self) {
        self.variables_json.clear();
        self.deprecated_variables.clear();
        self.operation_name.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for Trace_Details {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for Trace_Details {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct Trace_Error {
    // message fields
    pub message: ::std::string::String,
    pub location: ::protobuf::RepeatedField<Trace_Location>,
    pub time_ns: u64,
    pub json: ::std::string::String,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a Trace_Error {
    fn default() -> &'a Trace_Error {
        <Trace_Error as ::protobuf::Message>::default_instance()
    }
}

impl Trace_Error {
    pub fn new() -> Trace_Error {
        ::std::default::Default::default()
    }

    // string message = 1;

    pub fn get_message(&self) -> &str {
        &self.message
    }
    pub fn clear_message(&mut self) {
        self.message.clear();
    }

    // Param is passed by value, moved
    pub fn set_message(&mut self, v: ::std::string::String) {
        self.message = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_message(&mut self) -> &mut ::std::string::String {
        &mut self.message
    }

    // Take field
    pub fn take_message(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.message, ::std::string::String::new())
    }

    // repeated .mdg.engine.proto.Trace.Location location = 2;

    pub fn get_location(&self) -> &[Trace_Location] {
        &self.location
    }
    pub fn clear_location(&mut self) {
        self.location.clear();
    }

    // Param is passed by value, moved
    pub fn set_location(&mut self, v: ::protobuf::RepeatedField<Trace_Location>) {
        self.location = v;
    }

    // Mutable pointer to the field.
    pub fn mut_location(&mut self) -> &mut ::protobuf::RepeatedField<Trace_Location> {
        &mut self.location
    }

    // Take field
    pub fn take_location(&mut self) -> ::protobuf::RepeatedField<Trace_Location> {
        ::std::mem::replace(&mut self.location, ::protobuf::RepeatedField::new())
    }

    // uint64 time_ns = 3;

    pub fn get_time_ns(&self) -> u64 {
        self.time_ns
    }
    pub fn clear_time_ns(&mut self) {
        self.time_ns = 0;
    }

    // Param is passed by value, moved
    pub fn set_time_ns(&mut self, v: u64) {
        self.time_ns = v;
    }

    // string json = 4;

    pub fn get_json(&self) -> &str {
        &self.json
    }
    pub fn clear_json(&mut self) {
        self.json.clear();
    }

    // Param is passed by value, moved
    pub fn set_json(&mut self, v: ::std::string::String) {
        self.json = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_json(&mut self) -> &mut ::std::string::String {
        &mut self.json
    }

    // Take field
    pub fn take_json(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.json, ::std::string::String::new())
    }
}

impl ::protobuf::Message for Trace_Error {
    fn is_initialized(&self) -> bool {
        for v in &self.location {
            if !v.is_initialized() {
                return false;
            }
        }
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.message,
                    )?;
                }
                2 => {
                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.location)?;
                }
                3 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_uint64()?;
                    self.time_ns = tmp;
                }
                4 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.json,
                    )?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if !self.message.is_empty() {
            my_size += ::protobuf::rt::string_size(1, &self.message);
        }
        for value in &self.location {
            let len = value.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        if self.time_ns != 0 {
            my_size += ::protobuf::rt::value_size(
                3,
                self.time_ns,
                ::protobuf::wire_format::WireTypeVarint,
            );
        }
        if !self.json.is_empty() {
            my_size += ::protobuf::rt::string_size(4, &self.json);
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        if !self.message.is_empty() {
            os.write_string(1, &self.message)?;
        }
        for v in &self.location {
            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        if self.time_ns != 0 {
            os.write_uint64(3, self.time_ns)?;
        }
        if !self.json.is_empty() {
            os.write_string(4, &self.json)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> Trace_Error {
        Trace_Error::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "message",
                |m: &Trace_Error| &m.message,
                |m: &mut Trace_Error| &mut m.message,
            ));
            fields.push(
                ::protobuf::reflect::accessor::make_repeated_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<Trace_Location>,
                >(
                    "location",
                    |m: &Trace_Error| &m.location,
                    |m: &mut Trace_Error| &mut m.location,
                ),
            );
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeUint64,
            >(
                "time_ns",
                |m: &Trace_Error| &m.time_ns,
                |m: &mut Trace_Error| &mut m.time_ns,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "json",
                |m: &Trace_Error| &m.json,
                |m: &mut Trace_Error| &mut m.json,
            ));
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<Trace_Error>(
                "Trace.Error",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static Trace_Error {
        static instance: ::protobuf::rt::LazyV2<Trace_Error> = ::protobuf::rt::LazyV2::INIT;
        instance.get(Trace_Error::new)
    }
}

impl ::protobuf::Clear for Trace_Error {
    fn clear(&mut self) {
        self.message.clear();
        self.location.clear();
        self.time_ns = 0;
        self.json.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for Trace_Error {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for Trace_Error {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct Trace_HTTP {
    // message fields
    pub method: Trace_HTTP_Method,
    pub host: ::std::string::String,
    pub path: ::std::string::String,
    pub request_headers: ::std::collections::HashMap<::std::string::String, Trace_HTTP_Values>,
    pub response_headers: ::std::collections::HashMap<::std::string::String, Trace_HTTP_Values>,
    pub status_code: u32,
    pub secure: bool,
    pub protocol: ::std::string::String,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a Trace_HTTP {
    fn default() -> &'a Trace_HTTP {
        <Trace_HTTP as ::protobuf::Message>::default_instance()
    }
}

impl Trace_HTTP {
    pub fn new() -> Trace_HTTP {
        ::std::default::Default::default()
    }

    // .mdg.engine.proto.Trace.HTTP.Method method = 1;

    pub fn get_method(&self) -> Trace_HTTP_Method {
        self.method
    }
    pub fn clear_method(&mut self) {
        self.method = Trace_HTTP_Method::UNKNOWN;
    }

    // Param is passed by value, moved
    pub fn set_method(&mut self, v: Trace_HTTP_Method) {
        self.method = v;
    }

    // string host = 2;

    pub fn get_host(&self) -> &str {
        &self.host
    }
    pub fn clear_host(&mut self) {
        self.host.clear();
    }

    // Param is passed by value, moved
    pub fn set_host(&mut self, v: ::std::string::String) {
        self.host = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_host(&mut self) -> &mut ::std::string::String {
        &mut self.host
    }

    // Take field
    pub fn take_host(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.host, ::std::string::String::new())
    }

    // string path = 3;

    pub fn get_path(&self) -> &str {
        &self.path
    }
    pub fn clear_path(&mut self) {
        self.path.clear();
    }

    // Param is passed by value, moved
    pub fn set_path(&mut self, v: ::std::string::String) {
        self.path = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_path(&mut self) -> &mut ::std::string::String {
        &mut self.path
    }

    // Take field
    pub fn take_path(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.path, ::std::string::String::new())
    }

    // repeated .mdg.engine.proto.Trace.HTTP.RequestHeadersEntry request_headers = 4;

    pub fn get_request_headers(
        &self,
    ) -> &::std::collections::HashMap<::std::string::String, Trace_HTTP_Values> {
        &self.request_headers
    }
    pub fn clear_request_headers(&mut self) {
        self.request_headers.clear();
    }

    // Param is passed by value, moved
    pub fn set_request_headers(
        &mut self,
        v: ::std::collections::HashMap<::std::string::String, Trace_HTTP_Values>,
    ) {
        self.request_headers = v;
    }

    // Mutable pointer to the field.
    pub fn mut_request_headers(
        &mut self,
    ) -> &mut ::std::collections::HashMap<::std::string::String, Trace_HTTP_Values> {
        &mut self.request_headers
    }

    // Take field
    pub fn take_request_headers(
        &mut self,
    ) -> ::std::collections::HashMap<::std::string::String, Trace_HTTP_Values> {
        ::std::mem::replace(
            &mut self.request_headers,
            ::std::collections::HashMap::new(),
        )
    }

    // repeated .mdg.engine.proto.Trace.HTTP.ResponseHeadersEntry response_headers = 5;

    pub fn get_response_headers(
        &self,
    ) -> &::std::collections::HashMap<::std::string::String, Trace_HTTP_Values> {
        &self.response_headers
    }
    pub fn clear_response_headers(&mut self) {
        self.response_headers.clear();
    }

    // Param is passed by value, moved
    pub fn set_response_headers(
        &mut self,
        v: ::std::collections::HashMap<::std::string::String, Trace_HTTP_Values>,
    ) {
        self.response_headers = v;
    }

    // Mutable pointer to the field.
    pub fn mut_response_headers(
        &mut self,
    ) -> &mut ::std::collections::HashMap<::std::string::String, Trace_HTTP_Values> {
        &mut self.response_headers
    }

    // Take field
    pub fn take_response_headers(
        &mut self,
    ) -> ::std::collections::HashMap<::std::string::String, Trace_HTTP_Values> {
        ::std::mem::replace(
            &mut self.response_headers,
            ::std::collections::HashMap::new(),
        )
    }

    // uint32 status_code = 6;

    pub fn get_status_code(&self) -> u32 {
        self.status_code
    }
    pub fn clear_status_code(&mut self) {
        self.status_code = 0;
    }

    // Param is passed by value, moved
    pub fn set_status_code(&mut self, v: u32) {
        self.status_code = v;
    }

    // bool secure = 8;

    pub fn get_secure(&self) -> bool {
        self.secure
    }
    pub fn clear_secure(&mut self) {
        self.secure = false;
    }

    // Param is passed by value, moved
    pub fn set_secure(&mut self, v: bool) {
        self.secure = v;
    }

    // string protocol = 9;

    pub fn get_protocol(&self) -> &str {
        &self.protocol
    }
    pub fn clear_protocol(&mut self) {
        self.protocol.clear();
    }

    // Param is passed by value, moved
    pub fn set_protocol(&mut self, v: ::std::string::String) {
        self.protocol = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_protocol(&mut self) -> &mut ::std::string::String {
        &mut self.protocol
    }

    // Take field
    pub fn take_protocol(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.protocol, ::std::string::String::new())
    }
}

impl ::protobuf::Message for Trace_HTTP {
    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => ::protobuf::rt::read_proto3_enum_with_unknown_fields_into(
                    wire_type,
                    is,
                    &mut self.method,
                    1,
                    &mut self.unknown_fields,
                )?,
                2 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.host,
                    )?;
                }
                3 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.path,
                    )?;
                }
                4 => {
                    ::protobuf::rt::read_map_into::<
                        ::protobuf::types::ProtobufTypeString,
                        ::protobuf::types::ProtobufTypeMessage<Trace_HTTP_Values>,
                    >(wire_type, is, &mut self.request_headers)?;
                }
                5 => {
                    ::protobuf::rt::read_map_into::<
                        ::protobuf::types::ProtobufTypeString,
                        ::protobuf::types::ProtobufTypeMessage<Trace_HTTP_Values>,
                    >(wire_type, is, &mut self.response_headers)?;
                }
                6 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_uint32()?;
                    self.status_code = tmp;
                }
                8 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_bool()?;
                    self.secure = tmp;
                }
                9 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.protocol,
                    )?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if self.method != Trace_HTTP_Method::UNKNOWN {
            my_size += ::protobuf::rt::enum_size(1, self.method);
        }
        if !self.host.is_empty() {
            my_size += ::protobuf::rt::string_size(2, &self.host);
        }
        if !self.path.is_empty() {
            my_size += ::protobuf::rt::string_size(3, &self.path);
        }
        my_size += ::protobuf::rt::compute_map_size::<
            ::protobuf::types::ProtobufTypeString,
            ::protobuf::types::ProtobufTypeMessage<Trace_HTTP_Values>,
        >(4, &self.request_headers);
        my_size += ::protobuf::rt::compute_map_size::<
            ::protobuf::types::ProtobufTypeString,
            ::protobuf::types::ProtobufTypeMessage<Trace_HTTP_Values>,
        >(5, &self.response_headers);
        if self.status_code != 0 {
            my_size += ::protobuf::rt::value_size(
                6,
                self.status_code,
                ::protobuf::wire_format::WireTypeVarint,
            );
        }
        if self.secure != false {
            my_size += 2;
        }
        if !self.protocol.is_empty() {
            my_size += ::protobuf::rt::string_size(9, &self.protocol);
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        if self.method != Trace_HTTP_Method::UNKNOWN {
            os.write_enum(1, ::protobuf::ProtobufEnum::value(&self.method))?;
        }
        if !self.host.is_empty() {
            os.write_string(2, &self.host)?;
        }
        if !self.path.is_empty() {
            os.write_string(3, &self.path)?;
        }
        ::protobuf::rt::write_map_with_cached_sizes::<
            ::protobuf::types::ProtobufTypeString,
            ::protobuf::types::ProtobufTypeMessage<Trace_HTTP_Values>,
        >(4, &self.request_headers, os)?;
        ::protobuf::rt::write_map_with_cached_sizes::<
            ::protobuf::types::ProtobufTypeString,
            ::protobuf::types::ProtobufTypeMessage<Trace_HTTP_Values>,
        >(5, &self.response_headers, os)?;
        if self.status_code != 0 {
            os.write_uint32(6, self.status_code)?;
        }
        if self.secure != false {
            os.write_bool(8, self.secure)?;
        }
        if !self.protocol.is_empty() {
            os.write_string(9, &self.protocol)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> Trace_HTTP {
        Trace_HTTP::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeEnum<Trace_HTTP_Method>,
            >(
                "method",
                |m: &Trace_HTTP| &m.method,
                |m: &mut Trace_HTTP| &mut m.method,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "host",
                |m: &Trace_HTTP| &m.host,
                |m: &mut Trace_HTTP| &mut m.host,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "path",
                |m: &Trace_HTTP| &m.path,
                |m: &mut Trace_HTTP| &mut m.path,
            ));
            fields.push(::protobuf::reflect::accessor::make_map_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
                ::protobuf::types::ProtobufTypeMessage<Trace_HTTP_Values>,
            >(
                "request_headers",
                |m: &Trace_HTTP| &m.request_headers,
                |m: &mut Trace_HTTP| &mut m.request_headers,
            ));
            fields.push(::protobuf::reflect::accessor::make_map_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
                ::protobuf::types::ProtobufTypeMessage<Trace_HTTP_Values>,
            >(
                "response_headers",
                |m: &Trace_HTTP| &m.response_headers,
                |m: &mut Trace_HTTP| &mut m.response_headers,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeUint32,
            >(
                "status_code",
                |m: &Trace_HTTP| &m.status_code,
                |m: &mut Trace_HTTP| &mut m.status_code,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeBool,
            >(
                "secure",
                |m: &Trace_HTTP| &m.secure,
                |m: &mut Trace_HTTP| &mut m.secure,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "protocol",
                |m: &Trace_HTTP| &m.protocol,
                |m: &mut Trace_HTTP| &mut m.protocol,
            ));
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<Trace_HTTP>(
                "Trace.HTTP",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static Trace_HTTP {
        static instance: ::protobuf::rt::LazyV2<Trace_HTTP> = ::protobuf::rt::LazyV2::INIT;
        instance.get(Trace_HTTP::new)
    }
}

impl ::protobuf::Clear for Trace_HTTP {
    fn clear(&mut self) {
        self.method = Trace_HTTP_Method::UNKNOWN;
        self.host.clear();
        self.path.clear();
        self.request_headers.clear();
        self.response_headers.clear();
        self.status_code = 0;
        self.secure = false;
        self.protocol.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for Trace_HTTP {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for Trace_HTTP {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct Trace_HTTP_Values {
    // message fields
    pub value: ::protobuf::RepeatedField<::std::string::String>,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a Trace_HTTP_Values {
    fn default() -> &'a Trace_HTTP_Values {
        <Trace_HTTP_Values as ::protobuf::Message>::default_instance()
    }
}

impl Trace_HTTP_Values {
    pub fn new() -> Trace_HTTP_Values {
        ::std::default::Default::default()
    }

    // repeated string value = 1;

    pub fn get_value(&self) -> &[::std::string::String] {
        &self.value
    }
    pub fn clear_value(&mut self) {
        self.value.clear();
    }

    // Param is passed by value, moved
    pub fn set_value(&mut self, v: ::protobuf::RepeatedField<::std::string::String>) {
        self.value = v;
    }

    // Mutable pointer to the field.
    pub fn mut_value(&mut self) -> &mut ::protobuf::RepeatedField<::std::string::String> {
        &mut self.value
    }

    // Take field
    pub fn take_value(&mut self) -> ::protobuf::RepeatedField<::std::string::String> {
        ::std::mem::replace(&mut self.value, ::protobuf::RepeatedField::new())
    }
}

impl ::protobuf::Message for Trace_HTTP_Values {
    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    ::protobuf::rt::read_repeated_string_into(wire_type, is, &mut self.value)?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        for value in &self.value {
            my_size += ::protobuf::rt::string_size(1, &value);
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        for v in &self.value {
            os.write_string(1, &v)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> Trace_HTTP_Values {
        Trace_HTTP_Values::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(
                ::protobuf::reflect::accessor::make_repeated_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeString,
                >(
                    "value",
                    |m: &Trace_HTTP_Values| &m.value,
                    |m: &mut Trace_HTTP_Values| &mut m.value,
                ),
            );
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<Trace_HTTP_Values>(
                "Trace.HTTP.Values",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static Trace_HTTP_Values {
        static instance: ::protobuf::rt::LazyV2<Trace_HTTP_Values> = ::protobuf::rt::LazyV2::INIT;
        instance.get(Trace_HTTP_Values::new)
    }
}

impl ::protobuf::Clear for Trace_HTTP_Values {
    fn clear(&mut self) {
        self.value.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for Trace_HTTP_Values {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for Trace_HTTP_Values {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(Clone, PartialEq, Eq, Debug, Hash)]
pub enum Trace_HTTP_Method {
    UNKNOWN = 0,
    OPTIONS = 1,
    GET = 2,
    HEAD = 3,
    POST = 4,
    PUT = 5,
    DELETE = 6,
    TRACE = 7,
    CONNECT = 8,
    PATCH = 9,
}

impl ::protobuf::ProtobufEnum for Trace_HTTP_Method {
    fn value(&self) -> i32 {
        *self as i32
    }

    fn from_i32(value: i32) -> ::std::option::Option<Trace_HTTP_Method> {
        match value {
            0 => ::std::option::Option::Some(Trace_HTTP_Method::UNKNOWN),
            1 => ::std::option::Option::Some(Trace_HTTP_Method::OPTIONS),
            2 => ::std::option::Option::Some(Trace_HTTP_Method::GET),
            3 => ::std::option::Option::Some(Trace_HTTP_Method::HEAD),
            4 => ::std::option::Option::Some(Trace_HTTP_Method::POST),
            5 => ::std::option::Option::Some(Trace_HTTP_Method::PUT),
            6 => ::std::option::Option::Some(Trace_HTTP_Method::DELETE),
            7 => ::std::option::Option::Some(Trace_HTTP_Method::TRACE),
            8 => ::std::option::Option::Some(Trace_HTTP_Method::CONNECT),
            9 => ::std::option::Option::Some(Trace_HTTP_Method::PATCH),
            _ => ::std::option::Option::None,
        }
    }

    fn values() -> &'static [Self] {
        static values: &'static [Trace_HTTP_Method] = &[
            Trace_HTTP_Method::UNKNOWN,
            Trace_HTTP_Method::OPTIONS,
            Trace_HTTP_Method::GET,
            Trace_HTTP_Method::HEAD,
            Trace_HTTP_Method::POST,
            Trace_HTTP_Method::PUT,
            Trace_HTTP_Method::DELETE,
            Trace_HTTP_Method::TRACE,
            Trace_HTTP_Method::CONNECT,
            Trace_HTTP_Method::PATCH,
        ];
        values
    }

    fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::EnumDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            ::protobuf::reflect::EnumDescriptor::new_pb_name::<Trace_HTTP_Method>(
                "Trace.HTTP.Method",
                file_descriptor_proto(),
            )
        })
    }
}

impl ::std::marker::Copy for Trace_HTTP_Method {}

impl ::std::default::Default for Trace_HTTP_Method {
    fn default() -> Self {
        Trace_HTTP_Method::UNKNOWN
    }
}

impl ::protobuf::reflect::ProtobufValue for Trace_HTTP_Method {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Enum(::protobuf::ProtobufEnum::descriptor(self))
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct Trace_Location {
    // message fields
    pub line: u32,
    pub column: u32,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a Trace_Location {
    fn default() -> &'a Trace_Location {
        <Trace_Location as ::protobuf::Message>::default_instance()
    }
}

impl Trace_Location {
    pub fn new() -> Trace_Location {
        ::std::default::Default::default()
    }

    // uint32 line = 1;

    pub fn get_line(&self) -> u32 {
        self.line
    }
    pub fn clear_line(&mut self) {
        self.line = 0;
    }

    // Param is passed by value, moved
    pub fn set_line(&mut self, v: u32) {
        self.line = v;
    }

    // uint32 column = 2;

    pub fn get_column(&self) -> u32 {
        self.column
    }
    pub fn clear_column(&mut self) {
        self.column = 0;
    }

    // Param is passed by value, moved
    pub fn set_column(&mut self, v: u32) {
        self.column = v;
    }
}

impl ::protobuf::Message for Trace_Location {
    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_uint32()?;
                    self.line = tmp;
                }
                2 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_uint32()?;
                    self.column = tmp;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if self.line != 0 {
            my_size +=
                ::protobuf::rt::value_size(1, self.line, ::protobuf::wire_format::WireTypeVarint);
        }
        if self.column != 0 {
            my_size +=
                ::protobuf::rt::value_size(2, self.column, ::protobuf::wire_format::WireTypeVarint);
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        if self.line != 0 {
            os.write_uint32(1, self.line)?;
        }
        if self.column != 0 {
            os.write_uint32(2, self.column)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> Trace_Location {
        Trace_Location::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeUint32,
            >(
                "line",
                |m: &Trace_Location| &m.line,
                |m: &mut Trace_Location| &mut m.line,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeUint32,
            >(
                "column",
                |m: &Trace_Location| &m.column,
                |m: &mut Trace_Location| &mut m.column,
            ));
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<Trace_Location>(
                "Trace.Location",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static Trace_Location {
        static instance: ::protobuf::rt::LazyV2<Trace_Location> = ::protobuf::rt::LazyV2::INIT;
        instance.get(Trace_Location::new)
    }
}

impl ::protobuf::Clear for Trace_Location {
    fn clear(&mut self) {
        self.line = 0;
        self.column = 0;
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for Trace_Location {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for Trace_Location {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct Trace_Node {
    // message fields
    pub original_field_name: ::std::string::String,
    pub field_type: ::std::string::String,
    pub parent_type: ::std::string::String,
    pub cache_policy: ::protobuf::SingularPtrField<Trace_CachePolicy>,
    pub start_time: u64,
    pub end_time: u64,
    pub error: ::protobuf::RepeatedField<Trace_Error>,
    pub child: ::protobuf::RepeatedField<Trace_Node>,
    // message oneof groups
    pub id: ::std::option::Option<Trace_Node_oneof_id>,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a Trace_Node {
    fn default() -> &'a Trace_Node {
        <Trace_Node as ::protobuf::Message>::default_instance()
    }
}

#[derive(Clone, PartialEq, Debug)]
pub enum Trace_Node_oneof_id {
    response_name(::std::string::String),
    index(u32),
}

impl Trace_Node {
    pub fn new() -> Trace_Node {
        ::std::default::Default::default()
    }

    // string response_name = 1;

    pub fn get_response_name(&self) -> &str {
        match self.id {
            ::std::option::Option::Some(Trace_Node_oneof_id::response_name(ref v)) => v,
            _ => "",
        }
    }
    pub fn clear_response_name(&mut self) {
        self.id = ::std::option::Option::None;
    }

    pub fn has_response_name(&self) -> bool {
        match self.id {
            ::std::option::Option::Some(Trace_Node_oneof_id::response_name(..)) => true,
            _ => false,
        }
    }

    // Param is passed by value, moved
    pub fn set_response_name(&mut self, v: ::std::string::String) {
        self.id = ::std::option::Option::Some(Trace_Node_oneof_id::response_name(v))
    }

    // Mutable pointer to the field.
    pub fn mut_response_name(&mut self) -> &mut ::std::string::String {
        if let ::std::option::Option::Some(Trace_Node_oneof_id::response_name(_)) = self.id {
        } else {
            self.id = ::std::option::Option::Some(Trace_Node_oneof_id::response_name(
                ::std::string::String::new(),
            ));
        }
        match self.id {
            ::std::option::Option::Some(Trace_Node_oneof_id::response_name(ref mut v)) => v,
            _ => panic!(),
        }
    }

    // Take field
    pub fn take_response_name(&mut self) -> ::std::string::String {
        if self.has_response_name() {
            match self.id.take() {
                ::std::option::Option::Some(Trace_Node_oneof_id::response_name(v)) => v,
                _ => panic!(),
            }
        } else {
            ::std::string::String::new()
        }
    }

    // uint32 index = 2;

    pub fn get_index(&self) -> u32 {
        match self.id {
            ::std::option::Option::Some(Trace_Node_oneof_id::index(v)) => v,
            _ => 0,
        }
    }
    pub fn clear_index(&mut self) {
        self.id = ::std::option::Option::None;
    }

    pub fn has_index(&self) -> bool {
        match self.id {
            ::std::option::Option::Some(Trace_Node_oneof_id::index(..)) => true,
            _ => false,
        }
    }

    // Param is passed by value, moved
    pub fn set_index(&mut self, v: u32) {
        self.id = ::std::option::Option::Some(Trace_Node_oneof_id::index(v))
    }

    // string original_field_name = 14;

    pub fn get_original_field_name(&self) -> &str {
        &self.original_field_name
    }
    pub fn clear_original_field_name(&mut self) {
        self.original_field_name.clear();
    }

    // Param is passed by value, moved
    pub fn set_original_field_name(&mut self, v: ::std::string::String) {
        self.original_field_name = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_original_field_name(&mut self) -> &mut ::std::string::String {
        &mut self.original_field_name
    }

    // Take field
    pub fn take_original_field_name(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.original_field_name, ::std::string::String::new())
    }

    // string type = 3;

    pub fn get_field_type(&self) -> &str {
        &self.field_type
    }
    pub fn clear_field_type(&mut self) {
        self.field_type.clear();
    }

    // Param is passed by value, moved
    pub fn set_field_type(&mut self, v: ::std::string::String) {
        self.field_type = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_field_type(&mut self) -> &mut ::std::string::String {
        &mut self.field_type
    }

    // Take field
    pub fn take_field_type(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.field_type, ::std::string::String::new())
    }

    // string parent_type = 13;

    pub fn get_parent_type(&self) -> &str {
        &self.parent_type
    }
    pub fn clear_parent_type(&mut self) {
        self.parent_type.clear();
    }

    // Param is passed by value, moved
    pub fn set_parent_type(&mut self, v: ::std::string::String) {
        self.parent_type = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_parent_type(&mut self) -> &mut ::std::string::String {
        &mut self.parent_type
    }

    // Take field
    pub fn take_parent_type(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.parent_type, ::std::string::String::new())
    }

    // .mdg.engine.proto.Trace.CachePolicy cache_policy = 5;

    pub fn get_cache_policy(&self) -> &Trace_CachePolicy {
        self.cache_policy
            .as_ref()
            .unwrap_or_else(|| <Trace_CachePolicy as ::protobuf::Message>::default_instance())
    }
    pub fn clear_cache_policy(&mut self) {
        self.cache_policy.clear();
    }

    pub fn has_cache_policy(&self) -> bool {
        self.cache_policy.is_some()
    }

    // Param is passed by value, moved
    pub fn set_cache_policy(&mut self, v: Trace_CachePolicy) {
        self.cache_policy = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_cache_policy(&mut self) -> &mut Trace_CachePolicy {
        if self.cache_policy.is_none() {
            self.cache_policy.set_default();
        }
        self.cache_policy.as_mut().unwrap()
    }

    // Take field
    pub fn take_cache_policy(&mut self) -> Trace_CachePolicy {
        self.cache_policy
            .take()
            .unwrap_or_else(|| Trace_CachePolicy::new())
    }

    // uint64 start_time = 8;

    pub fn get_start_time(&self) -> u64 {
        self.start_time
    }
    pub fn clear_start_time(&mut self) {
        self.start_time = 0;
    }

    // Param is passed by value, moved
    pub fn set_start_time(&mut self, v: u64) {
        self.start_time = v;
    }

    // uint64 end_time = 9;

    pub fn get_end_time(&self) -> u64 {
        self.end_time
    }
    pub fn clear_end_time(&mut self) {
        self.end_time = 0;
    }

    // Param is passed by value, moved
    pub fn set_end_time(&mut self, v: u64) {
        self.end_time = v;
    }

    // repeated .mdg.engine.proto.Trace.Error error = 11;

    pub fn get_error(&self) -> &[Trace_Error] {
        &self.error
    }
    pub fn clear_error(&mut self) {
        self.error.clear();
    }

    // Param is passed by value, moved
    pub fn set_error(&mut self, v: ::protobuf::RepeatedField<Trace_Error>) {
        self.error = v;
    }

    // Mutable pointer to the field.
    pub fn mut_error(&mut self) -> &mut ::protobuf::RepeatedField<Trace_Error> {
        &mut self.error
    }

    // Take field
    pub fn take_error(&mut self) -> ::protobuf::RepeatedField<Trace_Error> {
        ::std::mem::replace(&mut self.error, ::protobuf::RepeatedField::new())
    }

    // repeated .mdg.engine.proto.Trace.Node child = 12;

    pub fn get_child(&self) -> &[Trace_Node] {
        &self.child
    }
    pub fn clear_child(&mut self) {
        self.child.clear();
    }

    // Param is passed by value, moved
    pub fn set_child(&mut self, v: ::protobuf::RepeatedField<Trace_Node>) {
        self.child = v;
    }

    // Mutable pointer to the field.
    pub fn mut_child(&mut self) -> &mut ::protobuf::RepeatedField<Trace_Node> {
        &mut self.child
    }

    // Take field
    pub fn take_child(&mut self) -> ::protobuf::RepeatedField<Trace_Node> {
        ::std::mem::replace(&mut self.child, ::protobuf::RepeatedField::new())
    }
}

impl ::protobuf::Message for Trace_Node {
    fn is_initialized(&self) -> bool {
        for v in &self.cache_policy {
            if !v.is_initialized() {
                return false;
            }
        }
        for v in &self.error {
            if !v.is_initialized() {
                return false;
            }
        }
        for v in &self.child {
            if !v.is_initialized() {
                return false;
            }
        }
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    if wire_type != ::protobuf::wire_format::WireTypeLengthDelimited {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    self.id = ::std::option::Option::Some(Trace_Node_oneof_id::response_name(
                        is.read_string()?,
                    ));
                }
                2 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    self.id =
                        ::std::option::Option::Some(Trace_Node_oneof_id::index(is.read_uint32()?));
                }
                14 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.original_field_name,
                    )?;
                }
                3 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.field_type,
                    )?;
                }
                13 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.parent_type,
                    )?;
                }
                5 => {
                    ::protobuf::rt::read_singular_message_into(
                        wire_type,
                        is,
                        &mut self.cache_policy,
                    )?;
                }
                8 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_uint64()?;
                    self.start_time = tmp;
                }
                9 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_uint64()?;
                    self.end_time = tmp;
                }
                11 => {
                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.error)?;
                }
                12 => {
                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.child)?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if !self.original_field_name.is_empty() {
            my_size += ::protobuf::rt::string_size(14, &self.original_field_name);
        }
        if !self.field_type.is_empty() {
            my_size += ::protobuf::rt::string_size(3, &self.field_type);
        }
        if !self.parent_type.is_empty() {
            my_size += ::protobuf::rt::string_size(13, &self.parent_type);
        }
        if let Some(ref v) = self.cache_policy.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        if self.start_time != 0 {
            my_size += ::protobuf::rt::value_size(
                8,
                self.start_time,
                ::protobuf::wire_format::WireTypeVarint,
            );
        }
        if self.end_time != 0 {
            my_size += ::protobuf::rt::value_size(
                9,
                self.end_time,
                ::protobuf::wire_format::WireTypeVarint,
            );
        }
        for value in &self.error {
            let len = value.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        for value in &self.child {
            let len = value.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        if let ::std::option::Option::Some(ref v) = self.id {
            match v {
                &Trace_Node_oneof_id::response_name(ref v) => {
                    my_size += ::protobuf::rt::string_size(1, &v);
                }
                &Trace_Node_oneof_id::index(v) => {
                    my_size +=
                        ::protobuf::rt::value_size(2, v, ::protobuf::wire_format::WireTypeVarint);
                }
            };
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        if !self.original_field_name.is_empty() {
            os.write_string(14, &self.original_field_name)?;
        }
        if !self.field_type.is_empty() {
            os.write_string(3, &self.field_type)?;
        }
        if !self.parent_type.is_empty() {
            os.write_string(13, &self.parent_type)?;
        }
        if let Some(ref v) = self.cache_policy.as_ref() {
            os.write_tag(5, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        if self.start_time != 0 {
            os.write_uint64(8, self.start_time)?;
        }
        if self.end_time != 0 {
            os.write_uint64(9, self.end_time)?;
        }
        for v in &self.error {
            os.write_tag(11, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        for v in &self.child {
            os.write_tag(12, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        if let ::std::option::Option::Some(ref v) = self.id {
            match v {
                &Trace_Node_oneof_id::response_name(ref v) => {
                    os.write_string(1, v)?;
                }
                &Trace_Node_oneof_id::index(v) => {
                    os.write_uint32(2, v)?;
                }
            };
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> Trace_Node {
        Trace_Node::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(
                ::protobuf::reflect::accessor::make_singular_string_accessor::<_>(
                    "response_name",
                    Trace_Node::has_response_name,
                    Trace_Node::get_response_name,
                ),
            );
            fields.push(
                ::protobuf::reflect::accessor::make_singular_u32_accessor::<_>(
                    "index",
                    Trace_Node::has_index,
                    Trace_Node::get_index,
                ),
            );
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "original_field_name",
                |m: &Trace_Node| &m.original_field_name,
                |m: &mut Trace_Node| &mut m.original_field_name,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "type",
                |m: &Trace_Node| &m.field_type,
                |m: &mut Trace_Node| &mut m.field_type,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "parent_type",
                |m: &Trace_Node| &m.parent_type,
                |m: &mut Trace_Node| &mut m.parent_type,
            ));
            fields.push(
                ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<Trace_CachePolicy>,
                >(
                    "cache_policy",
                    |m: &Trace_Node| &m.cache_policy,
                    |m: &mut Trace_Node| &mut m.cache_policy,
                ),
            );
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeUint64,
            >(
                "start_time",
                |m: &Trace_Node| &m.start_time,
                |m: &mut Trace_Node| &mut m.start_time,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeUint64,
            >(
                "end_time",
                |m: &Trace_Node| &m.end_time,
                |m: &mut Trace_Node| &mut m.end_time,
            ));
            fields.push(
                ::protobuf::reflect::accessor::make_repeated_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<Trace_Error>,
                >(
                    "error",
                    |m: &Trace_Node| &m.error,
                    |m: &mut Trace_Node| &mut m.error,
                ),
            );
            fields.push(
                ::protobuf::reflect::accessor::make_repeated_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<Trace_Node>,
                >(
                    "child",
                    |m: &Trace_Node| &m.child,
                    |m: &mut Trace_Node| &mut m.child,
                ),
            );
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<Trace_Node>(
                "Trace.Node",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static Trace_Node {
        static instance: ::protobuf::rt::LazyV2<Trace_Node> = ::protobuf::rt::LazyV2::INIT;
        instance.get(Trace_Node::new)
    }
}

impl ::protobuf::Clear for Trace_Node {
    fn clear(&mut self) {
        self.id = ::std::option::Option::None;
        self.id = ::std::option::Option::None;
        self.original_field_name.clear();
        self.field_type.clear();
        self.parent_type.clear();
        self.cache_policy.clear();
        self.start_time = 0;
        self.end_time = 0;
        self.error.clear();
        self.child.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for Trace_Node {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for Trace_Node {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct Trace_QueryPlanNode {
    // message oneof groups
    pub node: ::std::option::Option<Trace_QueryPlanNode_oneof_node>,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a Trace_QueryPlanNode {
    fn default() -> &'a Trace_QueryPlanNode {
        <Trace_QueryPlanNode as ::protobuf::Message>::default_instance()
    }
}

#[derive(Clone, PartialEq, Debug)]
pub enum Trace_QueryPlanNode_oneof_node {
    sequence(Trace_QueryPlanNode_SequenceNode),
    parallel(Trace_QueryPlanNode_ParallelNode),
    fetch(Trace_QueryPlanNode_FetchNode),
    flatten(Trace_QueryPlanNode_FlattenNode),
}

impl Trace_QueryPlanNode {
    pub fn new() -> Trace_QueryPlanNode {
        ::std::default::Default::default()
    }

    // .mdg.engine.proto.Trace.QueryPlanNode.SequenceNode sequence = 1;

    pub fn get_sequence(&self) -> &Trace_QueryPlanNode_SequenceNode {
        match self.node {
            ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::sequence(ref v)) => v,
            _ => <Trace_QueryPlanNode_SequenceNode as ::protobuf::Message>::default_instance(),
        }
    }
    pub fn clear_sequence(&mut self) {
        self.node = ::std::option::Option::None;
    }

    pub fn has_sequence(&self) -> bool {
        match self.node {
            ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::sequence(..)) => true,
            _ => false,
        }
    }

    // Param is passed by value, moved
    pub fn set_sequence(&mut self, v: Trace_QueryPlanNode_SequenceNode) {
        self.node = ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::sequence(v))
    }

    // Mutable pointer to the field.
    pub fn mut_sequence(&mut self) -> &mut Trace_QueryPlanNode_SequenceNode {
        if let ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::sequence(_)) = self.node
        {
        } else {
            self.node = ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::sequence(
                Trace_QueryPlanNode_SequenceNode::new(),
            ));
        }
        match self.node {
            ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::sequence(ref mut v)) => v,
            _ => panic!(),
        }
    }

    // Take field
    pub fn take_sequence(&mut self) -> Trace_QueryPlanNode_SequenceNode {
        if self.has_sequence() {
            match self.node.take() {
                ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::sequence(v)) => v,
                _ => panic!(),
            }
        } else {
            Trace_QueryPlanNode_SequenceNode::new()
        }
    }

    // .mdg.engine.proto.Trace.QueryPlanNode.ParallelNode parallel = 2;

    pub fn get_parallel(&self) -> &Trace_QueryPlanNode_ParallelNode {
        match self.node {
            ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::parallel(ref v)) => v,
            _ => <Trace_QueryPlanNode_ParallelNode as ::protobuf::Message>::default_instance(),
        }
    }
    pub fn clear_parallel(&mut self) {
        self.node = ::std::option::Option::None;
    }

    pub fn has_parallel(&self) -> bool {
        match self.node {
            ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::parallel(..)) => true,
            _ => false,
        }
    }

    // Param is passed by value, moved
    pub fn set_parallel(&mut self, v: Trace_QueryPlanNode_ParallelNode) {
        self.node = ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::parallel(v))
    }

    // Mutable pointer to the field.
    pub fn mut_parallel(&mut self) -> &mut Trace_QueryPlanNode_ParallelNode {
        if let ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::parallel(_)) = self.node
        {
        } else {
            self.node = ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::parallel(
                Trace_QueryPlanNode_ParallelNode::new(),
            ));
        }
        match self.node {
            ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::parallel(ref mut v)) => v,
            _ => panic!(),
        }
    }

    // Take field
    pub fn take_parallel(&mut self) -> Trace_QueryPlanNode_ParallelNode {
        if self.has_parallel() {
            match self.node.take() {
                ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::parallel(v)) => v,
                _ => panic!(),
            }
        } else {
            Trace_QueryPlanNode_ParallelNode::new()
        }
    }

    // .mdg.engine.proto.Trace.QueryPlanNode.FetchNode fetch = 3;

    pub fn get_fetch(&self) -> &Trace_QueryPlanNode_FetchNode {
        match self.node {
            ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::fetch(ref v)) => v,
            _ => <Trace_QueryPlanNode_FetchNode as ::protobuf::Message>::default_instance(),
        }
    }
    pub fn clear_fetch(&mut self) {
        self.node = ::std::option::Option::None;
    }

    pub fn has_fetch(&self) -> bool {
        match self.node {
            ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::fetch(..)) => true,
            _ => false,
        }
    }

    // Param is passed by value, moved
    pub fn set_fetch(&mut self, v: Trace_QueryPlanNode_FetchNode) {
        self.node = ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::fetch(v))
    }

    // Mutable pointer to the field.
    pub fn mut_fetch(&mut self) -> &mut Trace_QueryPlanNode_FetchNode {
        if let ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::fetch(_)) = self.node {
        } else {
            self.node = ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::fetch(
                Trace_QueryPlanNode_FetchNode::new(),
            ));
        }
        match self.node {
            ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::fetch(ref mut v)) => v,
            _ => panic!(),
        }
    }

    // Take field
    pub fn take_fetch(&mut self) -> Trace_QueryPlanNode_FetchNode {
        if self.has_fetch() {
            match self.node.take() {
                ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::fetch(v)) => v,
                _ => panic!(),
            }
        } else {
            Trace_QueryPlanNode_FetchNode::new()
        }
    }

    // .mdg.engine.proto.Trace.QueryPlanNode.FlattenNode flatten = 4;

    pub fn get_flatten(&self) -> &Trace_QueryPlanNode_FlattenNode {
        match self.node {
            ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::flatten(ref v)) => v,
            _ => <Trace_QueryPlanNode_FlattenNode as ::protobuf::Message>::default_instance(),
        }
    }
    pub fn clear_flatten(&mut self) {
        self.node = ::std::option::Option::None;
    }

    pub fn has_flatten(&self) -> bool {
        match self.node {
            ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::flatten(..)) => true,
            _ => false,
        }
    }

    // Param is passed by value, moved
    pub fn set_flatten(&mut self, v: Trace_QueryPlanNode_FlattenNode) {
        self.node = ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::flatten(v))
    }

    // Mutable pointer to the field.
    pub fn mut_flatten(&mut self) -> &mut Trace_QueryPlanNode_FlattenNode {
        if let ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::flatten(_)) = self.node {
        } else {
            self.node = ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::flatten(
                Trace_QueryPlanNode_FlattenNode::new(),
            ));
        }
        match self.node {
            ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::flatten(ref mut v)) => v,
            _ => panic!(),
        }
    }

    // Take field
    pub fn take_flatten(&mut self) -> Trace_QueryPlanNode_FlattenNode {
        if self.has_flatten() {
            match self.node.take() {
                ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::flatten(v)) => v,
                _ => panic!(),
            }
        } else {
            Trace_QueryPlanNode_FlattenNode::new()
        }
    }
}

impl ::protobuf::Message for Trace_QueryPlanNode {
    fn is_initialized(&self) -> bool {
        if let Some(Trace_QueryPlanNode_oneof_node::sequence(ref v)) = self.node {
            if !v.is_initialized() {
                return false;
            }
        }
        if let Some(Trace_QueryPlanNode_oneof_node::parallel(ref v)) = self.node {
            if !v.is_initialized() {
                return false;
            }
        }
        if let Some(Trace_QueryPlanNode_oneof_node::fetch(ref v)) = self.node {
            if !v.is_initialized() {
                return false;
            }
        }
        if let Some(Trace_QueryPlanNode_oneof_node::flatten(ref v)) = self.node {
            if !v.is_initialized() {
                return false;
            }
        }
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    if wire_type != ::protobuf::wire_format::WireTypeLengthDelimited {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    self.node = ::std::option::Option::Some(
                        Trace_QueryPlanNode_oneof_node::sequence(is.read_message()?),
                    );
                }
                2 => {
                    if wire_type != ::protobuf::wire_format::WireTypeLengthDelimited {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    self.node = ::std::option::Option::Some(
                        Trace_QueryPlanNode_oneof_node::parallel(is.read_message()?),
                    );
                }
                3 => {
                    if wire_type != ::protobuf::wire_format::WireTypeLengthDelimited {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    self.node = ::std::option::Option::Some(Trace_QueryPlanNode_oneof_node::fetch(
                        is.read_message()?,
                    ));
                }
                4 => {
                    if wire_type != ::protobuf::wire_format::WireTypeLengthDelimited {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    self.node = ::std::option::Option::Some(
                        Trace_QueryPlanNode_oneof_node::flatten(is.read_message()?),
                    );
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if let ::std::option::Option::Some(ref v) = self.node {
            match v {
                &Trace_QueryPlanNode_oneof_node::sequence(ref v) => {
                    let len = v.compute_size();
                    my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
                }
                &Trace_QueryPlanNode_oneof_node::parallel(ref v) => {
                    let len = v.compute_size();
                    my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
                }
                &Trace_QueryPlanNode_oneof_node::fetch(ref v) => {
                    let len = v.compute_size();
                    my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
                }
                &Trace_QueryPlanNode_oneof_node::flatten(ref v) => {
                    let len = v.compute_size();
                    my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
                }
            };
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        if let ::std::option::Option::Some(ref v) = self.node {
            match v {
                &Trace_QueryPlanNode_oneof_node::sequence(ref v) => {
                    os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
                    os.write_raw_varint32(v.get_cached_size())?;
                    v.write_to_with_cached_sizes(os)?;
                }
                &Trace_QueryPlanNode_oneof_node::parallel(ref v) => {
                    os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
                    os.write_raw_varint32(v.get_cached_size())?;
                    v.write_to_with_cached_sizes(os)?;
                }
                &Trace_QueryPlanNode_oneof_node::fetch(ref v) => {
                    os.write_tag(3, ::protobuf::wire_format::WireTypeLengthDelimited)?;
                    os.write_raw_varint32(v.get_cached_size())?;
                    v.write_to_with_cached_sizes(os)?;
                }
                &Trace_QueryPlanNode_oneof_node::flatten(ref v) => {
                    os.write_tag(4, ::protobuf::wire_format::WireTypeLengthDelimited)?;
                    os.write_raw_varint32(v.get_cached_size())?;
                    v.write_to_with_cached_sizes(os)?;
                }
            };
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> Trace_QueryPlanNode {
        Trace_QueryPlanNode::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(
                ::protobuf::reflect::accessor::make_singular_message_accessor::<
                    _,
                    Trace_QueryPlanNode_SequenceNode,
                >(
                    "sequence",
                    Trace_QueryPlanNode::has_sequence,
                    Trace_QueryPlanNode::get_sequence,
                ),
            );
            fields.push(
                ::protobuf::reflect::accessor::make_singular_message_accessor::<
                    _,
                    Trace_QueryPlanNode_ParallelNode,
                >(
                    "parallel",
                    Trace_QueryPlanNode::has_parallel,
                    Trace_QueryPlanNode::get_parallel,
                ),
            );
            fields.push(
                ::protobuf::reflect::accessor::make_singular_message_accessor::<
                    _,
                    Trace_QueryPlanNode_FetchNode,
                >(
                    "fetch",
                    Trace_QueryPlanNode::has_fetch,
                    Trace_QueryPlanNode::get_fetch,
                ),
            );
            fields.push(
                ::protobuf::reflect::accessor::make_singular_message_accessor::<
                    _,
                    Trace_QueryPlanNode_FlattenNode,
                >(
                    "flatten",
                    Trace_QueryPlanNode::has_flatten,
                    Trace_QueryPlanNode::get_flatten,
                ),
            );
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<Trace_QueryPlanNode>(
                "Trace.QueryPlanNode",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static Trace_QueryPlanNode {
        static instance: ::protobuf::rt::LazyV2<Trace_QueryPlanNode> = ::protobuf::rt::LazyV2::INIT;
        instance.get(Trace_QueryPlanNode::new)
    }
}

impl ::protobuf::Clear for Trace_QueryPlanNode {
    fn clear(&mut self) {
        self.node = ::std::option::Option::None;
        self.node = ::std::option::Option::None;
        self.node = ::std::option::Option::None;
        self.node = ::std::option::Option::None;
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for Trace_QueryPlanNode {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for Trace_QueryPlanNode {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct Trace_QueryPlanNode_SequenceNode {
    // message fields
    pub nodes: ::protobuf::RepeatedField<Trace_QueryPlanNode>,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a Trace_QueryPlanNode_SequenceNode {
    fn default() -> &'a Trace_QueryPlanNode_SequenceNode {
        <Trace_QueryPlanNode_SequenceNode as ::protobuf::Message>::default_instance()
    }
}

impl Trace_QueryPlanNode_SequenceNode {
    pub fn new() -> Trace_QueryPlanNode_SequenceNode {
        ::std::default::Default::default()
    }

    // repeated .mdg.engine.proto.Trace.QueryPlanNode nodes = 1;

    pub fn get_nodes(&self) -> &[Trace_QueryPlanNode] {
        &self.nodes
    }
    pub fn clear_nodes(&mut self) {
        self.nodes.clear();
    }

    // Param is passed by value, moved
    pub fn set_nodes(&mut self, v: ::protobuf::RepeatedField<Trace_QueryPlanNode>) {
        self.nodes = v;
    }

    // Mutable pointer to the field.
    pub fn mut_nodes(&mut self) -> &mut ::protobuf::RepeatedField<Trace_QueryPlanNode> {
        &mut self.nodes
    }

    // Take field
    pub fn take_nodes(&mut self) -> ::protobuf::RepeatedField<Trace_QueryPlanNode> {
        ::std::mem::replace(&mut self.nodes, ::protobuf::RepeatedField::new())
    }
}

impl ::protobuf::Message for Trace_QueryPlanNode_SequenceNode {
    fn is_initialized(&self) -> bool {
        for v in &self.nodes {
            if !v.is_initialized() {
                return false;
            }
        }
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.nodes)?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        for value in &self.nodes {
            let len = value.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        for v in &self.nodes {
            os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> Trace_QueryPlanNode_SequenceNode {
        Trace_QueryPlanNode_SequenceNode::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(
                ::protobuf::reflect::accessor::make_repeated_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<Trace_QueryPlanNode>,
                >(
                    "nodes",
                    |m: &Trace_QueryPlanNode_SequenceNode| &m.nodes,
                    |m: &mut Trace_QueryPlanNode_SequenceNode| &mut m.nodes,
                ),
            );
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<Trace_QueryPlanNode_SequenceNode>(
                "Trace.QueryPlanNode.SequenceNode",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static Trace_QueryPlanNode_SequenceNode {
        static instance: ::protobuf::rt::LazyV2<Trace_QueryPlanNode_SequenceNode> =
            ::protobuf::rt::LazyV2::INIT;
        instance.get(Trace_QueryPlanNode_SequenceNode::new)
    }
}

impl ::protobuf::Clear for Trace_QueryPlanNode_SequenceNode {
    fn clear(&mut self) {
        self.nodes.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for Trace_QueryPlanNode_SequenceNode {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for Trace_QueryPlanNode_SequenceNode {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct Trace_QueryPlanNode_ParallelNode {
    // message fields
    pub nodes: ::protobuf::RepeatedField<Trace_QueryPlanNode>,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a Trace_QueryPlanNode_ParallelNode {
    fn default() -> &'a Trace_QueryPlanNode_ParallelNode {
        <Trace_QueryPlanNode_ParallelNode as ::protobuf::Message>::default_instance()
    }
}

impl Trace_QueryPlanNode_ParallelNode {
    pub fn new() -> Trace_QueryPlanNode_ParallelNode {
        ::std::default::Default::default()
    }

    // repeated .mdg.engine.proto.Trace.QueryPlanNode nodes = 1;

    pub fn get_nodes(&self) -> &[Trace_QueryPlanNode] {
        &self.nodes
    }
    pub fn clear_nodes(&mut self) {
        self.nodes.clear();
    }

    // Param is passed by value, moved
    pub fn set_nodes(&mut self, v: ::protobuf::RepeatedField<Trace_QueryPlanNode>) {
        self.nodes = v;
    }

    // Mutable pointer to the field.
    pub fn mut_nodes(&mut self) -> &mut ::protobuf::RepeatedField<Trace_QueryPlanNode> {
        &mut self.nodes
    }

    // Take field
    pub fn take_nodes(&mut self) -> ::protobuf::RepeatedField<Trace_QueryPlanNode> {
        ::std::mem::replace(&mut self.nodes, ::protobuf::RepeatedField::new())
    }
}

impl ::protobuf::Message for Trace_QueryPlanNode_ParallelNode {
    fn is_initialized(&self) -> bool {
        for v in &self.nodes {
            if !v.is_initialized() {
                return false;
            }
        }
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.nodes)?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        for value in &self.nodes {
            let len = value.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        for v in &self.nodes {
            os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> Trace_QueryPlanNode_ParallelNode {
        Trace_QueryPlanNode_ParallelNode::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(
                ::protobuf::reflect::accessor::make_repeated_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<Trace_QueryPlanNode>,
                >(
                    "nodes",
                    |m: &Trace_QueryPlanNode_ParallelNode| &m.nodes,
                    |m: &mut Trace_QueryPlanNode_ParallelNode| &mut m.nodes,
                ),
            );
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<Trace_QueryPlanNode_ParallelNode>(
                "Trace.QueryPlanNode.ParallelNode",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static Trace_QueryPlanNode_ParallelNode {
        static instance: ::protobuf::rt::LazyV2<Trace_QueryPlanNode_ParallelNode> =
            ::protobuf::rt::LazyV2::INIT;
        instance.get(Trace_QueryPlanNode_ParallelNode::new)
    }
}

impl ::protobuf::Clear for Trace_QueryPlanNode_ParallelNode {
    fn clear(&mut self) {
        self.nodes.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for Trace_QueryPlanNode_ParallelNode {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for Trace_QueryPlanNode_ParallelNode {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct Trace_QueryPlanNode_FetchNode {
    // message fields
    pub service_name: ::std::string::String,
    pub trace_parsing_failed: bool,
    pub trace: ::protobuf::SingularPtrField<Trace>,
    pub sent_time_offset: u64,
    pub sent_time: ::protobuf::SingularPtrField<::protobuf::well_known_types::Timestamp>,
    pub received_time: ::protobuf::SingularPtrField<::protobuf::well_known_types::Timestamp>,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a Trace_QueryPlanNode_FetchNode {
    fn default() -> &'a Trace_QueryPlanNode_FetchNode {
        <Trace_QueryPlanNode_FetchNode as ::protobuf::Message>::default_instance()
    }
}

impl Trace_QueryPlanNode_FetchNode {
    pub fn new() -> Trace_QueryPlanNode_FetchNode {
        ::std::default::Default::default()
    }

    // string service_name = 1;

    pub fn get_service_name(&self) -> &str {
        &self.service_name
    }
    pub fn clear_service_name(&mut self) {
        self.service_name.clear();
    }

    // Param is passed by value, moved
    pub fn set_service_name(&mut self, v: ::std::string::String) {
        self.service_name = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_service_name(&mut self) -> &mut ::std::string::String {
        &mut self.service_name
    }

    // Take field
    pub fn take_service_name(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.service_name, ::std::string::String::new())
    }

    // bool trace_parsing_failed = 2;

    pub fn get_trace_parsing_failed(&self) -> bool {
        self.trace_parsing_failed
    }
    pub fn clear_trace_parsing_failed(&mut self) {
        self.trace_parsing_failed = false;
    }

    // Param is passed by value, moved
    pub fn set_trace_parsing_failed(&mut self, v: bool) {
        self.trace_parsing_failed = v;
    }

    // .mdg.engine.proto.Trace trace = 3;

    pub fn get_trace(&self) -> &Trace {
        self.trace
            .as_ref()
            .unwrap_or_else(|| <Trace as ::protobuf::Message>::default_instance())
    }
    pub fn clear_trace(&mut self) {
        self.trace.clear();
    }

    pub fn has_trace(&self) -> bool {
        self.trace.is_some()
    }

    // Param is passed by value, moved
    pub fn set_trace(&mut self, v: Trace) {
        self.trace = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_trace(&mut self) -> &mut Trace {
        if self.trace.is_none() {
            self.trace.set_default();
        }
        self.trace.as_mut().unwrap()
    }

    // Take field
    pub fn take_trace(&mut self) -> Trace {
        self.trace.take().unwrap_or_else(|| Trace::new())
    }

    // uint64 sent_time_offset = 4;

    pub fn get_sent_time_offset(&self) -> u64 {
        self.sent_time_offset
    }
    pub fn clear_sent_time_offset(&mut self) {
        self.sent_time_offset = 0;
    }

    // Param is passed by value, moved
    pub fn set_sent_time_offset(&mut self, v: u64) {
        self.sent_time_offset = v;
    }

    // .google.protobuf.Timestamp sent_time = 5;

    pub fn get_sent_time(&self) -> &::protobuf::well_known_types::Timestamp {
        self.sent_time.as_ref().unwrap_or_else(|| {
            <::protobuf::well_known_types::Timestamp as ::protobuf::Message>::default_instance()
        })
    }
    pub fn clear_sent_time(&mut self) {
        self.sent_time.clear();
    }

    pub fn has_sent_time(&self) -> bool {
        self.sent_time.is_some()
    }

    // Param is passed by value, moved
    pub fn set_sent_time(&mut self, v: ::protobuf::well_known_types::Timestamp) {
        self.sent_time = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_sent_time(&mut self) -> &mut ::protobuf::well_known_types::Timestamp {
        if self.sent_time.is_none() {
            self.sent_time.set_default();
        }
        self.sent_time.as_mut().unwrap()
    }

    // Take field
    pub fn take_sent_time(&mut self) -> ::protobuf::well_known_types::Timestamp {
        self.sent_time
            .take()
            .unwrap_or_else(|| ::protobuf::well_known_types::Timestamp::new())
    }

    // .google.protobuf.Timestamp received_time = 6;

    pub fn get_received_time(&self) -> &::protobuf::well_known_types::Timestamp {
        self.received_time.as_ref().unwrap_or_else(|| {
            <::protobuf::well_known_types::Timestamp as ::protobuf::Message>::default_instance()
        })
    }
    pub fn clear_received_time(&mut self) {
        self.received_time.clear();
    }

    pub fn has_received_time(&self) -> bool {
        self.received_time.is_some()
    }

    // Param is passed by value, moved
    pub fn set_received_time(&mut self, v: ::protobuf::well_known_types::Timestamp) {
        self.received_time = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_received_time(&mut self) -> &mut ::protobuf::well_known_types::Timestamp {
        if self.received_time.is_none() {
            self.received_time.set_default();
        }
        self.received_time.as_mut().unwrap()
    }

    // Take field
    pub fn take_received_time(&mut self) -> ::protobuf::well_known_types::Timestamp {
        self.received_time
            .take()
            .unwrap_or_else(|| ::protobuf::well_known_types::Timestamp::new())
    }
}

impl ::protobuf::Message for Trace_QueryPlanNode_FetchNode {
    fn is_initialized(&self) -> bool {
        for v in &self.trace {
            if !v.is_initialized() {
                return false;
            }
        }
        for v in &self.sent_time {
            if !v.is_initialized() {
                return false;
            }
        }
        for v in &self.received_time {
            if !v.is_initialized() {
                return false;
            }
        }
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.service_name,
                    )?;
                }
                2 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_bool()?;
                    self.trace_parsing_failed = tmp;
                }
                3 => {
                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.trace)?;
                }
                4 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_uint64()?;
                    self.sent_time_offset = tmp;
                }
                5 => {
                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.sent_time)?;
                }
                6 => {
                    ::protobuf::rt::read_singular_message_into(
                        wire_type,
                        is,
                        &mut self.received_time,
                    )?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if !self.service_name.is_empty() {
            my_size += ::protobuf::rt::string_size(1, &self.service_name);
        }
        if self.trace_parsing_failed != false {
            my_size += 2;
        }
        if let Some(ref v) = self.trace.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        if self.sent_time_offset != 0 {
            my_size += ::protobuf::rt::value_size(
                4,
                self.sent_time_offset,
                ::protobuf::wire_format::WireTypeVarint,
            );
        }
        if let Some(ref v) = self.sent_time.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        if let Some(ref v) = self.received_time.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        if !self.service_name.is_empty() {
            os.write_string(1, &self.service_name)?;
        }
        if self.trace_parsing_failed != false {
            os.write_bool(2, self.trace_parsing_failed)?;
        }
        if let Some(ref v) = self.trace.as_ref() {
            os.write_tag(3, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        if self.sent_time_offset != 0 {
            os.write_uint64(4, self.sent_time_offset)?;
        }
        if let Some(ref v) = self.sent_time.as_ref() {
            os.write_tag(5, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        if let Some(ref v) = self.received_time.as_ref() {
            os.write_tag(6, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> Trace_QueryPlanNode_FetchNode {
        Trace_QueryPlanNode_FetchNode::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "service_name",
                |m: &Trace_QueryPlanNode_FetchNode| &m.service_name,
                |m: &mut Trace_QueryPlanNode_FetchNode| &mut m.service_name,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeBool,
            >(
                "trace_parsing_failed",
                |m: &Trace_QueryPlanNode_FetchNode| &m.trace_parsing_failed,
                |m: &mut Trace_QueryPlanNode_FetchNode| &mut m.trace_parsing_failed,
            ));
            fields.push(
                ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<Trace>,
                >(
                    "trace",
                    |m: &Trace_QueryPlanNode_FetchNode| &m.trace,
                    |m: &mut Trace_QueryPlanNode_FetchNode| &mut m.trace,
                ),
            );
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeUint64,
            >(
                "sent_time_offset",
                |m: &Trace_QueryPlanNode_FetchNode| &m.sent_time_offset,
                |m: &mut Trace_QueryPlanNode_FetchNode| &mut m.sent_time_offset,
            ));
            fields.push(
                ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<::protobuf::well_known_types::Timestamp>,
                >(
                    "sent_time",
                    |m: &Trace_QueryPlanNode_FetchNode| &m.sent_time,
                    |m: &mut Trace_QueryPlanNode_FetchNode| &mut m.sent_time,
                ),
            );
            fields.push(
                ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<::protobuf::well_known_types::Timestamp>,
                >(
                    "received_time",
                    |m: &Trace_QueryPlanNode_FetchNode| &m.received_time,
                    |m: &mut Trace_QueryPlanNode_FetchNode| &mut m.received_time,
                ),
            );
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<Trace_QueryPlanNode_FetchNode>(
                "Trace.QueryPlanNode.FetchNode",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static Trace_QueryPlanNode_FetchNode {
        static instance: ::protobuf::rt::LazyV2<Trace_QueryPlanNode_FetchNode> =
            ::protobuf::rt::LazyV2::INIT;
        instance.get(Trace_QueryPlanNode_FetchNode::new)
    }
}

impl ::protobuf::Clear for Trace_QueryPlanNode_FetchNode {
    fn clear(&mut self) {
        self.service_name.clear();
        self.trace_parsing_failed = false;
        self.trace.clear();
        self.sent_time_offset = 0;
        self.sent_time.clear();
        self.received_time.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for Trace_QueryPlanNode_FetchNode {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for Trace_QueryPlanNode_FetchNode {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct Trace_QueryPlanNode_FlattenNode {
    // message fields
    pub response_path: ::protobuf::RepeatedField<Trace_QueryPlanNode_ResponsePathElement>,
    pub node: ::protobuf::SingularPtrField<Trace_QueryPlanNode>,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a Trace_QueryPlanNode_FlattenNode {
    fn default() -> &'a Trace_QueryPlanNode_FlattenNode {
        <Trace_QueryPlanNode_FlattenNode as ::protobuf::Message>::default_instance()
    }
}

impl Trace_QueryPlanNode_FlattenNode {
    pub fn new() -> Trace_QueryPlanNode_FlattenNode {
        ::std::default::Default::default()
    }

    // repeated .mdg.engine.proto.Trace.QueryPlanNode.ResponsePathElement response_path = 1;

    pub fn get_response_path(&self) -> &[Trace_QueryPlanNode_ResponsePathElement] {
        &self.response_path
    }
    pub fn clear_response_path(&mut self) {
        self.response_path.clear();
    }

    // Param is passed by value, moved
    pub fn set_response_path(
        &mut self,
        v: ::protobuf::RepeatedField<Trace_QueryPlanNode_ResponsePathElement>,
    ) {
        self.response_path = v;
    }

    // Mutable pointer to the field.
    pub fn mut_response_path(
        &mut self,
    ) -> &mut ::protobuf::RepeatedField<Trace_QueryPlanNode_ResponsePathElement> {
        &mut self.response_path
    }

    // Take field
    pub fn take_response_path(
        &mut self,
    ) -> ::protobuf::RepeatedField<Trace_QueryPlanNode_ResponsePathElement> {
        ::std::mem::replace(&mut self.response_path, ::protobuf::RepeatedField::new())
    }

    // .mdg.engine.proto.Trace.QueryPlanNode node = 2;

    pub fn get_node(&self) -> &Trace_QueryPlanNode {
        self.node
            .as_ref()
            .unwrap_or_else(|| <Trace_QueryPlanNode as ::protobuf::Message>::default_instance())
    }
    pub fn clear_node(&mut self) {
        self.node.clear();
    }

    pub fn has_node(&self) -> bool {
        self.node.is_some()
    }

    // Param is passed by value, moved
    pub fn set_node(&mut self, v: Trace_QueryPlanNode) {
        self.node = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_node(&mut self) -> &mut Trace_QueryPlanNode {
        if self.node.is_none() {
            self.node.set_default();
        }
        self.node.as_mut().unwrap()
    }

    // Take field
    pub fn take_node(&mut self) -> Trace_QueryPlanNode {
        self.node
            .take()
            .unwrap_or_else(|| Trace_QueryPlanNode::new())
    }
}

impl ::protobuf::Message for Trace_QueryPlanNode_FlattenNode {
    fn is_initialized(&self) -> bool {
        for v in &self.response_path {
            if !v.is_initialized() {
                return false;
            }
        }
        for v in &self.node {
            if !v.is_initialized() {
                return false;
            }
        }
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    ::protobuf::rt::read_repeated_message_into(
                        wire_type,
                        is,
                        &mut self.response_path,
                    )?;
                }
                2 => {
                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.node)?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        for value in &self.response_path {
            let len = value.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        if let Some(ref v) = self.node.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        for v in &self.response_path {
            os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        if let Some(ref v) = self.node.as_ref() {
            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> Trace_QueryPlanNode_FlattenNode {
        Trace_QueryPlanNode_FlattenNode::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(
                ::protobuf::reflect::accessor::make_repeated_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<Trace_QueryPlanNode_ResponsePathElement>,
                >(
                    "response_path",
                    |m: &Trace_QueryPlanNode_FlattenNode| &m.response_path,
                    |m: &mut Trace_QueryPlanNode_FlattenNode| &mut m.response_path,
                ),
            );
            fields.push(
                ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<Trace_QueryPlanNode>,
                >(
                    "node",
                    |m: &Trace_QueryPlanNode_FlattenNode| &m.node,
                    |m: &mut Trace_QueryPlanNode_FlattenNode| &mut m.node,
                ),
            );
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<Trace_QueryPlanNode_FlattenNode>(
                "Trace.QueryPlanNode.FlattenNode",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static Trace_QueryPlanNode_FlattenNode {
        static instance: ::protobuf::rt::LazyV2<Trace_QueryPlanNode_FlattenNode> =
            ::protobuf::rt::LazyV2::INIT;
        instance.get(Trace_QueryPlanNode_FlattenNode::new)
    }
}

impl ::protobuf::Clear for Trace_QueryPlanNode_FlattenNode {
    fn clear(&mut self) {
        self.response_path.clear();
        self.node.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for Trace_QueryPlanNode_FlattenNode {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for Trace_QueryPlanNode_FlattenNode {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct Trace_QueryPlanNode_ResponsePathElement {
    // message oneof groups
    pub id: ::std::option::Option<Trace_QueryPlanNode_ResponsePathElement_oneof_id>,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a Trace_QueryPlanNode_ResponsePathElement {
    fn default() -> &'a Trace_QueryPlanNode_ResponsePathElement {
        <Trace_QueryPlanNode_ResponsePathElement as ::protobuf::Message>::default_instance()
    }
}

#[derive(Clone, PartialEq, Debug)]
pub enum Trace_QueryPlanNode_ResponsePathElement_oneof_id {
    field_name(::std::string::String),
    index(u32),
}

impl Trace_QueryPlanNode_ResponsePathElement {
    pub fn new() -> Trace_QueryPlanNode_ResponsePathElement {
        ::std::default::Default::default()
    }

    // string field_name = 1;

    pub fn get_field_name(&self) -> &str {
        match self.id {
            ::std::option::Option::Some(
                Trace_QueryPlanNode_ResponsePathElement_oneof_id::field_name(ref v),
            ) => v,
            _ => "",
        }
    }
    pub fn clear_field_name(&mut self) {
        self.id = ::std::option::Option::None;
    }

    pub fn has_field_name(&self) -> bool {
        match self.id {
            ::std::option::Option::Some(
                Trace_QueryPlanNode_ResponsePathElement_oneof_id::field_name(..),
            ) => true,
            _ => false,
        }
    }

    // Param is passed by value, moved
    pub fn set_field_name(&mut self, v: ::std::string::String) {
        self.id = ::std::option::Option::Some(
            Trace_QueryPlanNode_ResponsePathElement_oneof_id::field_name(v),
        )
    }

    // Mutable pointer to the field.
    pub fn mut_field_name(&mut self) -> &mut ::std::string::String {
        if let ::std::option::Option::Some(
            Trace_QueryPlanNode_ResponsePathElement_oneof_id::field_name(_),
        ) = self.id
        {
        } else {
            self.id = ::std::option::Option::Some(
                Trace_QueryPlanNode_ResponsePathElement_oneof_id::field_name(
                    ::std::string::String::new(),
                ),
            );
        }
        match self.id {
            ::std::option::Option::Some(
                Trace_QueryPlanNode_ResponsePathElement_oneof_id::field_name(ref mut v),
            ) => v,
            _ => panic!(),
        }
    }

    // Take field
    pub fn take_field_name(&mut self) -> ::std::string::String {
        if self.has_field_name() {
            match self.id.take() {
                ::std::option::Option::Some(
                    Trace_QueryPlanNode_ResponsePathElement_oneof_id::field_name(v),
                ) => v,
                _ => panic!(),
            }
        } else {
            ::std::string::String::new()
        }
    }

    // uint32 index = 2;

    pub fn get_index(&self) -> u32 {
        match self.id {
            ::std::option::Option::Some(
                Trace_QueryPlanNode_ResponsePathElement_oneof_id::index(v),
            ) => v,
            _ => 0,
        }
    }
    pub fn clear_index(&mut self) {
        self.id = ::std::option::Option::None;
    }

    pub fn has_index(&self) -> bool {
        match self.id {
            ::std::option::Option::Some(
                Trace_QueryPlanNode_ResponsePathElement_oneof_id::index(..),
            ) => true,
            _ => false,
        }
    }

    // Param is passed by value, moved
    pub fn set_index(&mut self, v: u32) {
        self.id =
            ::std::option::Option::Some(Trace_QueryPlanNode_ResponsePathElement_oneof_id::index(v))
    }
}

impl ::protobuf::Message for Trace_QueryPlanNode_ResponsePathElement {
    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    if wire_type != ::protobuf::wire_format::WireTypeLengthDelimited {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    self.id = ::std::option::Option::Some(
                        Trace_QueryPlanNode_ResponsePathElement_oneof_id::field_name(
                            is.read_string()?,
                        ),
                    );
                }
                2 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    self.id = ::std::option::Option::Some(
                        Trace_QueryPlanNode_ResponsePathElement_oneof_id::index(is.read_uint32()?),
                    );
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if let ::std::option::Option::Some(ref v) = self.id {
            match v {
                &Trace_QueryPlanNode_ResponsePathElement_oneof_id::field_name(ref v) => {
                    my_size += ::protobuf::rt::string_size(1, &v);
                }
                &Trace_QueryPlanNode_ResponsePathElement_oneof_id::index(v) => {
                    my_size +=
                        ::protobuf::rt::value_size(2, v, ::protobuf::wire_format::WireTypeVarint);
                }
            };
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        if let ::std::option::Option::Some(ref v) = self.id {
            match v {
                &Trace_QueryPlanNode_ResponsePathElement_oneof_id::field_name(ref v) => {
                    os.write_string(1, v)?;
                }
                &Trace_QueryPlanNode_ResponsePathElement_oneof_id::index(v) => {
                    os.write_uint32(2, v)?;
                }
            };
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> Trace_QueryPlanNode_ResponsePathElement {
        Trace_QueryPlanNode_ResponsePathElement::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(
                ::protobuf::reflect::accessor::make_singular_string_accessor::<_>(
                    "field_name",
                    Trace_QueryPlanNode_ResponsePathElement::has_field_name,
                    Trace_QueryPlanNode_ResponsePathElement::get_field_name,
                ),
            );
            fields.push(
                ::protobuf::reflect::accessor::make_singular_u32_accessor::<_>(
                    "index",
                    Trace_QueryPlanNode_ResponsePathElement::has_index,
                    Trace_QueryPlanNode_ResponsePathElement::get_index,
                ),
            );
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<
                Trace_QueryPlanNode_ResponsePathElement,
            >(
                "Trace.QueryPlanNode.ResponsePathElement",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static Trace_QueryPlanNode_ResponsePathElement {
        static instance: ::protobuf::rt::LazyV2<Trace_QueryPlanNode_ResponsePathElement> =
            ::protobuf::rt::LazyV2::INIT;
        instance.get(Trace_QueryPlanNode_ResponsePathElement::new)
    }
}

impl ::protobuf::Clear for Trace_QueryPlanNode_ResponsePathElement {
    fn clear(&mut self) {
        self.id = ::std::option::Option::None;
        self.id = ::std::option::Option::None;
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for Trace_QueryPlanNode_ResponsePathElement {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for Trace_QueryPlanNode_ResponsePathElement {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct ReportHeader {
    // message fields
    pub hostname: ::std::string::String,
    pub agent_version: ::std::string::String,
    pub service_version: ::std::string::String,
    pub runtime_version: ::std::string::String,
    pub uname: ::std::string::String,
    pub schema_tag: ::std::string::String,
    pub executable_schema_id: ::std::string::String,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a ReportHeader {
    fn default() -> &'a ReportHeader {
        <ReportHeader as ::protobuf::Message>::default_instance()
    }
}

impl ReportHeader {
    pub fn new() -> ReportHeader {
        ::std::default::Default::default()
    }

    // string hostname = 5;

    pub fn get_hostname(&self) -> &str {
        &self.hostname
    }
    pub fn clear_hostname(&mut self) {
        self.hostname.clear();
    }

    // Param is passed by value, moved
    pub fn set_hostname(&mut self, v: ::std::string::String) {
        self.hostname = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_hostname(&mut self) -> &mut ::std::string::String {
        &mut self.hostname
    }

    // Take field
    pub fn take_hostname(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.hostname, ::std::string::String::new())
    }

    // string agent_version = 6;

    pub fn get_agent_version(&self) -> &str {
        &self.agent_version
    }
    pub fn clear_agent_version(&mut self) {
        self.agent_version.clear();
    }

    // Param is passed by value, moved
    pub fn set_agent_version(&mut self, v: ::std::string::String) {
        self.agent_version = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_agent_version(&mut self) -> &mut ::std::string::String {
        &mut self.agent_version
    }

    // Take field
    pub fn take_agent_version(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.agent_version, ::std::string::String::new())
    }

    // string service_version = 7;

    pub fn get_service_version(&self) -> &str {
        &self.service_version
    }
    pub fn clear_service_version(&mut self) {
        self.service_version.clear();
    }

    // Param is passed by value, moved
    pub fn set_service_version(&mut self, v: ::std::string::String) {
        self.service_version = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_service_version(&mut self) -> &mut ::std::string::String {
        &mut self.service_version
    }

    // Take field
    pub fn take_service_version(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.service_version, ::std::string::String::new())
    }

    // string runtime_version = 8;

    pub fn get_runtime_version(&self) -> &str {
        &self.runtime_version
    }
    pub fn clear_runtime_version(&mut self) {
        self.runtime_version.clear();
    }

    // Param is passed by value, moved
    pub fn set_runtime_version(&mut self, v: ::std::string::String) {
        self.runtime_version = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_runtime_version(&mut self) -> &mut ::std::string::String {
        &mut self.runtime_version
    }

    // Take field
    pub fn take_runtime_version(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.runtime_version, ::std::string::String::new())
    }

    // string uname = 9;

    pub fn get_uname(&self) -> &str {
        &self.uname
    }
    pub fn clear_uname(&mut self) {
        self.uname.clear();
    }

    // Param is passed by value, moved
    pub fn set_uname(&mut self, v: ::std::string::String) {
        self.uname = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_uname(&mut self) -> &mut ::std::string::String {
        &mut self.uname
    }

    // Take field
    pub fn take_uname(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.uname, ::std::string::String::new())
    }

    // string schema_tag = 10;

    pub fn get_schema_tag(&self) -> &str {
        &self.schema_tag
    }
    pub fn clear_schema_tag(&mut self) {
        self.schema_tag.clear();
    }

    // Param is passed by value, moved
    pub fn set_schema_tag(&mut self, v: ::std::string::String) {
        self.schema_tag = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_schema_tag(&mut self) -> &mut ::std::string::String {
        &mut self.schema_tag
    }

    // Take field
    pub fn take_schema_tag(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.schema_tag, ::std::string::String::new())
    }

    // string executable_schema_id = 11;

    pub fn get_executable_schema_id(&self) -> &str {
        &self.executable_schema_id
    }
    pub fn clear_executable_schema_id(&mut self) {
        self.executable_schema_id.clear();
    }

    // Param is passed by value, moved
    pub fn set_executable_schema_id(&mut self, v: ::std::string::String) {
        self.executable_schema_id = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_executable_schema_id(&mut self) -> &mut ::std::string::String {
        &mut self.executable_schema_id
    }

    // Take field
    pub fn take_executable_schema_id(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.executable_schema_id, ::std::string::String::new())
    }
}

impl ::protobuf::Message for ReportHeader {
    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                5 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.hostname,
                    )?;
                }
                6 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.agent_version,
                    )?;
                }
                7 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.service_version,
                    )?;
                }
                8 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.runtime_version,
                    )?;
                }
                9 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.uname,
                    )?;
                }
                10 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.schema_tag,
                    )?;
                }
                11 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.executable_schema_id,
                    )?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if !self.hostname.is_empty() {
            my_size += ::protobuf::rt::string_size(5, &self.hostname);
        }
        if !self.agent_version.is_empty() {
            my_size += ::protobuf::rt::string_size(6, &self.agent_version);
        }
        if !self.service_version.is_empty() {
            my_size += ::protobuf::rt::string_size(7, &self.service_version);
        }
        if !self.runtime_version.is_empty() {
            my_size += ::protobuf::rt::string_size(8, &self.runtime_version);
        }
        if !self.uname.is_empty() {
            my_size += ::protobuf::rt::string_size(9, &self.uname);
        }
        if !self.schema_tag.is_empty() {
            my_size += ::protobuf::rt::string_size(10, &self.schema_tag);
        }
        if !self.executable_schema_id.is_empty() {
            my_size += ::protobuf::rt::string_size(11, &self.executable_schema_id);
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        if !self.hostname.is_empty() {
            os.write_string(5, &self.hostname)?;
        }
        if !self.agent_version.is_empty() {
            os.write_string(6, &self.agent_version)?;
        }
        if !self.service_version.is_empty() {
            os.write_string(7, &self.service_version)?;
        }
        if !self.runtime_version.is_empty() {
            os.write_string(8, &self.runtime_version)?;
        }
        if !self.uname.is_empty() {
            os.write_string(9, &self.uname)?;
        }
        if !self.schema_tag.is_empty() {
            os.write_string(10, &self.schema_tag)?;
        }
        if !self.executable_schema_id.is_empty() {
            os.write_string(11, &self.executable_schema_id)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> ReportHeader {
        ReportHeader::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "hostname",
                |m: &ReportHeader| &m.hostname,
                |m: &mut ReportHeader| &mut m.hostname,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "agent_version",
                |m: &ReportHeader| &m.agent_version,
                |m: &mut ReportHeader| &mut m.agent_version,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "service_version",
                |m: &ReportHeader| &m.service_version,
                |m: &mut ReportHeader| &mut m.service_version,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "runtime_version",
                |m: &ReportHeader| &m.runtime_version,
                |m: &mut ReportHeader| &mut m.runtime_version,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "uname",
                |m: &ReportHeader| &m.uname,
                |m: &mut ReportHeader| &mut m.uname,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "schema_tag",
                |m: &ReportHeader| &m.schema_tag,
                |m: &mut ReportHeader| &mut m.schema_tag,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "executable_schema_id",
                |m: &ReportHeader| &m.executable_schema_id,
                |m: &mut ReportHeader| &mut m.executable_schema_id,
            ));
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<ReportHeader>(
                "ReportHeader",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static ReportHeader {
        static instance: ::protobuf::rt::LazyV2<ReportHeader> = ::protobuf::rt::LazyV2::INIT;
        instance.get(ReportHeader::new)
    }
}

impl ::protobuf::Clear for ReportHeader {
    fn clear(&mut self) {
        self.hostname.clear();
        self.agent_version.clear();
        self.service_version.clear();
        self.runtime_version.clear();
        self.uname.clear();
        self.schema_tag.clear();
        self.executable_schema_id.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for ReportHeader {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ReportHeader {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct PathErrorStats {
    // message fields
    pub children: ::std::collections::HashMap<::std::string::String, PathErrorStats>,
    pub errors_count: u64,
    pub requests_with_errors_count: u64,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a PathErrorStats {
    fn default() -> &'a PathErrorStats {
        <PathErrorStats as ::protobuf::Message>::default_instance()
    }
}

impl PathErrorStats {
    pub fn new() -> PathErrorStats {
        ::std::default::Default::default()
    }

    // repeated .mdg.engine.proto.PathErrorStats.ChildrenEntry children = 1;

    pub fn get_children(
        &self,
    ) -> &::std::collections::HashMap<::std::string::String, PathErrorStats> {
        &self.children
    }
    pub fn clear_children(&mut self) {
        self.children.clear();
    }

    // Param is passed by value, moved
    pub fn set_children(
        &mut self,
        v: ::std::collections::HashMap<::std::string::String, PathErrorStats>,
    ) {
        self.children = v;
    }

    // Mutable pointer to the field.
    pub fn mut_children(
        &mut self,
    ) -> &mut ::std::collections::HashMap<::std::string::String, PathErrorStats> {
        &mut self.children
    }

    // Take field
    pub fn take_children(
        &mut self,
    ) -> ::std::collections::HashMap<::std::string::String, PathErrorStats> {
        ::std::mem::replace(&mut self.children, ::std::collections::HashMap::new())
    }

    // uint64 errors_count = 4;

    pub fn get_errors_count(&self) -> u64 {
        self.errors_count
    }
    pub fn clear_errors_count(&mut self) {
        self.errors_count = 0;
    }

    // Param is passed by value, moved
    pub fn set_errors_count(&mut self, v: u64) {
        self.errors_count = v;
    }

    // uint64 requests_with_errors_count = 5;

    pub fn get_requests_with_errors_count(&self) -> u64 {
        self.requests_with_errors_count
    }
    pub fn clear_requests_with_errors_count(&mut self) {
        self.requests_with_errors_count = 0;
    }

    // Param is passed by value, moved
    pub fn set_requests_with_errors_count(&mut self, v: u64) {
        self.requests_with_errors_count = v;
    }
}

impl ::protobuf::Message for PathErrorStats {
    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    ::protobuf::rt::read_map_into::<
                        ::protobuf::types::ProtobufTypeString,
                        ::protobuf::types::ProtobufTypeMessage<PathErrorStats>,
                    >(wire_type, is, &mut self.children)?;
                }
                4 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_uint64()?;
                    self.errors_count = tmp;
                }
                5 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_uint64()?;
                    self.requests_with_errors_count = tmp;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        my_size += ::protobuf::rt::compute_map_size::<
            ::protobuf::types::ProtobufTypeString,
            ::protobuf::types::ProtobufTypeMessage<PathErrorStats>,
        >(1, &self.children);
        if self.errors_count != 0 {
            my_size += ::protobuf::rt::value_size(
                4,
                self.errors_count,
                ::protobuf::wire_format::WireTypeVarint,
            );
        }
        if self.requests_with_errors_count != 0 {
            my_size += ::protobuf::rt::value_size(
                5,
                self.requests_with_errors_count,
                ::protobuf::wire_format::WireTypeVarint,
            );
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        ::protobuf::rt::write_map_with_cached_sizes::<
            ::protobuf::types::ProtobufTypeString,
            ::protobuf::types::ProtobufTypeMessage<PathErrorStats>,
        >(1, &self.children, os)?;
        if self.errors_count != 0 {
            os.write_uint64(4, self.errors_count)?;
        }
        if self.requests_with_errors_count != 0 {
            os.write_uint64(5, self.requests_with_errors_count)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> PathErrorStats {
        PathErrorStats::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(::protobuf::reflect::accessor::make_map_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
                ::protobuf::types::ProtobufTypeMessage<PathErrorStats>,
            >(
                "children",
                |m: &PathErrorStats| &m.children,
                |m: &mut PathErrorStats| &mut m.children,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeUint64,
            >(
                "errors_count",
                |m: &PathErrorStats| &m.errors_count,
                |m: &mut PathErrorStats| &mut m.errors_count,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeUint64,
            >(
                "requests_with_errors_count",
                |m: &PathErrorStats| &m.requests_with_errors_count,
                |m: &mut PathErrorStats| &mut m.requests_with_errors_count,
            ));
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<PathErrorStats>(
                "PathErrorStats",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static PathErrorStats {
        static instance: ::protobuf::rt::LazyV2<PathErrorStats> = ::protobuf::rt::LazyV2::INIT;
        instance.get(PathErrorStats::new)
    }
}

impl ::protobuf::Clear for PathErrorStats {
    fn clear(&mut self) {
        self.children.clear();
        self.errors_count = 0;
        self.requests_with_errors_count = 0;
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for PathErrorStats {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for PathErrorStats {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct QueryLatencyStats {
    // message fields
    pub latency_count: ::std::vec::Vec<i64>,
    pub request_count: u64,
    pub cache_hits: u64,
    pub persisted_query_hits: u64,
    pub persisted_query_misses: u64,
    pub cache_latency_count: ::std::vec::Vec<i64>,
    pub root_error_stats: ::protobuf::SingularPtrField<PathErrorStats>,
    pub requests_with_errors_count: u64,
    pub public_cache_ttl_count: ::std::vec::Vec<i64>,
    pub private_cache_ttl_count: ::std::vec::Vec<i64>,
    pub registered_operation_count: u64,
    pub forbidden_operation_count: u64,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a QueryLatencyStats {
    fn default() -> &'a QueryLatencyStats {
        <QueryLatencyStats as ::protobuf::Message>::default_instance()
    }
}

impl QueryLatencyStats {
    pub fn new() -> QueryLatencyStats {
        ::std::default::Default::default()
    }

    // repeated int64 latency_count = 1;

    pub fn get_latency_count(&self) -> &[i64] {
        &self.latency_count
    }
    pub fn clear_latency_count(&mut self) {
        self.latency_count.clear();
    }

    // Param is passed by value, moved
    pub fn set_latency_count(&mut self, v: ::std::vec::Vec<i64>) {
        self.latency_count = v;
    }

    // Mutable pointer to the field.
    pub fn mut_latency_count(&mut self) -> &mut ::std::vec::Vec<i64> {
        &mut self.latency_count
    }

    // Take field
    pub fn take_latency_count(&mut self) -> ::std::vec::Vec<i64> {
        ::std::mem::replace(&mut self.latency_count, ::std::vec::Vec::new())
    }

    // uint64 request_count = 2;

    pub fn get_request_count(&self) -> u64 {
        self.request_count
    }
    pub fn clear_request_count(&mut self) {
        self.request_count = 0;
    }

    // Param is passed by value, moved
    pub fn set_request_count(&mut self, v: u64) {
        self.request_count = v;
    }

    // uint64 cache_hits = 3;

    pub fn get_cache_hits(&self) -> u64 {
        self.cache_hits
    }
    pub fn clear_cache_hits(&mut self) {
        self.cache_hits = 0;
    }

    // Param is passed by value, moved
    pub fn set_cache_hits(&mut self, v: u64) {
        self.cache_hits = v;
    }

    // uint64 persisted_query_hits = 4;

    pub fn get_persisted_query_hits(&self) -> u64 {
        self.persisted_query_hits
    }
    pub fn clear_persisted_query_hits(&mut self) {
        self.persisted_query_hits = 0;
    }

    // Param is passed by value, moved
    pub fn set_persisted_query_hits(&mut self, v: u64) {
        self.persisted_query_hits = v;
    }

    // uint64 persisted_query_misses = 5;

    pub fn get_persisted_query_misses(&self) -> u64 {
        self.persisted_query_misses
    }
    pub fn clear_persisted_query_misses(&mut self) {
        self.persisted_query_misses = 0;
    }

    // Param is passed by value, moved
    pub fn set_persisted_query_misses(&mut self, v: u64) {
        self.persisted_query_misses = v;
    }

    // repeated int64 cache_latency_count = 6;

    pub fn get_cache_latency_count(&self) -> &[i64] {
        &self.cache_latency_count
    }
    pub fn clear_cache_latency_count(&mut self) {
        self.cache_latency_count.clear();
    }

    // Param is passed by value, moved
    pub fn set_cache_latency_count(&mut self, v: ::std::vec::Vec<i64>) {
        self.cache_latency_count = v;
    }

    // Mutable pointer to the field.
    pub fn mut_cache_latency_count(&mut self) -> &mut ::std::vec::Vec<i64> {
        &mut self.cache_latency_count
    }

    // Take field
    pub fn take_cache_latency_count(&mut self) -> ::std::vec::Vec<i64> {
        ::std::mem::replace(&mut self.cache_latency_count, ::std::vec::Vec::new())
    }

    // .mdg.engine.proto.PathErrorStats root_error_stats = 7;

    pub fn get_root_error_stats(&self) -> &PathErrorStats {
        self.root_error_stats
            .as_ref()
            .unwrap_or_else(|| <PathErrorStats as ::protobuf::Message>::default_instance())
    }
    pub fn clear_root_error_stats(&mut self) {
        self.root_error_stats.clear();
    }

    pub fn has_root_error_stats(&self) -> bool {
        self.root_error_stats.is_some()
    }

    // Param is passed by value, moved
    pub fn set_root_error_stats(&mut self, v: PathErrorStats) {
        self.root_error_stats = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_root_error_stats(&mut self) -> &mut PathErrorStats {
        if self.root_error_stats.is_none() {
            self.root_error_stats.set_default();
        }
        self.root_error_stats.as_mut().unwrap()
    }

    // Take field
    pub fn take_root_error_stats(&mut self) -> PathErrorStats {
        self.root_error_stats
            .take()
            .unwrap_or_else(|| PathErrorStats::new())
    }

    // uint64 requests_with_errors_count = 8;

    pub fn get_requests_with_errors_count(&self) -> u64 {
        self.requests_with_errors_count
    }
    pub fn clear_requests_with_errors_count(&mut self) {
        self.requests_with_errors_count = 0;
    }

    // Param is passed by value, moved
    pub fn set_requests_with_errors_count(&mut self, v: u64) {
        self.requests_with_errors_count = v;
    }

    // repeated int64 public_cache_ttl_count = 9;

    pub fn get_public_cache_ttl_count(&self) -> &[i64] {
        &self.public_cache_ttl_count
    }
    pub fn clear_public_cache_ttl_count(&mut self) {
        self.public_cache_ttl_count.clear();
    }

    // Param is passed by value, moved
    pub fn set_public_cache_ttl_count(&mut self, v: ::std::vec::Vec<i64>) {
        self.public_cache_ttl_count = v;
    }

    // Mutable pointer to the field.
    pub fn mut_public_cache_ttl_count(&mut self) -> &mut ::std::vec::Vec<i64> {
        &mut self.public_cache_ttl_count
    }

    // Take field
    pub fn take_public_cache_ttl_count(&mut self) -> ::std::vec::Vec<i64> {
        ::std::mem::replace(&mut self.public_cache_ttl_count, ::std::vec::Vec::new())
    }

    // repeated int64 private_cache_ttl_count = 10;

    pub fn get_private_cache_ttl_count(&self) -> &[i64] {
        &self.private_cache_ttl_count
    }
    pub fn clear_private_cache_ttl_count(&mut self) {
        self.private_cache_ttl_count.clear();
    }

    // Param is passed by value, moved
    pub fn set_private_cache_ttl_count(&mut self, v: ::std::vec::Vec<i64>) {
        self.private_cache_ttl_count = v;
    }

    // Mutable pointer to the field.
    pub fn mut_private_cache_ttl_count(&mut self) -> &mut ::std::vec::Vec<i64> {
        &mut self.private_cache_ttl_count
    }

    // Take field
    pub fn take_private_cache_ttl_count(&mut self) -> ::std::vec::Vec<i64> {
        ::std::mem::replace(&mut self.private_cache_ttl_count, ::std::vec::Vec::new())
    }

    // uint64 registered_operation_count = 11;

    pub fn get_registered_operation_count(&self) -> u64 {
        self.registered_operation_count
    }
    pub fn clear_registered_operation_count(&mut self) {
        self.registered_operation_count = 0;
    }

    // Param is passed by value, moved
    pub fn set_registered_operation_count(&mut self, v: u64) {
        self.registered_operation_count = v;
    }

    // uint64 forbidden_operation_count = 12;

    pub fn get_forbidden_operation_count(&self) -> u64 {
        self.forbidden_operation_count
    }
    pub fn clear_forbidden_operation_count(&mut self) {
        self.forbidden_operation_count = 0;
    }

    // Param is passed by value, moved
    pub fn set_forbidden_operation_count(&mut self, v: u64) {
        self.forbidden_operation_count = v;
    }
}

impl ::protobuf::Message for QueryLatencyStats {
    fn is_initialized(&self) -> bool {
        for v in &self.root_error_stats {
            if !v.is_initialized() {
                return false;
            }
        }
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    ::protobuf::rt::read_repeated_int64_into(
                        wire_type,
                        is,
                        &mut self.latency_count,
                    )?;
                }
                2 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_uint64()?;
                    self.request_count = tmp;
                }
                3 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_uint64()?;
                    self.cache_hits = tmp;
                }
                4 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_uint64()?;
                    self.persisted_query_hits = tmp;
                }
                5 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_uint64()?;
                    self.persisted_query_misses = tmp;
                }
                6 => {
                    ::protobuf::rt::read_repeated_int64_into(
                        wire_type,
                        is,
                        &mut self.cache_latency_count,
                    )?;
                }
                7 => {
                    ::protobuf::rt::read_singular_message_into(
                        wire_type,
                        is,
                        &mut self.root_error_stats,
                    )?;
                }
                8 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_uint64()?;
                    self.requests_with_errors_count = tmp;
                }
                9 => {
                    ::protobuf::rt::read_repeated_int64_into(
                        wire_type,
                        is,
                        &mut self.public_cache_ttl_count,
                    )?;
                }
                10 => {
                    ::protobuf::rt::read_repeated_int64_into(
                        wire_type,
                        is,
                        &mut self.private_cache_ttl_count,
                    )?;
                }
                11 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_uint64()?;
                    self.registered_operation_count = tmp;
                }
                12 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_uint64()?;
                    self.forbidden_operation_count = tmp;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        for value in &self.latency_count {
            my_size +=
                ::protobuf::rt::value_size(1, *value, ::protobuf::wire_format::WireTypeVarint);
        }
        if self.request_count != 0 {
            my_size += ::protobuf::rt::value_size(
                2,
                self.request_count,
                ::protobuf::wire_format::WireTypeVarint,
            );
        }
        if self.cache_hits != 0 {
            my_size += ::protobuf::rt::value_size(
                3,
                self.cache_hits,
                ::protobuf::wire_format::WireTypeVarint,
            );
        }
        if self.persisted_query_hits != 0 {
            my_size += ::protobuf::rt::value_size(
                4,
                self.persisted_query_hits,
                ::protobuf::wire_format::WireTypeVarint,
            );
        }
        if self.persisted_query_misses != 0 {
            my_size += ::protobuf::rt::value_size(
                5,
                self.persisted_query_misses,
                ::protobuf::wire_format::WireTypeVarint,
            );
        }
        for value in &self.cache_latency_count {
            my_size +=
                ::protobuf::rt::value_size(6, *value, ::protobuf::wire_format::WireTypeVarint);
        }
        if let Some(ref v) = self.root_error_stats.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        if self.requests_with_errors_count != 0 {
            my_size += ::protobuf::rt::value_size(
                8,
                self.requests_with_errors_count,
                ::protobuf::wire_format::WireTypeVarint,
            );
        }
        for value in &self.public_cache_ttl_count {
            my_size +=
                ::protobuf::rt::value_size(9, *value, ::protobuf::wire_format::WireTypeVarint);
        }
        for value in &self.private_cache_ttl_count {
            my_size +=
                ::protobuf::rt::value_size(10, *value, ::protobuf::wire_format::WireTypeVarint);
        }
        if self.registered_operation_count != 0 {
            my_size += ::protobuf::rt::value_size(
                11,
                self.registered_operation_count,
                ::protobuf::wire_format::WireTypeVarint,
            );
        }
        if self.forbidden_operation_count != 0 {
            my_size += ::protobuf::rt::value_size(
                12,
                self.forbidden_operation_count,
                ::protobuf::wire_format::WireTypeVarint,
            );
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        for v in &self.latency_count {
            os.write_int64(1, *v)?;
        }
        if self.request_count != 0 {
            os.write_uint64(2, self.request_count)?;
        }
        if self.cache_hits != 0 {
            os.write_uint64(3, self.cache_hits)?;
        }
        if self.persisted_query_hits != 0 {
            os.write_uint64(4, self.persisted_query_hits)?;
        }
        if self.persisted_query_misses != 0 {
            os.write_uint64(5, self.persisted_query_misses)?;
        }
        for v in &self.cache_latency_count {
            os.write_int64(6, *v)?;
        }
        if let Some(ref v) = self.root_error_stats.as_ref() {
            os.write_tag(7, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        if self.requests_with_errors_count != 0 {
            os.write_uint64(8, self.requests_with_errors_count)?;
        }
        for v in &self.public_cache_ttl_count {
            os.write_int64(9, *v)?;
        }
        for v in &self.private_cache_ttl_count {
            os.write_int64(10, *v)?;
        }
        if self.registered_operation_count != 0 {
            os.write_uint64(11, self.registered_operation_count)?;
        }
        if self.forbidden_operation_count != 0 {
            os.write_uint64(12, self.forbidden_operation_count)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> QueryLatencyStats {
        QueryLatencyStats::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(::protobuf::reflect::accessor::make_vec_accessor::<
                _,
                ::protobuf::types::ProtobufTypeInt64,
            >(
                "latency_count",
                |m: &QueryLatencyStats| &m.latency_count,
                |m: &mut QueryLatencyStats| &mut m.latency_count,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeUint64,
            >(
                "request_count",
                |m: &QueryLatencyStats| &m.request_count,
                |m: &mut QueryLatencyStats| &mut m.request_count,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeUint64,
            >(
                "cache_hits",
                |m: &QueryLatencyStats| &m.cache_hits,
                |m: &mut QueryLatencyStats| &mut m.cache_hits,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeUint64,
            >(
                "persisted_query_hits",
                |m: &QueryLatencyStats| &m.persisted_query_hits,
                |m: &mut QueryLatencyStats| &mut m.persisted_query_hits,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeUint64,
            >(
                "persisted_query_misses",
                |m: &QueryLatencyStats| &m.persisted_query_misses,
                |m: &mut QueryLatencyStats| &mut m.persisted_query_misses,
            ));
            fields.push(::protobuf::reflect::accessor::make_vec_accessor::<
                _,
                ::protobuf::types::ProtobufTypeInt64,
            >(
                "cache_latency_count",
                |m: &QueryLatencyStats| &m.cache_latency_count,
                |m: &mut QueryLatencyStats| &mut m.cache_latency_count,
            ));
            fields.push(
                ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<PathErrorStats>,
                >(
                    "root_error_stats",
                    |m: &QueryLatencyStats| &m.root_error_stats,
                    |m: &mut QueryLatencyStats| &mut m.root_error_stats,
                ),
            );
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeUint64,
            >(
                "requests_with_errors_count",
                |m: &QueryLatencyStats| &m.requests_with_errors_count,
                |m: &mut QueryLatencyStats| &mut m.requests_with_errors_count,
            ));
            fields.push(::protobuf::reflect::accessor::make_vec_accessor::<
                _,
                ::protobuf::types::ProtobufTypeInt64,
            >(
                "public_cache_ttl_count",
                |m: &QueryLatencyStats| &m.public_cache_ttl_count,
                |m: &mut QueryLatencyStats| &mut m.public_cache_ttl_count,
            ));
            fields.push(::protobuf::reflect::accessor::make_vec_accessor::<
                _,
                ::protobuf::types::ProtobufTypeInt64,
            >(
                "private_cache_ttl_count",
                |m: &QueryLatencyStats| &m.private_cache_ttl_count,
                |m: &mut QueryLatencyStats| &mut m.private_cache_ttl_count,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeUint64,
            >(
                "registered_operation_count",
                |m: &QueryLatencyStats| &m.registered_operation_count,
                |m: &mut QueryLatencyStats| &mut m.registered_operation_count,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeUint64,
            >(
                "forbidden_operation_count",
                |m: &QueryLatencyStats| &m.forbidden_operation_count,
                |m: &mut QueryLatencyStats| &mut m.forbidden_operation_count,
            ));
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<QueryLatencyStats>(
                "QueryLatencyStats",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static QueryLatencyStats {
        static instance: ::protobuf::rt::LazyV2<QueryLatencyStats> = ::protobuf::rt::LazyV2::INIT;
        instance.get(QueryLatencyStats::new)
    }
}

impl ::protobuf::Clear for QueryLatencyStats {
    fn clear(&mut self) {
        self.latency_count.clear();
        self.request_count = 0;
        self.cache_hits = 0;
        self.persisted_query_hits = 0;
        self.persisted_query_misses = 0;
        self.cache_latency_count.clear();
        self.root_error_stats.clear();
        self.requests_with_errors_count = 0;
        self.public_cache_ttl_count.clear();
        self.private_cache_ttl_count.clear();
        self.registered_operation_count = 0;
        self.forbidden_operation_count = 0;
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for QueryLatencyStats {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for QueryLatencyStats {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct StatsContext {
    // message fields
    pub client_reference_id: ::std::string::String,
    pub client_name: ::std::string::String,
    pub client_version: ::std::string::String,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a StatsContext {
    fn default() -> &'a StatsContext {
        <StatsContext as ::protobuf::Message>::default_instance()
    }
}

impl StatsContext {
    pub fn new() -> StatsContext {
        ::std::default::Default::default()
    }

    // string client_reference_id = 1;

    pub fn get_client_reference_id(&self) -> &str {
        &self.client_reference_id
    }
    pub fn clear_client_reference_id(&mut self) {
        self.client_reference_id.clear();
    }

    // Param is passed by value, moved
    pub fn set_client_reference_id(&mut self, v: ::std::string::String) {
        self.client_reference_id = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_client_reference_id(&mut self) -> &mut ::std::string::String {
        &mut self.client_reference_id
    }

    // Take field
    pub fn take_client_reference_id(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.client_reference_id, ::std::string::String::new())
    }

    // string client_name = 2;

    pub fn get_client_name(&self) -> &str {
        &self.client_name
    }
    pub fn clear_client_name(&mut self) {
        self.client_name.clear();
    }

    // Param is passed by value, moved
    pub fn set_client_name(&mut self, v: ::std::string::String) {
        self.client_name = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_client_name(&mut self) -> &mut ::std::string::String {
        &mut self.client_name
    }

    // Take field
    pub fn take_client_name(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.client_name, ::std::string::String::new())
    }

    // string client_version = 3;

    pub fn get_client_version(&self) -> &str {
        &self.client_version
    }
    pub fn clear_client_version(&mut self) {
        self.client_version.clear();
    }

    // Param is passed by value, moved
    pub fn set_client_version(&mut self, v: ::std::string::String) {
        self.client_version = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_client_version(&mut self) -> &mut ::std::string::String {
        &mut self.client_version
    }

    // Take field
    pub fn take_client_version(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.client_version, ::std::string::String::new())
    }
}

impl ::protobuf::Message for StatsContext {
    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.client_reference_id,
                    )?;
                }
                2 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.client_name,
                    )?;
                }
                3 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.client_version,
                    )?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if !self.client_reference_id.is_empty() {
            my_size += ::protobuf::rt::string_size(1, &self.client_reference_id);
        }
        if !self.client_name.is_empty() {
            my_size += ::protobuf::rt::string_size(2, &self.client_name);
        }
        if !self.client_version.is_empty() {
            my_size += ::protobuf::rt::string_size(3, &self.client_version);
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        if !self.client_reference_id.is_empty() {
            os.write_string(1, &self.client_reference_id)?;
        }
        if !self.client_name.is_empty() {
            os.write_string(2, &self.client_name)?;
        }
        if !self.client_version.is_empty() {
            os.write_string(3, &self.client_version)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> StatsContext {
        StatsContext::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "client_reference_id",
                |m: &StatsContext| &m.client_reference_id,
                |m: &mut StatsContext| &mut m.client_reference_id,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "client_name",
                |m: &StatsContext| &m.client_name,
                |m: &mut StatsContext| &mut m.client_name,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "client_version",
                |m: &StatsContext| &m.client_version,
                |m: &mut StatsContext| &mut m.client_version,
            ));
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<StatsContext>(
                "StatsContext",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static StatsContext {
        static instance: ::protobuf::rt::LazyV2<StatsContext> = ::protobuf::rt::LazyV2::INIT;
        instance.get(StatsContext::new)
    }
}

impl ::protobuf::Clear for StatsContext {
    fn clear(&mut self) {
        self.client_reference_id.clear();
        self.client_name.clear();
        self.client_version.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for StatsContext {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for StatsContext {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct ContextualizedQueryLatencyStats {
    // message fields
    pub query_latency_stats: ::protobuf::SingularPtrField<QueryLatencyStats>,
    pub context: ::protobuf::SingularPtrField<StatsContext>,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a ContextualizedQueryLatencyStats {
    fn default() -> &'a ContextualizedQueryLatencyStats {
        <ContextualizedQueryLatencyStats as ::protobuf::Message>::default_instance()
    }
}

impl ContextualizedQueryLatencyStats {
    pub fn new() -> ContextualizedQueryLatencyStats {
        ::std::default::Default::default()
    }

    // .mdg.engine.proto.QueryLatencyStats query_latency_stats = 1;

    pub fn get_query_latency_stats(&self) -> &QueryLatencyStats {
        self.query_latency_stats
            .as_ref()
            .unwrap_or_else(|| <QueryLatencyStats as ::protobuf::Message>::default_instance())
    }
    pub fn clear_query_latency_stats(&mut self) {
        self.query_latency_stats.clear();
    }

    pub fn has_query_latency_stats(&self) -> bool {
        self.query_latency_stats.is_some()
    }

    // Param is passed by value, moved
    pub fn set_query_latency_stats(&mut self, v: QueryLatencyStats) {
        self.query_latency_stats = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_query_latency_stats(&mut self) -> &mut QueryLatencyStats {
        if self.query_latency_stats.is_none() {
            self.query_latency_stats.set_default();
        }
        self.query_latency_stats.as_mut().unwrap()
    }

    // Take field
    pub fn take_query_latency_stats(&mut self) -> QueryLatencyStats {
        self.query_latency_stats
            .take()
            .unwrap_or_else(|| QueryLatencyStats::new())
    }

    // .mdg.engine.proto.StatsContext context = 2;

    pub fn get_context(&self) -> &StatsContext {
        self.context
            .as_ref()
            .unwrap_or_else(|| <StatsContext as ::protobuf::Message>::default_instance())
    }
    pub fn clear_context(&mut self) {
        self.context.clear();
    }

    pub fn has_context(&self) -> bool {
        self.context.is_some()
    }

    // Param is passed by value, moved
    pub fn set_context(&mut self, v: StatsContext) {
        self.context = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_context(&mut self) -> &mut StatsContext {
        if self.context.is_none() {
            self.context.set_default();
        }
        self.context.as_mut().unwrap()
    }

    // Take field
    pub fn take_context(&mut self) -> StatsContext {
        self.context.take().unwrap_or_else(|| StatsContext::new())
    }
}

impl ::protobuf::Message for ContextualizedQueryLatencyStats {
    fn is_initialized(&self) -> bool {
        for v in &self.query_latency_stats {
            if !v.is_initialized() {
                return false;
            }
        }
        for v in &self.context {
            if !v.is_initialized() {
                return false;
            }
        }
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    ::protobuf::rt::read_singular_message_into(
                        wire_type,
                        is,
                        &mut self.query_latency_stats,
                    )?;
                }
                2 => {
                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.context)?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if let Some(ref v) = self.query_latency_stats.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        if let Some(ref v) = self.context.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        if let Some(ref v) = self.query_latency_stats.as_ref() {
            os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        if let Some(ref v) = self.context.as_ref() {
            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> ContextualizedQueryLatencyStats {
        ContextualizedQueryLatencyStats::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(
                ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<QueryLatencyStats>,
                >(
                    "query_latency_stats",
                    |m: &ContextualizedQueryLatencyStats| &m.query_latency_stats,
                    |m: &mut ContextualizedQueryLatencyStats| &mut m.query_latency_stats,
                ),
            );
            fields.push(
                ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<StatsContext>,
                >(
                    "context",
                    |m: &ContextualizedQueryLatencyStats| &m.context,
                    |m: &mut ContextualizedQueryLatencyStats| &mut m.context,
                ),
            );
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<ContextualizedQueryLatencyStats>(
                "ContextualizedQueryLatencyStats",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static ContextualizedQueryLatencyStats {
        static instance: ::protobuf::rt::LazyV2<ContextualizedQueryLatencyStats> =
            ::protobuf::rt::LazyV2::INIT;
        instance.get(ContextualizedQueryLatencyStats::new)
    }
}

impl ::protobuf::Clear for ContextualizedQueryLatencyStats {
    fn clear(&mut self) {
        self.query_latency_stats.clear();
        self.context.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for ContextualizedQueryLatencyStats {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ContextualizedQueryLatencyStats {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct ContextualizedTypeStats {
    // message fields
    pub context: ::protobuf::SingularPtrField<StatsContext>,
    pub per_type_stat: ::std::collections::HashMap<::std::string::String, TypeStat>,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a ContextualizedTypeStats {
    fn default() -> &'a ContextualizedTypeStats {
        <ContextualizedTypeStats as ::protobuf::Message>::default_instance()
    }
}

impl ContextualizedTypeStats {
    pub fn new() -> ContextualizedTypeStats {
        ::std::default::Default::default()
    }

    // .mdg.engine.proto.StatsContext context = 1;

    pub fn get_context(&self) -> &StatsContext {
        self.context
            .as_ref()
            .unwrap_or_else(|| <StatsContext as ::protobuf::Message>::default_instance())
    }
    pub fn clear_context(&mut self) {
        self.context.clear();
    }

    pub fn has_context(&self) -> bool {
        self.context.is_some()
    }

    // Param is passed by value, moved
    pub fn set_context(&mut self, v: StatsContext) {
        self.context = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_context(&mut self) -> &mut StatsContext {
        if self.context.is_none() {
            self.context.set_default();
        }
        self.context.as_mut().unwrap()
    }

    // Take field
    pub fn take_context(&mut self) -> StatsContext {
        self.context.take().unwrap_or_else(|| StatsContext::new())
    }

    // repeated .mdg.engine.proto.ContextualizedTypeStats.PerTypeStatEntry per_type_stat = 2;

    pub fn get_per_type_stat(
        &self,
    ) -> &::std::collections::HashMap<::std::string::String, TypeStat> {
        &self.per_type_stat
    }
    pub fn clear_per_type_stat(&mut self) {
        self.per_type_stat.clear();
    }

    // Param is passed by value, moved
    pub fn set_per_type_stat(
        &mut self,
        v: ::std::collections::HashMap<::std::string::String, TypeStat>,
    ) {
        self.per_type_stat = v;
    }

    // Mutable pointer to the field.
    pub fn mut_per_type_stat(
        &mut self,
    ) -> &mut ::std::collections::HashMap<::std::string::String, TypeStat> {
        &mut self.per_type_stat
    }

    // Take field
    pub fn take_per_type_stat(
        &mut self,
    ) -> ::std::collections::HashMap<::std::string::String, TypeStat> {
        ::std::mem::replace(&mut self.per_type_stat, ::std::collections::HashMap::new())
    }
}

impl ::protobuf::Message for ContextualizedTypeStats {
    fn is_initialized(&self) -> bool {
        for v in &self.context {
            if !v.is_initialized() {
                return false;
            }
        }
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.context)?;
                }
                2 => {
                    ::protobuf::rt::read_map_into::<
                        ::protobuf::types::ProtobufTypeString,
                        ::protobuf::types::ProtobufTypeMessage<TypeStat>,
                    >(wire_type, is, &mut self.per_type_stat)?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if let Some(ref v) = self.context.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        my_size += ::protobuf::rt::compute_map_size::<
            ::protobuf::types::ProtobufTypeString,
            ::protobuf::types::ProtobufTypeMessage<TypeStat>,
        >(2, &self.per_type_stat);
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        if let Some(ref v) = self.context.as_ref() {
            os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        ::protobuf::rt::write_map_with_cached_sizes::<
            ::protobuf::types::ProtobufTypeString,
            ::protobuf::types::ProtobufTypeMessage<TypeStat>,
        >(2, &self.per_type_stat, os)?;
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> ContextualizedTypeStats {
        ContextualizedTypeStats::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(
                ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<StatsContext>,
                >(
                    "context",
                    |m: &ContextualizedTypeStats| &m.context,
                    |m: &mut ContextualizedTypeStats| &mut m.context,
                ),
            );
            fields.push(::protobuf::reflect::accessor::make_map_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
                ::protobuf::types::ProtobufTypeMessage<TypeStat>,
            >(
                "per_type_stat",
                |m: &ContextualizedTypeStats| &m.per_type_stat,
                |m: &mut ContextualizedTypeStats| &mut m.per_type_stat,
            ));
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<ContextualizedTypeStats>(
                "ContextualizedTypeStats",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static ContextualizedTypeStats {
        static instance: ::protobuf::rt::LazyV2<ContextualizedTypeStats> =
            ::protobuf::rt::LazyV2::INIT;
        instance.get(ContextualizedTypeStats::new)
    }
}

impl ::protobuf::Clear for ContextualizedTypeStats {
    fn clear(&mut self) {
        self.context.clear();
        self.per_type_stat.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for ContextualizedTypeStats {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ContextualizedTypeStats {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct FieldStat {
    // message fields
    pub return_type: ::std::string::String,
    pub errors_count: u64,
    pub count: u64,
    pub requests_with_errors_count: u64,
    pub latency_count: ::std::vec::Vec<i64>,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a FieldStat {
    fn default() -> &'a FieldStat {
        <FieldStat as ::protobuf::Message>::default_instance()
    }
}

impl FieldStat {
    pub fn new() -> FieldStat {
        ::std::default::Default::default()
    }

    // string return_type = 3;

    pub fn get_return_type(&self) -> &str {
        &self.return_type
    }
    pub fn clear_return_type(&mut self) {
        self.return_type.clear();
    }

    // Param is passed by value, moved
    pub fn set_return_type(&mut self, v: ::std::string::String) {
        self.return_type = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_return_type(&mut self) -> &mut ::std::string::String {
        &mut self.return_type
    }

    // Take field
    pub fn take_return_type(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.return_type, ::std::string::String::new())
    }

    // uint64 errors_count = 4;

    pub fn get_errors_count(&self) -> u64 {
        self.errors_count
    }
    pub fn clear_errors_count(&mut self) {
        self.errors_count = 0;
    }

    // Param is passed by value, moved
    pub fn set_errors_count(&mut self, v: u64) {
        self.errors_count = v;
    }

    // uint64 count = 5;

    pub fn get_count(&self) -> u64 {
        self.count
    }
    pub fn clear_count(&mut self) {
        self.count = 0;
    }

    // Param is passed by value, moved
    pub fn set_count(&mut self, v: u64) {
        self.count = v;
    }

    // uint64 requests_with_errors_count = 6;

    pub fn get_requests_with_errors_count(&self) -> u64 {
        self.requests_with_errors_count
    }
    pub fn clear_requests_with_errors_count(&mut self) {
        self.requests_with_errors_count = 0;
    }

    // Param is passed by value, moved
    pub fn set_requests_with_errors_count(&mut self, v: u64) {
        self.requests_with_errors_count = v;
    }

    // repeated int64 latency_count = 8;

    pub fn get_latency_count(&self) -> &[i64] {
        &self.latency_count
    }
    pub fn clear_latency_count(&mut self) {
        self.latency_count.clear();
    }

    // Param is passed by value, moved
    pub fn set_latency_count(&mut self, v: ::std::vec::Vec<i64>) {
        self.latency_count = v;
    }

    // Mutable pointer to the field.
    pub fn mut_latency_count(&mut self) -> &mut ::std::vec::Vec<i64> {
        &mut self.latency_count
    }

    // Take field
    pub fn take_latency_count(&mut self) -> ::std::vec::Vec<i64> {
        ::std::mem::replace(&mut self.latency_count, ::std::vec::Vec::new())
    }
}

impl ::protobuf::Message for FieldStat {
    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                3 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.return_type,
                    )?;
                }
                4 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_uint64()?;
                    self.errors_count = tmp;
                }
                5 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_uint64()?;
                    self.count = tmp;
                }
                6 => {
                    if wire_type != ::protobuf::wire_format::WireTypeVarint {
                        return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(
                            wire_type,
                        ));
                    }
                    let tmp = is.read_uint64()?;
                    self.requests_with_errors_count = tmp;
                }
                8 => {
                    ::protobuf::rt::read_repeated_int64_into(
                        wire_type,
                        is,
                        &mut self.latency_count,
                    )?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if !self.return_type.is_empty() {
            my_size += ::protobuf::rt::string_size(3, &self.return_type);
        }
        if self.errors_count != 0 {
            my_size += ::protobuf::rt::value_size(
                4,
                self.errors_count,
                ::protobuf::wire_format::WireTypeVarint,
            );
        }
        if self.count != 0 {
            my_size +=
                ::protobuf::rt::value_size(5, self.count, ::protobuf::wire_format::WireTypeVarint);
        }
        if self.requests_with_errors_count != 0 {
            my_size += ::protobuf::rt::value_size(
                6,
                self.requests_with_errors_count,
                ::protobuf::wire_format::WireTypeVarint,
            );
        }
        for value in &self.latency_count {
            my_size +=
                ::protobuf::rt::value_size(8, *value, ::protobuf::wire_format::WireTypeVarint);
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        if !self.return_type.is_empty() {
            os.write_string(3, &self.return_type)?;
        }
        if self.errors_count != 0 {
            os.write_uint64(4, self.errors_count)?;
        }
        if self.count != 0 {
            os.write_uint64(5, self.count)?;
        }
        if self.requests_with_errors_count != 0 {
            os.write_uint64(6, self.requests_with_errors_count)?;
        }
        for v in &self.latency_count {
            os.write_int64(8, *v)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> FieldStat {
        FieldStat::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "return_type",
                |m: &FieldStat| &m.return_type,
                |m: &mut FieldStat| &mut m.return_type,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeUint64,
            >(
                "errors_count",
                |m: &FieldStat| &m.errors_count,
                |m: &mut FieldStat| &mut m.errors_count,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeUint64,
            >(
                "count",
                |m: &FieldStat| &m.count,
                |m: &mut FieldStat| &mut m.count,
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeUint64,
            >(
                "requests_with_errors_count",
                |m: &FieldStat| &m.requests_with_errors_count,
                |m: &mut FieldStat| &mut m.requests_with_errors_count,
            ));
            fields.push(::protobuf::reflect::accessor::make_vec_accessor::<
                _,
                ::protobuf::types::ProtobufTypeInt64,
            >(
                "latency_count",
                |m: &FieldStat| &m.latency_count,
                |m: &mut FieldStat| &mut m.latency_count,
            ));
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<FieldStat>(
                "FieldStat",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static FieldStat {
        static instance: ::protobuf::rt::LazyV2<FieldStat> = ::protobuf::rt::LazyV2::INIT;
        instance.get(FieldStat::new)
    }
}

impl ::protobuf::Clear for FieldStat {
    fn clear(&mut self) {
        self.return_type.clear();
        self.errors_count = 0;
        self.count = 0;
        self.requests_with_errors_count = 0;
        self.latency_count.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for FieldStat {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for FieldStat {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct TypeStat {
    // message fields
    pub per_field_stat: ::std::collections::HashMap<::std::string::String, FieldStat>,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a TypeStat {
    fn default() -> &'a TypeStat {
        <TypeStat as ::protobuf::Message>::default_instance()
    }
}

impl TypeStat {
    pub fn new() -> TypeStat {
        ::std::default::Default::default()
    }

    // repeated .mdg.engine.proto.TypeStat.PerFieldStatEntry per_field_stat = 3;

    pub fn get_per_field_stat(
        &self,
    ) -> &::std::collections::HashMap<::std::string::String, FieldStat> {
        &self.per_field_stat
    }
    pub fn clear_per_field_stat(&mut self) {
        self.per_field_stat.clear();
    }

    // Param is passed by value, moved
    pub fn set_per_field_stat(
        &mut self,
        v: ::std::collections::HashMap<::std::string::String, FieldStat>,
    ) {
        self.per_field_stat = v;
    }

    // Mutable pointer to the field.
    pub fn mut_per_field_stat(
        &mut self,
    ) -> &mut ::std::collections::HashMap<::std::string::String, FieldStat> {
        &mut self.per_field_stat
    }

    // Take field
    pub fn take_per_field_stat(
        &mut self,
    ) -> ::std::collections::HashMap<::std::string::String, FieldStat> {
        ::std::mem::replace(&mut self.per_field_stat, ::std::collections::HashMap::new())
    }
}

impl ::protobuf::Message for TypeStat {
    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                3 => {
                    ::protobuf::rt::read_map_into::<
                        ::protobuf::types::ProtobufTypeString,
                        ::protobuf::types::ProtobufTypeMessage<FieldStat>,
                    >(wire_type, is, &mut self.per_field_stat)?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        my_size += ::protobuf::rt::compute_map_size::<
            ::protobuf::types::ProtobufTypeString,
            ::protobuf::types::ProtobufTypeMessage<FieldStat>,
        >(3, &self.per_field_stat);
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        ::protobuf::rt::write_map_with_cached_sizes::<
            ::protobuf::types::ProtobufTypeString,
            ::protobuf::types::ProtobufTypeMessage<FieldStat>,
        >(3, &self.per_field_stat, os)?;
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> TypeStat {
        TypeStat::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(::protobuf::reflect::accessor::make_map_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
                ::protobuf::types::ProtobufTypeMessage<FieldStat>,
            >(
                "per_field_stat",
                |m: &TypeStat| &m.per_field_stat,
                |m: &mut TypeStat| &mut m.per_field_stat,
            ));
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<TypeStat>(
                "TypeStat",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static TypeStat {
        static instance: ::protobuf::rt::LazyV2<TypeStat> = ::protobuf::rt::LazyV2::INIT;
        instance.get(TypeStat::new)
    }
}

impl ::protobuf::Clear for TypeStat {
    fn clear(&mut self) {
        self.per_field_stat.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for TypeStat {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for TypeStat {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct Field {
    // message fields
    pub name: ::std::string::String,
    pub return_type: ::std::string::String,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a Field {
    fn default() -> &'a Field {
        <Field as ::protobuf::Message>::default_instance()
    }
}

impl Field {
    pub fn new() -> Field {
        ::std::default::Default::default()
    }

    // string name = 2;

    pub fn get_name(&self) -> &str {
        &self.name
    }
    pub fn clear_name(&mut self) {
        self.name.clear();
    }

    // Param is passed by value, moved
    pub fn set_name(&mut self, v: ::std::string::String) {
        self.name = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_name(&mut self) -> &mut ::std::string::String {
        &mut self.name
    }

    // Take field
    pub fn take_name(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.name, ::std::string::String::new())
    }

    // string return_type = 3;

    pub fn get_return_type(&self) -> &str {
        &self.return_type
    }
    pub fn clear_return_type(&mut self) {
        self.return_type.clear();
    }

    // Param is passed by value, moved
    pub fn set_return_type(&mut self, v: ::std::string::String) {
        self.return_type = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_return_type(&mut self) -> &mut ::std::string::String {
        &mut self.return_type
    }

    // Take field
    pub fn take_return_type(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.return_type, ::std::string::String::new())
    }
}

impl ::protobuf::Message for Field {
    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                2 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.name,
                    )?;
                }
                3 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.return_type,
                    )?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if !self.name.is_empty() {
            my_size += ::protobuf::rt::string_size(2, &self.name);
        }
        if !self.return_type.is_empty() {
            my_size += ::protobuf::rt::string_size(3, &self.return_type);
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        if !self.name.is_empty() {
            os.write_string(2, &self.name)?;
        }
        if !self.return_type.is_empty() {
            os.write_string(3, &self.return_type)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> Field {
        Field::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "name", |m: &Field| &m.name, |m: &mut Field| &mut m.name
            ));
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "return_type",
                |m: &Field| &m.return_type,
                |m: &mut Field| &mut m.return_type,
            ));
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<Field>(
                "Field",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static Field {
        static instance: ::protobuf::rt::LazyV2<Field> = ::protobuf::rt::LazyV2::INIT;
        instance.get(Field::new)
    }
}

impl ::protobuf::Clear for Field {
    fn clear(&mut self) {
        self.name.clear();
        self.return_type.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for Field {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for Field {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct Type {
    // message fields
    pub name: ::std::string::String,
    pub field: ::protobuf::RepeatedField<Field>,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a Type {
    fn default() -> &'a Type {
        <Type as ::protobuf::Message>::default_instance()
    }
}

impl Type {
    pub fn new() -> Type {
        ::std::default::Default::default()
    }

    // string name = 1;

    pub fn get_name(&self) -> &str {
        &self.name
    }
    pub fn clear_name(&mut self) {
        self.name.clear();
    }

    // Param is passed by value, moved
    pub fn set_name(&mut self, v: ::std::string::String) {
        self.name = v;
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_name(&mut self) -> &mut ::std::string::String {
        &mut self.name
    }

    // Take field
    pub fn take_name(&mut self) -> ::std::string::String {
        ::std::mem::replace(&mut self.name, ::std::string::String::new())
    }

    // repeated .mdg.engine.proto.Field field = 2;

    pub fn get_field(&self) -> &[Field] {
        &self.field
    }
    pub fn clear_field(&mut self) {
        self.field.clear();
    }

    // Param is passed by value, moved
    pub fn set_field(&mut self, v: ::protobuf::RepeatedField<Field>) {
        self.field = v;
    }

    // Mutable pointer to the field.
    pub fn mut_field(&mut self) -> &mut ::protobuf::RepeatedField<Field> {
        &mut self.field
    }

    // Take field
    pub fn take_field(&mut self) -> ::protobuf::RepeatedField<Field> {
        ::std::mem::replace(&mut self.field, ::protobuf::RepeatedField::new())
    }
}

impl ::protobuf::Message for Type {
    fn is_initialized(&self) -> bool {
        for v in &self.field {
            if !v.is_initialized() {
                return false;
            }
        }
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    ::protobuf::rt::read_singular_proto3_string_into(
                        wire_type,
                        is,
                        &mut self.name,
                    )?;
                }
                2 => {
                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.field)?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if !self.name.is_empty() {
            my_size += ::protobuf::rt::string_size(1, &self.name);
        }
        for value in &self.field {
            let len = value.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        if !self.name.is_empty() {
            os.write_string(1, &self.name)?;
        }
        for v in &self.field {
            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> Type {
        Type::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(::protobuf::reflect::accessor::make_simple_field_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
            >(
                "name", |m: &Type| &m.name, |m: &mut Type| &mut m.name
            ));
            fields.push(
                ::protobuf::reflect::accessor::make_repeated_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<Field>,
                >("field", |m: &Type| &m.field, |m: &mut Type| &mut m.field),
            );
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<Type>(
                "Type",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static Type {
        static instance: ::protobuf::rt::LazyV2<Type> = ::protobuf::rt::LazyV2::INIT;
        instance.get(Type::new)
    }
}

impl ::protobuf::Clear for Type {
    fn clear(&mut self) {
        self.name.clear();
        self.field.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for Type {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for Type {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct Report {
    // message fields
    pub header: ::protobuf::SingularPtrField<ReportHeader>,
    pub traces_per_query: ::std::collections::HashMap<::std::string::String, TracesAndStats>,
    pub end_time: ::protobuf::SingularPtrField<::protobuf::well_known_types::Timestamp>,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a Report {
    fn default() -> &'a Report {
        <Report as ::protobuf::Message>::default_instance()
    }
}

impl Report {
    pub fn new() -> Report {
        ::std::default::Default::default()
    }

    // .mdg.engine.proto.ReportHeader header = 1;

    pub fn get_header(&self) -> &ReportHeader {
        self.header
            .as_ref()
            .unwrap_or_else(|| <ReportHeader as ::protobuf::Message>::default_instance())
    }
    pub fn clear_header(&mut self) {
        self.header.clear();
    }

    pub fn has_header(&self) -> bool {
        self.header.is_some()
    }

    // Param is passed by value, moved
    pub fn set_header(&mut self, v: ReportHeader) {
        self.header = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_header(&mut self) -> &mut ReportHeader {
        if self.header.is_none() {
            self.header.set_default();
        }
        self.header.as_mut().unwrap()
    }

    // Take field
    pub fn take_header(&mut self) -> ReportHeader {
        self.header.take().unwrap_or_else(|| ReportHeader::new())
    }

    // repeated .mdg.engine.proto.Report.TracesPerQueryEntry traces_per_query = 5;

    pub fn get_traces_per_query(
        &self,
    ) -> &::std::collections::HashMap<::std::string::String, TracesAndStats> {
        &self.traces_per_query
    }
    pub fn clear_traces_per_query(&mut self) {
        self.traces_per_query.clear();
    }

    // Param is passed by value, moved
    pub fn set_traces_per_query(
        &mut self,
        v: ::std::collections::HashMap<::std::string::String, TracesAndStats>,
    ) {
        self.traces_per_query = v;
    }

    // Mutable pointer to the field.
    pub fn mut_traces_per_query(
        &mut self,
    ) -> &mut ::std::collections::HashMap<::std::string::String, TracesAndStats> {
        &mut self.traces_per_query
    }

    // Take field
    pub fn take_traces_per_query(
        &mut self,
    ) -> ::std::collections::HashMap<::std::string::String, TracesAndStats> {
        ::std::mem::replace(
            &mut self.traces_per_query,
            ::std::collections::HashMap::new(),
        )
    }

    // .google.protobuf.Timestamp end_time = 2;

    pub fn get_end_time(&self) -> &::protobuf::well_known_types::Timestamp {
        self.end_time.as_ref().unwrap_or_else(|| {
            <::protobuf::well_known_types::Timestamp as ::protobuf::Message>::default_instance()
        })
    }
    pub fn clear_end_time(&mut self) {
        self.end_time.clear();
    }

    pub fn has_end_time(&self) -> bool {
        self.end_time.is_some()
    }

    // Param is passed by value, moved
    pub fn set_end_time(&mut self, v: ::protobuf::well_known_types::Timestamp) {
        self.end_time = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_end_time(&mut self) -> &mut ::protobuf::well_known_types::Timestamp {
        if self.end_time.is_none() {
            self.end_time.set_default();
        }
        self.end_time.as_mut().unwrap()
    }

    // Take field
    pub fn take_end_time(&mut self) -> ::protobuf::well_known_types::Timestamp {
        self.end_time
            .take()
            .unwrap_or_else(|| ::protobuf::well_known_types::Timestamp::new())
    }
}

impl ::protobuf::Message for Report {
    fn is_initialized(&self) -> bool {
        for v in &self.header {
            if !v.is_initialized() {
                return false;
            }
        }
        for v in &self.end_time {
            if !v.is_initialized() {
                return false;
            }
        }
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.header)?;
                }
                5 => {
                    ::protobuf::rt::read_map_into::<
                        ::protobuf::types::ProtobufTypeString,
                        ::protobuf::types::ProtobufTypeMessage<TracesAndStats>,
                    >(wire_type, is, &mut self.traces_per_query)?;
                }
                2 => {
                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.end_time)?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if let Some(ref v) = self.header.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        my_size += ::protobuf::rt::compute_map_size::<
            ::protobuf::types::ProtobufTypeString,
            ::protobuf::types::ProtobufTypeMessage<TracesAndStats>,
        >(5, &self.traces_per_query);
        if let Some(ref v) = self.end_time.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        if let Some(ref v) = self.header.as_ref() {
            os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        ::protobuf::rt::write_map_with_cached_sizes::<
            ::protobuf::types::ProtobufTypeString,
            ::protobuf::types::ProtobufTypeMessage<TracesAndStats>,
        >(5, &self.traces_per_query, os)?;
        if let Some(ref v) = self.end_time.as_ref() {
            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> Report {
        Report::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(
                ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<ReportHeader>,
                >(
                    "header",
                    |m: &Report| &m.header,
                    |m: &mut Report| &mut m.header,
                ),
            );
            fields.push(::protobuf::reflect::accessor::make_map_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
                ::protobuf::types::ProtobufTypeMessage<TracesAndStats>,
            >(
                "traces_per_query",
                |m: &Report| &m.traces_per_query,
                |m: &mut Report| &mut m.traces_per_query,
            ));
            fields.push(
                ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<::protobuf::well_known_types::Timestamp>,
                >(
                    "end_time",
                    |m: &Report| &m.end_time,
                    |m: &mut Report| &mut m.end_time,
                ),
            );
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<Report>(
                "Report",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static Report {
        static instance: ::protobuf::rt::LazyV2<Report> = ::protobuf::rt::LazyV2::INIT;
        instance.get(Report::new)
    }
}

impl ::protobuf::Clear for Report {
    fn clear(&mut self) {
        self.header.clear();
        self.traces_per_query.clear();
        self.end_time.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for Report {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for Report {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct ContextualizedStats {
    // message fields
    pub context: ::protobuf::SingularPtrField<StatsContext>,
    pub query_latency_stats: ::protobuf::SingularPtrField<QueryLatencyStats>,
    pub per_type_stat: ::std::collections::HashMap<::std::string::String, TypeStat>,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a ContextualizedStats {
    fn default() -> &'a ContextualizedStats {
        <ContextualizedStats as ::protobuf::Message>::default_instance()
    }
}

impl ContextualizedStats {
    pub fn new() -> ContextualizedStats {
        ::std::default::Default::default()
    }

    // .mdg.engine.proto.StatsContext context = 1;

    pub fn get_context(&self) -> &StatsContext {
        self.context
            .as_ref()
            .unwrap_or_else(|| <StatsContext as ::protobuf::Message>::default_instance())
    }
    pub fn clear_context(&mut self) {
        self.context.clear();
    }

    pub fn has_context(&self) -> bool {
        self.context.is_some()
    }

    // Param is passed by value, moved
    pub fn set_context(&mut self, v: StatsContext) {
        self.context = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_context(&mut self) -> &mut StatsContext {
        if self.context.is_none() {
            self.context.set_default();
        }
        self.context.as_mut().unwrap()
    }

    // Take field
    pub fn take_context(&mut self) -> StatsContext {
        self.context.take().unwrap_or_else(|| StatsContext::new())
    }

    // .mdg.engine.proto.QueryLatencyStats query_latency_stats = 2;

    pub fn get_query_latency_stats(&self) -> &QueryLatencyStats {
        self.query_latency_stats
            .as_ref()
            .unwrap_or_else(|| <QueryLatencyStats as ::protobuf::Message>::default_instance())
    }
    pub fn clear_query_latency_stats(&mut self) {
        self.query_latency_stats.clear();
    }

    pub fn has_query_latency_stats(&self) -> bool {
        self.query_latency_stats.is_some()
    }

    // Param is passed by value, moved
    pub fn set_query_latency_stats(&mut self, v: QueryLatencyStats) {
        self.query_latency_stats = ::protobuf::SingularPtrField::some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_query_latency_stats(&mut self) -> &mut QueryLatencyStats {
        if self.query_latency_stats.is_none() {
            self.query_latency_stats.set_default();
        }
        self.query_latency_stats.as_mut().unwrap()
    }

    // Take field
    pub fn take_query_latency_stats(&mut self) -> QueryLatencyStats {
        self.query_latency_stats
            .take()
            .unwrap_or_else(|| QueryLatencyStats::new())
    }

    // repeated .mdg.engine.proto.ContextualizedStats.PerTypeStatEntry per_type_stat = 3;

    pub fn get_per_type_stat(
        &self,
    ) -> &::std::collections::HashMap<::std::string::String, TypeStat> {
        &self.per_type_stat
    }
    pub fn clear_per_type_stat(&mut self) {
        self.per_type_stat.clear();
    }

    // Param is passed by value, moved
    pub fn set_per_type_stat(
        &mut self,
        v: ::std::collections::HashMap<::std::string::String, TypeStat>,
    ) {
        self.per_type_stat = v;
    }

    // Mutable pointer to the field.
    pub fn mut_per_type_stat(
        &mut self,
    ) -> &mut ::std::collections::HashMap<::std::string::String, TypeStat> {
        &mut self.per_type_stat
    }

    // Take field
    pub fn take_per_type_stat(
        &mut self,
    ) -> ::std::collections::HashMap<::std::string::String, TypeStat> {
        ::std::mem::replace(&mut self.per_type_stat, ::std::collections::HashMap::new())
    }
}

impl ::protobuf::Message for ContextualizedStats {
    fn is_initialized(&self) -> bool {
        for v in &self.context {
            if !v.is_initialized() {
                return false;
            }
        }
        for v in &self.query_latency_stats {
            if !v.is_initialized() {
                return false;
            }
        }
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.context)?;
                }
                2 => {
                    ::protobuf::rt::read_singular_message_into(
                        wire_type,
                        is,
                        &mut self.query_latency_stats,
                    )?;
                }
                3 => {
                    ::protobuf::rt::read_map_into::<
                        ::protobuf::types::ProtobufTypeString,
                        ::protobuf::types::ProtobufTypeMessage<TypeStat>,
                    >(wire_type, is, &mut self.per_type_stat)?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        if let Some(ref v) = self.context.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        if let Some(ref v) = self.query_latency_stats.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        my_size += ::protobuf::rt::compute_map_size::<
            ::protobuf::types::ProtobufTypeString,
            ::protobuf::types::ProtobufTypeMessage<TypeStat>,
        >(3, &self.per_type_stat);
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        if let Some(ref v) = self.context.as_ref() {
            os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        if let Some(ref v) = self.query_latency_stats.as_ref() {
            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        ::protobuf::rt::write_map_with_cached_sizes::<
            ::protobuf::types::ProtobufTypeString,
            ::protobuf::types::ProtobufTypeMessage<TypeStat>,
        >(3, &self.per_type_stat, os)?;
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> ContextualizedStats {
        ContextualizedStats::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(
                ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<StatsContext>,
                >(
                    "context",
                    |m: &ContextualizedStats| &m.context,
                    |m: &mut ContextualizedStats| &mut m.context,
                ),
            );
            fields.push(
                ::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<QueryLatencyStats>,
                >(
                    "query_latency_stats",
                    |m: &ContextualizedStats| &m.query_latency_stats,
                    |m: &mut ContextualizedStats| &mut m.query_latency_stats,
                ),
            );
            fields.push(::protobuf::reflect::accessor::make_map_accessor::<
                _,
                ::protobuf::types::ProtobufTypeString,
                ::protobuf::types::ProtobufTypeMessage<TypeStat>,
            >(
                "per_type_stat",
                |m: &ContextualizedStats| &m.per_type_stat,
                |m: &mut ContextualizedStats| &mut m.per_type_stat,
            ));
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<ContextualizedStats>(
                "ContextualizedStats",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static ContextualizedStats {
        static instance: ::protobuf::rt::LazyV2<ContextualizedStats> = ::protobuf::rt::LazyV2::INIT;
        instance.get(ContextualizedStats::new)
    }
}

impl ::protobuf::Clear for ContextualizedStats {
    fn clear(&mut self) {
        self.context.clear();
        self.query_latency_stats.clear();
        self.per_type_stat.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for ContextualizedStats {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ContextualizedStats {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

#[derive(PartialEq, Clone, Default)]
pub struct TracesAndStats {
    // message fields
    pub trace: ::protobuf::RepeatedField<Trace>,
    pub stats_with_context: ::protobuf::RepeatedField<ContextualizedStats>,
    // special fields
    pub unknown_fields: ::protobuf::UnknownFields,
    pub cached_size: ::protobuf::CachedSize,
}

impl<'a> ::std::default::Default for &'a TracesAndStats {
    fn default() -> &'a TracesAndStats {
        <TracesAndStats as ::protobuf::Message>::default_instance()
    }
}

impl TracesAndStats {
    pub fn new() -> TracesAndStats {
        ::std::default::Default::default()
    }

    // repeated .mdg.engine.proto.Trace trace = 1;

    pub fn get_trace(&self) -> &[Trace] {
        &self.trace
    }
    pub fn clear_trace(&mut self) {
        self.trace.clear();
    }

    // Param is passed by value, moved
    pub fn set_trace(&mut self, v: ::protobuf::RepeatedField<Trace>) {
        self.trace = v;
    }

    // Mutable pointer to the field.
    pub fn mut_trace(&mut self) -> &mut ::protobuf::RepeatedField<Trace> {
        &mut self.trace
    }

    // Take field
    pub fn take_trace(&mut self) -> ::protobuf::RepeatedField<Trace> {
        ::std::mem::replace(&mut self.trace, ::protobuf::RepeatedField::new())
    }

    // repeated .mdg.engine.proto.ContextualizedStats stats_with_context = 2;

    pub fn get_stats_with_context(&self) -> &[ContextualizedStats] {
        &self.stats_with_context
    }
    pub fn clear_stats_with_context(&mut self) {
        self.stats_with_context.clear();
    }

    // Param is passed by value, moved
    pub fn set_stats_with_context(&mut self, v: ::protobuf::RepeatedField<ContextualizedStats>) {
        self.stats_with_context = v;
    }

    // Mutable pointer to the field.
    pub fn mut_stats_with_context(
        &mut self,
    ) -> &mut ::protobuf::RepeatedField<ContextualizedStats> {
        &mut self.stats_with_context
    }

    // Take field
    pub fn take_stats_with_context(&mut self) -> ::protobuf::RepeatedField<ContextualizedStats> {
        ::std::mem::replace(
            &mut self.stats_with_context,
            ::protobuf::RepeatedField::new(),
        )
    }
}

impl ::protobuf::Message for TracesAndStats {
    fn is_initialized(&self) -> bool {
        for v in &self.trace {
            if !v.is_initialized() {
                return false;
            }
        }
        for v in &self.stats_with_context {
            if !v.is_initialized() {
                return false;
            }
        }
        true
    }

    fn merge_from(
        &mut self,
        is: &mut ::protobuf::CodedInputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        while !is.eof()? {
            let (field_number, wire_type) = is.read_tag_unpack()?;
            match field_number {
                1 => {
                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.trace)?;
                }
                2 => {
                    ::protobuf::rt::read_repeated_message_into(
                        wire_type,
                        is,
                        &mut self.stats_with_context,
                    )?;
                }
                _ => {
                    ::protobuf::rt::read_unknown_or_skip_group(
                        field_number,
                        wire_type,
                        is,
                        self.mut_unknown_fields(),
                    )?;
                }
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u32 {
        let mut my_size = 0;
        for value in &self.trace {
            let len = value.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        for value in &self.stats_with_context {
            let len = value.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len;
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields());
        self.cached_size.set(my_size);
        my_size
    }

    fn write_to_with_cached_sizes(
        &self,
        os: &mut ::protobuf::CodedOutputStream<'_>,
    ) -> ::protobuf::ProtobufResult<()> {
        for v in &self.trace {
            os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        for v in &self.stats_with_context {
            os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?;
            os.write_raw_varint32(v.get_cached_size())?;
            v.write_to_with_cached_sizes(os)?;
        }
        os.write_unknown_fields(self.get_unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn get_cached_size(&self) -> u32 {
        self.cached_size.get()
    }

    fn get_unknown_fields(&self) -> &::protobuf::UnknownFields {
        &self.unknown_fields
    }

    fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields {
        &mut self.unknown_fields
    }

    fn as_any(&self) -> &dyn (::std::any::Any) {
        self as &dyn (::std::any::Any)
    }
    fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) {
        self as &mut dyn (::std::any::Any)
    }
    fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> {
        self
    }

    fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor {
        Self::descriptor_static()
    }

    fn new() -> TracesAndStats {
        TracesAndStats::new()
    }

    fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> =
            ::protobuf::rt::LazyV2::INIT;
        descriptor.get(|| {
            let mut fields = ::std::vec::Vec::new();
            fields.push(
                ::protobuf::reflect::accessor::make_repeated_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<Trace>,
                >(
                    "trace",
                    |m: &TracesAndStats| &m.trace,
                    |m: &mut TracesAndStats| &mut m.trace,
                ),
            );
            fields.push(
                ::protobuf::reflect::accessor::make_repeated_field_accessor::<
                    _,
                    ::protobuf::types::ProtobufTypeMessage<ContextualizedStats>,
                >(
                    "stats_with_context",
                    |m: &TracesAndStats| &m.stats_with_context,
                    |m: &mut TracesAndStats| &mut m.stats_with_context,
                ),
            );
            ::protobuf::reflect::MessageDescriptor::new_pb_name::<TracesAndStats>(
                "TracesAndStats",
                fields,
                file_descriptor_proto(),
            )
        })
    }

    fn default_instance() -> &'static TracesAndStats {
        static instance: ::protobuf::rt::LazyV2<TracesAndStats> = ::protobuf::rt::LazyV2::INIT;
        instance.get(TracesAndStats::new)
    }
}

impl ::protobuf::Clear for TracesAndStats {
    fn clear(&mut self) {
        self.trace.clear();
        self.stats_with_context.clear();
        self.unknown_fields.clear();
    }
}

impl ::std::fmt::Debug for TracesAndStats {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for TracesAndStats {
    fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef {
        ::protobuf::reflect::ReflectValueRef::Message(self)
    }
}

static file_descriptor_proto_data: &'static [u8] = b"\
    \n\rtracing.proto\x12\x10mdg.engine.proto\x1a\x1fgoogle/protobuf/timesta\
    mp.proto\"\xf3\x1f\n\x05Trace\x129\n\nstart_time\x18\x04\x20\x01(\x0b2\
    \x1a.google.protobuf.TimestampR\tstartTime\x125\n\x08end_time\x18\x03\
    \x20\x01(\x0b2\x1a.google.protobuf.TimestampR\x07endTime\x12\x1f\n\x0bdu\
    ration_ns\x18\x0b\x20\x01(\x04R\ndurationNs\x120\n\x04root\x18\x0e\x20\
    \x01(\x0b2\x1c.mdg.engine.proto.Trace.NodeR\x04root\x12\x1c\n\tsignature\
    \x18\x13\x20\x01(\tR\tsignature\x128\n\x17unexecutedOperationBody\x18\
    \x1b\x20\x01(\tR\x17unexecutedOperationBody\x128\n\x17unexecutedOperatio\
    nName\x18\x1c\x20\x01(\tR\x17unexecutedOperationName\x129\n\x07details\
    \x18\x06\x20\x01(\x0b2\x1f.mdg.engine.proto.Trace.DetailsR\x07details\
    \x12\x1f\n\x0bclient_name\x18\x07\x20\x01(\tR\nclientName\x12%\n\x0eclie\
    nt_version\x18\x08\x20\x01(\tR\rclientVersion\x12%\n\x0eclient_address\
    \x18\t\x20\x01(\tR\rclientAddress\x12.\n\x13client_reference_id\x18\x17\
    \x20\x01(\tR\x11clientReferenceId\x120\n\x04http\x18\n\x20\x01(\x0b2\x1c\
    .mdg.engine.proto.Trace.HTTPR\x04http\x12F\n\x0ccache_policy\x18\x12\x20\
    \x01(\x0b2#.mdg.engine.proto.Trace.CachePolicyR\x0bcachePolicy\x12D\n\nq\
    uery_plan\x18\x1a\x20\x01(\x0b2%.mdg.engine.proto.Trace.QueryPlanNodeR\t\
    queryPlan\x12/\n\x14full_query_cache_hit\x18\x14\x20\x01(\x08R\x11fullQu\
    eryCacheHit\x12.\n\x13persisted_query_hit\x18\x15\x20\x01(\x08R\x11persi\
    stedQueryHit\x128\n\x18persisted_query_register\x18\x16\x20\x01(\x08R\
    \x16persistedQueryRegister\x121\n\x14registered_operation\x18\x18\x20\
    \x01(\x08R\x13registeredOperation\x12/\n\x13forbidden_operation\x18\x19\
    \x20\x01(\x08R\x12forbiddenOperation\x12G\n\x20legacy_signature_needs_re\
    signing\x18\x05\x20\x01(\tR\x1dlegacySignatureNeedsResigning\x1a\x9b\x01\
    \n\x0bCachePolicy\x12?\n\x05scope\x18\x01\x20\x01(\x0e2).mdg.engine.prot\
    o.Trace.CachePolicy.ScopeR\x05scope\x12\x1c\n\nmax_age_ns\x18\x02\x20\
    \x01(\x03R\x08maxAgeNs\"-\n\x05Scope\x12\x0b\n\x07UNKNOWN\x10\0\x12\n\n\
    \x06PUBLIC\x10\x01\x12\x0b\n\x07PRIVATE\x10\x02\x1a\x82\x03\n\x07Details\
    \x12Y\n\x0evariables_json\x18\x04\x20\x03(\x0b22.mdg.engine.proto.Trace.\
    Details.VariablesJsonEntryR\rvariablesJson\x12k\n\x14deprecated_variable\
    s\x18\x01\x20\x03(\x0b28.mdg.engine.proto.Trace.Details.DeprecatedVariab\
    lesEntryR\x13deprecatedVariables\x12%\n\x0eoperation_name\x18\x03\x20\
    \x01(\tR\roperationName\x1a@\n\x12VariablesJsonEntry\x12\x10\n\x03key\
    \x18\x01\x20\x01(\tR\x03key\x12\x14\n\x05value\x18\x02\x20\x01(\tR\x05va\
    lue:\x028\x01\x1aF\n\x18DeprecatedVariablesEntry\x12\x10\n\x03key\x18\
    \x01\x20\x01(\tR\x03key\x12\x14\n\x05value\x18\x02\x20\x01(\x0cR\x05valu\
    e:\x028\x01\x1a\x8c\x01\n\x05Error\x12\x18\n\x07message\x18\x01\x20\x01(\
    \tR\x07message\x12<\n\x08location\x18\x02\x20\x03(\x0b2\x20.mdg.engine.p\
    roto.Trace.LocationR\x08location\x12\x17\n\x07time_ns\x18\x03\x20\x01(\
    \x04R\x06timeNs\x12\x12\n\x04json\x18\x04\x20\x01(\tR\x04json\x1a\xe3\
    \x05\n\x04HTTP\x12;\n\x06method\x18\x01\x20\x01(\x0e2#.mdg.engine.proto.\
    Trace.HTTP.MethodR\x06method\x12\x12\n\x04host\x18\x02\x20\x01(\tR\x04ho\
    st\x12\x12\n\x04path\x18\x03\x20\x01(\tR\x04path\x12Y\n\x0frequest_heade\
    rs\x18\x04\x20\x03(\x0b20.mdg.engine.proto.Trace.HTTP.RequestHeadersEntr\
    yR\x0erequestHeaders\x12\\\n\x10response_headers\x18\x05\x20\x03(\x0b21.\
    mdg.engine.proto.Trace.HTTP.ResponseHeadersEntryR\x0fresponseHeaders\x12\
    \x1f\n\x0bstatus_code\x18\x06\x20\x01(\rR\nstatusCode\x12\x16\n\x06secur\
    e\x18\x08\x20\x01(\x08R\x06secure\x12\x1a\n\x08protocol\x18\t\x20\x01(\t\
    R\x08protocol\x1a\x1e\n\x06Values\x12\x14\n\x05value\x18\x01\x20\x03(\tR\
    \x05value\x1af\n\x13RequestHeadersEntry\x12\x10\n\x03key\x18\x01\x20\x01\
    (\tR\x03key\x129\n\x05value\x18\x02\x20\x01(\x0b2#.mdg.engine.proto.Trac\
    e.HTTP.ValuesR\x05value:\x028\x01\x1ag\n\x14ResponseHeadersEntry\x12\x10\
    \n\x03key\x18\x01\x20\x01(\tR\x03key\x129\n\x05value\x18\x02\x20\x01(\
    \x0b2#.mdg.engine.proto.Trace.HTTP.ValuesR\x05value:\x028\x01\"w\n\x06Me\
    thod\x12\x0b\n\x07UNKNOWN\x10\0\x12\x0b\n\x07OPTIONS\x10\x01\x12\x07\n\
    \x03GET\x10\x02\x12\x08\n\x04HEAD\x10\x03\x12\x08\n\x04POST\x10\x04\x12\
    \x07\n\x03PUT\x10\x05\x12\n\n\x06DELETE\x10\x06\x12\t\n\x05TRACE\x10\x07\
    \x12\x0b\n\x07CONNECT\x10\x08\x12\t\n\x05PATCH\x10\t\x1a6\n\x08Location\
    \x12\x12\n\x04line\x18\x01\x20\x01(\rR\x04line\x12\x16\n\x06column\x18\
    \x02\x20\x01(\rR\x06column\x1a\xa1\x03\n\x04Node\x12%\n\rresponse_name\
    \x18\x01\x20\x01(\tH\0R\x0cresponseName\x12\x16\n\x05index\x18\x02\x20\
    \x01(\rH\0R\x05index\x12.\n\x13original_field_name\x18\x0e\x20\x01(\tR\
    \x11originalFieldName\x12\x12\n\x04type\x18\x03\x20\x01(\tR\x04type\x12\
    \x1f\n\x0bparent_type\x18\r\x20\x01(\tR\nparentType\x12F\n\x0ccache_poli\
    cy\x18\x05\x20\x01(\x0b2#.mdg.engine.proto.Trace.CachePolicyR\x0bcachePo\
    licy\x12\x1d\n\nstart_time\x18\x08\x20\x01(\x04R\tstartTime\x12\x19\n\
    \x08end_time\x18\t\x20\x01(\x04R\x07endTime\x123\n\x05error\x18\x0b\x20\
    \x03(\x0b2\x1d.mdg.engine.proto.Trace.ErrorR\x05error\x122\n\x05child\
    \x18\x0c\x20\x03(\x0b2\x1c.mdg.engine.proto.Trace.NodeR\x05childB\x04\n\
    \x02idJ\x04\x08\x04\x10\x05\x1a\xa4\x08\n\rQueryPlanNode\x12P\n\x08seque\
    nce\x18\x01\x20\x01(\x0b22.mdg.engine.proto.Trace.QueryPlanNode.Sequence\
    NodeH\0R\x08sequence\x12P\n\x08parallel\x18\x02\x20\x01(\x0b22.mdg.engin\
    e.proto.Trace.QueryPlanNode.ParallelNodeH\0R\x08parallel\x12G\n\x05fetch\
    \x18\x03\x20\x01(\x0b2/.mdg.engine.proto.Trace.QueryPlanNode.FetchNodeH\
    \0R\x05fetch\x12M\n\x07flatten\x18\x04\x20\x01(\x0b21.mdg.engine.proto.T\
    race.QueryPlanNode.FlattenNodeH\0R\x07flatten\x1aK\n\x0cSequenceNode\x12\
    ;\n\x05nodes\x18\x01\x20\x03(\x0b2%.mdg.engine.proto.Trace.QueryPlanNode\
    R\x05nodes\x1aK\n\x0cParallelNode\x12;\n\x05nodes\x18\x01\x20\x03(\x0b2%\
    .mdg.engine.proto.Trace.QueryPlanNodeR\x05nodes\x1a\xb3\x02\n\tFetchNode\
    \x12!\n\x0cservice_name\x18\x01\x20\x01(\tR\x0bserviceName\x120\n\x14tra\
    ce_parsing_failed\x18\x02\x20\x01(\x08R\x12traceParsingFailed\x12-\n\x05\
    trace\x18\x03\x20\x01(\x0b2\x17.mdg.engine.proto.TraceR\x05trace\x12(\n\
    \x10sent_time_offset\x18\x04\x20\x01(\x04R\x0esentTimeOffset\x127\n\tsen\
    t_time\x18\x05\x20\x01(\x0b2\x1a.google.protobuf.TimestampR\x08sentTime\
    \x12?\n\rreceived_time\x18\x06\x20\x01(\x0b2\x1a.google.protobuf.Timesta\
    mpR\x0creceivedTime\x1a\xa8\x01\n\x0bFlattenNode\x12^\n\rresponse_path\
    \x18\x01\x20\x03(\x0b29.mdg.engine.proto.Trace.QueryPlanNode.ResponsePat\
    hElementR\x0cresponsePath\x129\n\x04node\x18\x02\x20\x01(\x0b2%.mdg.engi\
    ne.proto.Trace.QueryPlanNodeR\x04node\x1aT\n\x13ResponsePathElement\x12\
    \x1f\n\nfield_name\x18\x01\x20\x01(\tH\0R\tfieldName\x12\x16\n\x05index\
    \x18\x02\x20\x01(\rH\0R\x05indexB\x04\n\x02idB\x06\n\x04nodeJ\x04\x08\
    \x0c\x10\rJ\x04\x08\r\x10\x0eJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03\
    \"\x8e\x02\n\x0cReportHeader\x12\x1a\n\x08hostname\x18\x05\x20\x01(\tR\
    \x08hostname\x12#\n\ragent_version\x18\x06\x20\x01(\tR\x0cagentVersion\
    \x12'\n\x0fservice_version\x18\x07\x20\x01(\tR\x0eserviceVersion\x12'\n\
    \x0fruntime_version\x18\x08\x20\x01(\tR\x0eruntimeVersion\x12\x14\n\x05u\
    name\x18\t\x20\x01(\tR\x05uname\x12\x1d\n\nschema_tag\x18\n\x20\x01(\tR\
    \tschemaTag\x120\n\x14executable_schema_id\x18\x0b\x20\x01(\tR\x12execut\
    ableSchemaIdJ\x04\x08\x03\x10\x04\"\x9b\x02\n\x0ePathErrorStats\x12J\n\
    \x08children\x18\x01\x20\x03(\x0b2..mdg.engine.proto.PathErrorStats.Chil\
    drenEntryR\x08children\x12!\n\x0cerrors_count\x18\x04\x20\x01(\x04R\x0be\
    rrorsCount\x12;\n\x1arequests_with_errors_count\x18\x05\x20\x01(\x04R\
    \x17requestsWithErrorsCount\x1a]\n\rChildrenEntry\x12\x10\n\x03key\x18\
    \x01\x20\x01(\tR\x03key\x126\n\x05value\x18\x02\x20\x01(\x0b2\x20.mdg.en\
    gine.proto.PathErrorStatsR\x05value:\x028\x01\"\x83\x05\n\x11QueryLatenc\
    yStats\x12#\n\rlatency_count\x18\x01\x20\x03(\x03R\x0clatencyCount\x12#\
    \n\rrequest_count\x18\x02\x20\x01(\x04R\x0crequestCount\x12\x1d\n\ncache\
    _hits\x18\x03\x20\x01(\x04R\tcacheHits\x120\n\x14persisted_query_hits\
    \x18\x04\x20\x01(\x04R\x12persistedQueryHits\x124\n\x16persisted_query_m\
    isses\x18\x05\x20\x01(\x04R\x14persistedQueryMisses\x12.\n\x13cache_late\
    ncy_count\x18\x06\x20\x03(\x03R\x11cacheLatencyCount\x12J\n\x10root_erro\
    r_stats\x18\x07\x20\x01(\x0b2\x20.mdg.engine.proto.PathErrorStatsR\x0ero\
    otErrorStats\x12;\n\x1arequests_with_errors_count\x18\x08\x20\x01(\x04R\
    \x17requestsWithErrorsCount\x123\n\x16public_cache_ttl_count\x18\t\x20\
    \x03(\x03R\x13publicCacheTtlCount\x125\n\x17private_cache_ttl_count\x18\
    \n\x20\x03(\x03R\x14privateCacheTtlCount\x12<\n\x1aregistered_operation_\
    count\x18\x0b\x20\x01(\x04R\x18registeredOperationCount\x12:\n\x19forbid\
    den_operation_count\x18\x0c\x20\x01(\x04R\x17forbiddenOperationCount\"\
    \x86\x01\n\x0cStatsContext\x12.\n\x13client_reference_id\x18\x01\x20\x01\
    (\tR\x11clientReferenceId\x12\x1f\n\x0bclient_name\x18\x02\x20\x01(\tR\n\
    clientName\x12%\n\x0eclient_version\x18\x03\x20\x01(\tR\rclientVersion\"\
    \xb0\x01\n\x1fContextualizedQueryLatencyStats\x12S\n\x13query_latency_st\
    ats\x18\x01\x20\x01(\x0b2#.mdg.engine.proto.QueryLatencyStatsR\x11queryL\
    atencyStats\x128\n\x07context\x18\x02\x20\x01(\x0b2\x1e.mdg.engine.proto\
    .StatsContextR\x07context\"\x8f\x02\n\x17ContextualizedTypeStats\x128\n\
    \x07context\x18\x01\x20\x01(\x0b2\x1e.mdg.engine.proto.StatsContextR\x07\
    context\x12^\n\rper_type_stat\x18\x02\x20\x03(\x0b2:.mdg.engine.proto.Co\
    ntextualizedTypeStats.PerTypeStatEntryR\x0bperTypeStat\x1aZ\n\x10PerType\
    StatEntry\x12\x10\n\x03key\x18\x01\x20\x01(\tR\x03key\x120\n\x05value\
    \x18\x02\x20\x01(\x0b2\x1a.mdg.engine.proto.TypeStatR\x05value:\x028\x01\
    \"\xd9\x01\n\tFieldStat\x12\x1f\n\x0breturn_type\x18\x03\x20\x01(\tR\nre\
    turnType\x12!\n\x0cerrors_count\x18\x04\x20\x01(\x04R\x0berrorsCount\x12\
    \x14\n\x05count\x18\x05\x20\x01(\x04R\x05count\x12;\n\x1arequests_with_e\
    rrors_count\x18\x06\x20\x01(\x04R\x17requestsWithErrorsCount\x12#\n\rlat\
    ency_count\x18\x08\x20\x03(\x03R\x0clatencyCountJ\x04\x08\x01\x10\x02J\
    \x04\x08\x02\x10\x03J\x04\x08\x07\x10\x08\"\xc8\x01\n\x08TypeStat\x12R\n\
    \x0eper_field_stat\x18\x03\x20\x03(\x0b2,.mdg.engine.proto.TypeStat.PerF\
    ieldStatEntryR\x0cperFieldStat\x1a\\\n\x11PerFieldStatEntry\x12\x10\n\
    \x03key\x18\x01\x20\x01(\tR\x03key\x121\n\x05value\x18\x02\x20\x01(\x0b2\
    \x1b.mdg.engine.proto.FieldStatR\x05value:\x028\x01J\x04\x08\x01\x10\x02\
    J\x04\x08\x02\x10\x03\"<\n\x05Field\x12\x12\n\x04name\x18\x02\x20\x01(\t\
    R\x04name\x12\x1f\n\x0breturn_type\x18\x03\x20\x01(\tR\nreturnType\"I\n\
    \x04Type\x12\x12\n\x04name\x18\x01\x20\x01(\tR\x04name\x12-\n\x05field\
    \x18\x02\x20\x03(\x0b2\x17.mdg.engine.proto.FieldR\x05field\"\xb4\x02\n\
    \x06Report\x126\n\x06header\x18\x01\x20\x01(\x0b2\x1e.mdg.engine.proto.R\
    eportHeaderR\x06header\x12V\n\x10traces_per_query\x18\x05\x20\x03(\x0b2,\
    .mdg.engine.proto.Report.TracesPerQueryEntryR\x0etracesPerQuery\x125\n\
    \x08end_time\x18\x02\x20\x01(\x0b2\x1a.google.protobuf.TimestampR\x07end\
    Time\x1ac\n\x13TracesPerQueryEntry\x12\x10\n\x03key\x18\x01\x20\x01(\tR\
    \x03key\x126\n\x05value\x18\x02\x20\x01(\x0b2\x20.mdg.engine.proto.Trace\
    sAndStatsR\x05value:\x028\x01\"\xdc\x02\n\x13ContextualizedStats\x128\n\
    \x07context\x18\x01\x20\x01(\x0b2\x1e.mdg.engine.proto.StatsContextR\x07\
    context\x12S\n\x13query_latency_stats\x18\x02\x20\x01(\x0b2#.mdg.engine.\
    proto.QueryLatencyStatsR\x11queryLatencyStats\x12Z\n\rper_type_stat\x18\
    \x03\x20\x03(\x0b26.mdg.engine.proto.ContextualizedStats.PerTypeStatEntr\
    yR\x0bperTypeStat\x1aZ\n\x10PerTypeStatEntry\x12\x10\n\x03key\x18\x01\
    \x20\x01(\tR\x03key\x120\n\x05value\x18\x02\x20\x01(\x0b2\x1a.mdg.engine\
    .proto.TypeStatR\x05value:\x028\x01\"\x94\x01\n\x0eTracesAndStats\x12-\n\
    \x05trace\x18\x01\x20\x03(\x0b2\x17.mdg.engine.proto.TraceR\x05trace\x12\
    S\n\x12stats_with_context\x18\x02\x20\x03(\x0b2%.mdg.engine.proto.Contex\
    tualizedStatsR\x10statsWithContextJ\x9d\x93\x01\n\x07\x12\x05\x02\0\x84\
    \x03\x01\n\x88\x01\n\x01\x0c\x12\x03\x02\0\x122~\x20From\x20https://raw.\
    githubusercontent.com/apollographql/apollo-server/main/packages/apollo-r\
    eporting-protobuf/src/reports.proto\n\n\x08\n\x01\x02\x12\x03\x04\0\x19\
    \n\t\n\x02\x03\0\x12\x03\x06\0)\n\x0b\n\x02\x04\0\x12\x05\x08\0\x80\x02\
    \x01\n\n\n\x03\x04\0\x01\x12\x03\x08\x08\r\n\x0c\n\x04\x04\0\x03\0\x12\
    \x04\t\x08\x12\t\n\x0c\n\x05\x04\0\x03\0\x01\x12\x03\t\x10\x1b\n\x0e\n\
    \x06\x04\0\x03\0\x04\0\x12\x04\n\x10\x0e\x11\n\x0e\n\x07\x04\0\x03\0\x04\
    \0\x01\x12\x03\n\x15\x1a\n\x0f\n\x08\x04\0\x03\0\x04\0\x02\0\x12\x03\x0b\
    \x18$\n\x10\n\t\x04\0\x03\0\x04\0\x02\0\x01\x12\x03\x0b\x18\x1f\n\x10\n\
    \t\x04\0\x03\0\x04\0\x02\0\x02\x12\x03\x0b\"#\n\x0f\n\x08\x04\0\x03\0\
    \x04\0\x02\x01\x12\x03\x0c\x18#\n\x10\n\t\x04\0\x03\0\x04\0\x02\x01\x01\
    \x12\x03\x0c\x18\x1e\n\x10\n\t\x04\0\x03\0\x04\0\x02\x01\x02\x12\x03\x0c\
    !\"\n\x0f\n\x08\x04\0\x03\0\x04\0\x02\x02\x12\x03\r\x18$\n\x10\n\t\x04\0\
    \x03\0\x04\0\x02\x02\x01\x12\x03\r\x18\x1f\n\x10\n\t\x04\0\x03\0\x04\0\
    \x02\x02\x02\x12\x03\r\"#\n\r\n\x06\x04\0\x03\0\x02\0\x12\x03\x10\x10\
    \x20\n\x0e\n\x07\x04\0\x03\0\x02\0\x06\x12\x03\x10\x10\x15\n\x0e\n\x07\
    \x04\0\x03\0\x02\0\x01\x12\x03\x10\x16\x1b\n\x0e\n\x07\x04\0\x03\0\x02\0\
    \x03\x12\x03\x10\x1e\x1f\n+\n\x06\x04\0\x03\0\x02\x01\x12\x03\x11\x10%\"\
    \x1c\x20use\x200\x20for\x20absent,\x20-1\x20for\x200\n\n\x0e\n\x07\x04\0\
    \x03\0\x02\x01\x05\x12\x03\x11\x10\x15\n\x0e\n\x07\x04\0\x03\0\x02\x01\
    \x01\x12\x03\x11\x16\x20\n\x0e\n\x07\x04\0\x03\0\x02\x01\x03\x12\x03\x11\
    #$\n\x0c\n\x04\x04\0\x03\x01\x12\x04\x14\x08!\t\n\x0c\n\x05\x04\0\x03\
    \x01\x01\x12\x03\x14\x10\x17\n\xf9\x01\n\x06\x04\0\x03\x01\x02\0\x12\x03\
    \x19\x107\x1a\xe9\x01\x20The\x20variables\x20associated\x20with\x20this\
    \x20query\x20(unless\x20the\x20reporting\x20agent\x20is\n\x20configured\
    \x20to\x20keep\x20them\x20all\x20private).\x20Values\x20are\x20JSON:\x20\
    ie,\x20strings\x20are\n\x20enclosed\x20in\x20double\x20quotes,\x20etc.\
    \x20\x20The\x20value\x20of\x20a\x20private\x20variable\x20is\n\x20the\
    \x20empty\x20string.\n\n\x0e\n\x07\x04\0\x03\x01\x02\0\x06\x12\x03\x19\
    \x10#\n\x0e\n\x07\x04\0\x03\x01\x02\0\x01\x12\x03\x19$2\n\x0e\n\x07\x04\
    \0\x03\x01\x02\0\x03\x12\x03\x1956\n\xa2\x01\n\x06\x04\0\x03\x01\x02\x01\
    \x12\x03\x1c\x10<\x1a\x92\x01\x20Deprecated.\x20Engineproxy\x20did\x20no\
    t\x20encode\x20variable\x20values\x20as\x20JSON,\x20so\x20you\n\x20could\
    n't\x20tell\x20numbers\x20from\x20numeric\x20strings.\x20Send\x20variabl\
    es_json\x20instead.\n\n\x0e\n\x07\x04\0\x03\x01\x02\x01\x06\x12\x03\x1c\
    \x10\"\n\x0e\n\x07\x04\0\x03\x01\x02\x01\x01\x12\x03\x1c#7\n\x0e\n\x07\
    \x04\0\x03\x01\x02\x01\x03\x12\x03\x1c:;\n\xd8\x01\n\x06\x04\0\x03\x01\
    \x02\x02\x12\x03\x20\x10*\x1a\xc8\x01\x20This\x20is\x20deprecated\x20and\
    \x20only\x20used\x20for\x20legacy\x20applications\n\x20don't\x20include\
    \x20this\x20in\x20traces\x20inside\x20a\x20FullTracesReport;\x20the\x20o\
    peration\n\x20name\x20for\x20these\x20traces\x20comes\x20from\x20the\x20\
    key\x20of\x20the\x20traces_per_query\x20map.\n\n\x0e\n\x07\x04\0\x03\x01\
    \x02\x02\x05\x12\x03\x20\x10\x16\n\x0e\n\x07\x04\0\x03\x01\x02\x02\x01\
    \x12\x03\x20\x17%\n\x0e\n\x07\x04\0\x03\x01\x02\x02\x03\x12\x03\x20()\n\
    \x0c\n\x04\x04\0\x03\x02\x12\x04#\x08(\t\n\x0c\n\x05\x04\0\x03\x02\x01\
    \x12\x03#\x10\x15\n\x19\n\x06\x04\0\x03\x02\x02\0\x12\x03$\x10#\"\n\x20r\
    equired\n\n\x0e\n\x07\x04\0\x03\x02\x02\0\x05\x12\x03$\x10\x16\n\x0e\n\
    \x07\x04\0\x03\x02\x02\0\x01\x12\x03$\x17\x1e\n\x0e\n\x07\x04\0\x03\x02\
    \x02\0\x03\x12\x03$!\"\n\r\n\x06\x04\0\x03\x02\x02\x01\x12\x03%\x10/\n\
    \x0e\n\x07\x04\0\x03\x02\x02\x01\x04\x12\x03%\x10\x18\n\x0e\n\x07\x04\0\
    \x03\x02\x02\x01\x06\x12\x03%\x19!\n\x0e\n\x07\x04\0\x03\x02\x02\x01\x01\
    \x12\x03%\"*\n\x0e\n\x07\x04\0\x03\x02\x02\x01\x03\x12\x03%-.\n\r\n\x06\
    \x04\0\x03\x02\x02\x02\x12\x03&\x10#\n\x0e\n\x07\x04\0\x03\x02\x02\x02\
    \x05\x12\x03&\x10\x16\n\x0e\n\x07\x04\0\x03\x02\x02\x02\x01\x12\x03&\x17\
    \x1e\n\x0e\n\x07\x04\0\x03\x02\x02\x02\x03\x12\x03&!\"\n\r\n\x06\x04\0\
    \x03\x02\x02\x03\x12\x03'\x10\x20\n\x0e\n\x07\x04\0\x03\x02\x02\x03\x05\
    \x12\x03'\x10\x16\n\x0e\n\x07\x04\0\x03\x02\x02\x03\x01\x12\x03'\x17\x1b\
    \n\x0e\n\x07\x04\0\x03\x02\x02\x03\x03\x12\x03'\x1e\x1f\n\x0c\n\x04\x04\
    \0\x03\x03\x12\x04*\x08G\t\n\x0c\n\x05\x04\0\x03\x03\x01\x12\x03*\x10\
    \x14\n\x0e\n\x06\x04\0\x03\x03\x03\0\x12\x04+\x10-\x11\n\x0e\n\x07\x04\0\
    \x03\x03\x03\0\x01\x12\x03+\x18\x1e\n\x0f\n\x08\x04\0\x03\x03\x03\0\x02\
    \0\x12\x03,\x182\n\x10\n\t\x04\0\x03\x03\x03\0\x02\0\x04\x12\x03,\x18\
    \x20\n\x10\n\t\x04\0\x03\x03\x03\0\x02\0\x05\x12\x03,!'\n\x10\n\t\x04\0\
    \x03\x03\x03\0\x02\0\x01\x12\x03,(-\n\x10\n\t\x04\0\x03\x03\x03\0\x02\0\
    \x03\x12\x03,01\n\x0e\n\x06\x04\0\x03\x03\x04\0\x12\x04/\x10:\x11\n\x0e\
    \n\x07\x04\0\x03\x03\x04\0\x01\x12\x03/\x15\x1b\n\x0f\n\x08\x04\0\x03\
    \x03\x04\0\x02\0\x12\x030\x18$\n\x10\n\t\x04\0\x03\x03\x04\0\x02\0\x01\
    \x12\x030\x18\x1f\n\x10\n\t\x04\0\x03\x03\x04\0\x02\0\x02\x12\x030\"#\n\
    \x0f\n\x08\x04\0\x03\x03\x04\0\x02\x01\x12\x031\x18$\n\x10\n\t\x04\0\x03\
    \x03\x04\0\x02\x01\x01\x12\x031\x18\x1f\n\x10\n\t\x04\0\x03\x03\x04\0\
    \x02\x01\x02\x12\x031\"#\n\x0f\n\x08\x04\0\x03\x03\x04\0\x02\x02\x12\x03\
    2\x18\x20\n\x10\n\t\x04\0\x03\x03\x04\0\x02\x02\x01\x12\x032\x18\x1b\n\
    \x10\n\t\x04\0\x03\x03\x04\0\x02\x02\x02\x12\x032\x1e\x1f\n\x0f\n\x08\
    \x04\0\x03\x03\x04\0\x02\x03\x12\x033\x18!\n\x10\n\t\x04\0\x03\x03\x04\0\
    \x02\x03\x01\x12\x033\x18\x1c\n\x10\n\t\x04\0\x03\x03\x04\0\x02\x03\x02\
    \x12\x033\x1f\x20\n\x0f\n\x08\x04\0\x03\x03\x04\0\x02\x04\x12\x034\x18!\
    \n\x10\n\t\x04\0\x03\x03\x04\0\x02\x04\x01\x12\x034\x18\x1c\n\x10\n\t\
    \x04\0\x03\x03\x04\0\x02\x04\x02\x12\x034\x1f\x20\n\x0f\n\x08\x04\0\x03\
    \x03\x04\0\x02\x05\x12\x035\x18\x20\n\x10\n\t\x04\0\x03\x03\x04\0\x02\
    \x05\x01\x12\x035\x18\x1b\n\x10\n\t\x04\0\x03\x03\x04\0\x02\x05\x02\x12\
    \x035\x1e\x1f\n\x0f\n\x08\x04\0\x03\x03\x04\0\x02\x06\x12\x036\x18#\n\
    \x10\n\t\x04\0\x03\x03\x04\0\x02\x06\x01\x12\x036\x18\x1e\n\x10\n\t\x04\
    \0\x03\x03\x04\0\x02\x06\x02\x12\x036!\"\n\x0f\n\x08\x04\0\x03\x03\x04\0\
    \x02\x07\x12\x037\x18\"\n\x10\n\t\x04\0\x03\x03\x04\0\x02\x07\x01\x12\
    \x037\x18\x1d\n\x10\n\t\x04\0\x03\x03\x04\0\x02\x07\x02\x12\x037\x20!\n\
    \x0f\n\x08\x04\0\x03\x03\x04\0\x02\x08\x12\x038\x18$\n\x10\n\t\x04\0\x03\
    \x03\x04\0\x02\x08\x01\x12\x038\x18\x1f\n\x10\n\t\x04\0\x03\x03\x04\0\
    \x02\x08\x02\x12\x038\"#\n\x0f\n\x08\x04\0\x03\x03\x04\0\x02\t\x12\x039\
    \x18\"\n\x10\n\t\x04\0\x03\x03\x04\0\x02\t\x01\x12\x039\x18\x1d\n\x10\n\
    \t\x04\0\x03\x03\x04\0\x02\t\x02\x12\x039\x20!\n\r\n\x06\x04\0\x03\x03\
    \x02\0\x12\x03;\x10\"\n\x0e\n\x07\x04\0\x03\x03\x02\0\x06\x12\x03;\x10\
    \x16\n\x0e\n\x07\x04\0\x03\x03\x02\0\x01\x12\x03;\x17\x1d\n\x0e\n\x07\
    \x04\0\x03\x03\x02\0\x03\x12\x03;\x20!\n\r\n\x06\x04\0\x03\x03\x02\x01\
    \x12\x03<\x10\x20\n\x0e\n\x07\x04\0\x03\x03\x02\x01\x05\x12\x03<\x10\x16\
    \n\x0e\n\x07\x04\0\x03\x03\x02\x01\x01\x12\x03<\x17\x1b\n\x0e\n\x07\x04\
    \0\x03\x03\x02\x01\x03\x12\x03<\x1e\x1f\n\r\n\x06\x04\0\x03\x03\x02\x02\
    \x12\x03=\x10\x20\n\x0e\n\x07\x04\0\x03\x03\x02\x02\x05\x12\x03=\x10\x16\
    \n\x0e\n\x07\x04\0\x03\x03\x02\x02\x01\x12\x03=\x17\x1b\n\x0e\n\x07\x04\
    \0\x03\x03\x02\x02\x03\x12\x03=\x1e\x1f\nD\n\x06\x04\0\x03\x03\x02\x03\
    \x12\x03@\x108\x1a5\x20Should\x20exclude\x20manual\x20blacklist\x20(\"Au\
    th\"\x20by\x20default)\n\n\x0e\n\x07\x04\0\x03\x03\x02\x03\x06\x12\x03@\
    \x10#\n\x0e\n\x07\x04\0\x03\x03\x02\x03\x01\x12\x03@$3\n\x0e\n\x07\x04\0\
    \x03\x03\x02\x03\x03\x12\x03@67\n\r\n\x06\x04\0\x03\x03\x02\x04\x12\x03A\
    \x109\n\x0e\n\x07\x04\0\x03\x03\x02\x04\x06\x12\x03A\x10#\n\x0e\n\x07\
    \x04\0\x03\x03\x02\x04\x01\x12\x03A$4\n\x0e\n\x07\x04\0\x03\x03\x02\x04\
    \x03\x12\x03A78\n\r\n\x06\x04\0\x03\x03\x02\x05\x12\x03C\x10'\n\x0e\n\
    \x07\x04\0\x03\x03\x02\x05\x05\x12\x03C\x10\x16\n\x0e\n\x07\x04\0\x03\
    \x03\x02\x05\x01\x12\x03C\x17\"\n\x0e\n\x07\x04\0\x03\x03\x02\x05\x03\
    \x12\x03C%&\n\x1d\n\x06\x04\0\x03\x03\x02\x06\x12\x03E\x10\x20\"\x0e\x20\
    TLS\x20was\x20used\n\n\x0e\n\x07\x04\0\x03\x03\x02\x06\x05\x12\x03E\x10\
    \x14\n\x0e\n\x07\x04\0\x03\x03\x02\x06\x01\x12\x03E\x15\x1b\n\x0e\n\x07\
    \x04\0\x03\x03\x02\x06\x03\x12\x03E\x1e\x1f\nG\n\x06\x04\0\x03\x03\x02\
    \x07\x12\x03F\x10$\"8\x20by\x20convention\x20\"HTTP/1.0\",\x20\"HTTP/1.1\
    \",\x20\"HTTP/2\"\x20or\x20\"h2\"\n\n\x0e\n\x07\x04\0\x03\x03\x02\x07\
    \x05\x12\x03F\x10\x16\n\x0e\n\x07\x04\0\x03\x03\x02\x07\x01\x12\x03F\x17\
    \x1f\n\x0e\n\x07\x04\0\x03\x03\x02\x07\x03\x12\x03F\"#\n\x0c\n\x04\x04\0\
    \x03\x04\x12\x04I\x08L\t\n\x0c\n\x05\x04\0\x03\x04\x01\x12\x03I\x10\x18\
    \n\r\n\x06\x04\0\x03\x04\x02\0\x12\x03J\x10\x20\n\x0e\n\x07\x04\0\x03\
    \x04\x02\0\x05\x12\x03J\x10\x16\n\x0e\n\x07\x04\0\x03\x04\x02\0\x01\x12\
    \x03J\x17\x1b\n\x0e\n\x07\x04\0\x03\x04\x02\0\x03\x12\x03J\x1e\x1f\n\r\n\
    \x06\x04\0\x03\x04\x02\x01\x12\x03K\x10\"\n\x0e\n\x07\x04\0\x03\x04\x02\
    \x01\x05\x12\x03K\x10\x16\n\x0e\n\x07\x04\0\x03\x04\x02\x01\x01\x12\x03K\
    \x17\x1d\n\x0e\n\x07\x04\0\x03\x04\x02\x01\x03\x12\x03K\x20!\n\xd7\x02\n\
    \x04\x04\0\x03\x05\x12\x04S\x08s\t\x1a\xc8\x02\x20We\x20store\x20informa\
    tion\x20on\x20each\x20resolver\x20execution\x20as\x20a\x20Node\x20on\x20\
    a\x20tree.\n\x20The\x20structure\x20of\x20the\x20tree\x20corresponds\x20\
    to\x20the\x20structure\x20of\x20the\x20GraphQL\n\x20response;\x20it\x20d\
    oes\x20not\x20indicate\x20the\x20order\x20in\x20which\x20resolvers\x20we\
    re\n\x20invoked.\x20\x20Note\x20that\x20nodes\x20representing\x20indexes\
    \x20(and\x20the\x20root\x20node)\n\x20don't\x20contain\x20all\x20Node\
    \x20fields\x20(eg\x20types\x20and\x20times).\n\n\x0c\n\x05\x04\0\x03\x05\
    \x01\x12\x03S\x10\x14\n\xd4\x03\n\x06\x04\0\x03\x05\x08\0\x12\x04[\x10^\
    \x11\x1a\xc3\x03\x20The\x20name\x20of\x20the\x20field\x20(for\x20Nodes\
    \x20representing\x20a\x20resolver\x20call)\x20or\x20the\n\x20index\x20in\
    \x20a\x20list\x20(for\x20intermediate\x20Nodes\x20representing\x20elemen\
    ts\x20of\x20a\x20list).\n\x20field_name\x20is\x20the\x20name\x20of\x20th\
    e\x20field\x20as\x20it\x20appears\x20in\x20the\x20GraphQL\n\x20response:\
    \x20ie,\x20it\x20may\x20be\x20an\x20alias.\x20\x20(In\x20that\x20case,\
    \x20the\x20original_field_name\n\x20field\x20holds\x20the\x20actual\x20f\
    ield\x20name\x20from\x20the\x20schema.)\x20In\x20any\x20context\x20where\
    \n\x20we're\x20building\x20up\x20a\x20path,\x20we\x20use\x20the\x20respo\
    nse_name\x20rather\x20than\x20the\n\x20original_field_name.\n\n\x0e\n\
    \x07\x04\0\x03\x05\x08\0\x01\x12\x03[\x16\x18\n\r\n\x06\x04\0\x03\x05\
    \x02\0\x12\x03\\\x181\n\x0e\n\x07\x04\0\x03\x05\x02\0\x05\x12\x03\\\x18\
    \x1e\n\x0e\n\x07\x04\0\x03\x05\x02\0\x01\x12\x03\\\x1f,\n\x0e\n\x07\x04\
    \0\x03\x05\x02\0\x03\x12\x03\\/0\n\r\n\x06\x04\0\x03\x05\x02\x01\x12\x03\
    ]\x18)\n\x0e\n\x07\x04\0\x03\x05\x02\x01\x05\x12\x03]\x18\x1e\n\x0e\n\
    \x07\x04\0\x03\x05\x02\x01\x01\x12\x03]\x1f$\n\x0e\n\x07\x04\0\x03\x05\
    \x02\x01\x03\x12\x03]'(\n\r\n\x06\x04\0\x03\x05\x02\x02\x12\x03`\x100\n\
    \x0e\n\x07\x04\0\x03\x05\x02\x02\x05\x12\x03`\x10\x16\n\x0e\n\x07\x04\0\
    \x03\x05\x02\x02\x01\x12\x03`\x17*\n\x0e\n\x07\x04\0\x03\x05\x02\x02\x03\
    \x12\x03`-/\nO\n\x06\x04\0\x03\x05\x02\x03\x12\x03c\x10\x20\x1a@\x20The\
    \x20field's\x20return\x20type;\x20e.g.\x20\"String!\"\x20for\x20User.ema\
    il:String!\n\n\x0e\n\x07\x04\0\x03\x05\x02\x03\x05\x12\x03c\x10\x16\n\
    \x0e\n\x07\x04\0\x03\x05\x02\x03\x01\x12\x03c\x17\x1b\n\x0e\n\x07\x04\0\
    \x03\x05\x02\x03\x03\x12\x03c\x1e\x1f\nL\n\x06\x04\0\x03\x05\x02\x04\x12\
    \x03f\x10(\x1a=\x20The\x20field's\x20parent\x20type;\x20e.g.\x20\"User\"\
    \x20for\x20User.email:String!\n\n\x0e\n\x07\x04\0\x03\x05\x02\x04\x05\
    \x12\x03f\x10\x16\n\x0e\n\x07\x04\0\x03\x05\x02\x04\x01\x12\x03f\x17\"\n\
    \x0e\n\x07\x04\0\x03\x05\x02\x04\x03\x12\x03f%'\n\r\n\x06\x04\0\x03\x05\
    \x02\x05\x12\x03h\x10-\n\x0e\n\x07\x04\0\x03\x05\x02\x05\x06\x12\x03h\
    \x10\x1b\n\x0e\n\x07\x04\0\x03\x05\x02\x05\x01\x12\x03h\x1c(\n\x0e\n\x07\
    \x04\0\x03\x05\x02\x05\x03\x12\x03h+,\n:\n\x06\x04\0\x03\x05\x02\x06\x12\
    \x03k\x10&\x1a+\x20relative\x20to\x20the\x20trace's\x20start_time,\x20in\
    \x20ns\n\n\x0e\n\x07\x04\0\x03\x05\x02\x06\x05\x12\x03k\x10\x16\n\x0e\n\
    \x07\x04\0\x03\x05\x02\x06\x01\x12\x03k\x17!\n\x0e\n\x07\x04\0\x03\x05\
    \x02\x06\x03\x12\x03k$%\n:\n\x06\x04\0\x03\x05\x02\x07\x12\x03m\x10$\x1a\
    +\x20relative\x20to\x20the\x20trace's\x20start_time,\x20in\x20ns\n\n\x0e\
    \n\x07\x04\0\x03\x05\x02\x07\x05\x12\x03m\x10\x16\n\x0e\n\x07\x04\0\x03\
    \x05\x02\x07\x01\x12\x03m\x17\x1f\n\x0e\n\x07\x04\0\x03\x05\x02\x07\x03\
    \x12\x03m\"#\n\r\n\x06\x04\0\x03\x05\x02\x08\x12\x03o\x10*\n\x0e\n\x07\
    \x04\0\x03\x05\x02\x08\x04\x12\x03o\x10\x18\n\x0e\n\x07\x04\0\x03\x05\
    \x02\x08\x06\x12\x03o\x19\x1e\n\x0e\n\x07\x04\0\x03\x05\x02\x08\x01\x12\
    \x03o\x1f$\n\x0e\n\x07\x04\0\x03\x05\x02\x08\x03\x12\x03o')\n\r\n\x06\
    \x04\0\x03\x05\x02\t\x12\x03p\x10)\n\x0e\n\x07\x04\0\x03\x05\x02\t\x04\
    \x12\x03p\x10\x18\n\x0e\n\x07\x04\0\x03\x05\x02\t\x06\x12\x03p\x19\x1d\n\
    \x0e\n\x07\x04\0\x03\x05\x02\t\x01\x12\x03p\x1e#\n\x0e\n\x07\x04\0\x03\
    \x05\x02\t\x03\x12\x03p&(\n\x0c\n\x05\x04\0\x03\x05\t\x12\x03r\x10\x1b\n\
    \r\n\x06\x04\0\x03\x05\t\0\x12\x03r\x19\x1a\n\x0e\n\x07\x04\0\x03\x05\t\
    \0\x01\x12\x03r\x19\x1a\n\x0e\n\x07\x04\0\x03\x05\t\0\x02\x12\x03r\x19\
    \x1a\n\xfe\x02\n\x04\x04\0\x03\x06\x12\x05y\x08\xab\x01\t\x1a\xee\x02\
    \x20represents\x20a\x20node\x20in\x20the\x20query\x20plan,\x20under\x20w\
    hich\x20there\x20is\x20a\x20trace\x20tree\x20for\x20that\x20service\x20f\
    etch.\n\x20In\x20particular,\x20each\x20fetch\x20node\x20represents\x20a\
    \x20call\x20to\x20an\x20implementing\x20service,\x20and\x20calls\x20to\
    \x20implementing\n\x20services\x20may\x20not\x20be\x20unique.\x20See\x20\
    https://github.com/apollographql/apollo-server/blob/main/packages/apollo\
    -gateway/src/QueryPlan.ts\n\x20for\x20more\x20information\x20and\x20deta\
    ils.\n\n\x0c\n\x05\x04\0\x03\x06\x01\x12\x03y\x10\x1d\nd\n\x06\x04\0\x03\
    \x06\x03\0\x12\x04{\x10}\x11\x1aT\x20This\x20represents\x20a\x20set\x20o\
    f\x20nodes\x20to\x20be\x20executed\x20sequentially\x20by\x20the\x20Gatew\
    ay\x20executor\n\n\x0e\n\x07\x04\0\x03\x06\x03\0\x01\x12\x03{\x18$\n\x0f\
    \n\x08\x04\0\x03\x06\x03\0\x02\0\x12\x03|\x189\n\x10\n\t\x04\0\x03\x06\
    \x03\0\x02\0\x04\x12\x03|\x18\x20\n\x10\n\t\x04\0\x03\x06\x03\0\x02\0\
    \x06\x12\x03|!.\n\x10\n\t\x04\0\x03\x06\x03\0\x02\0\x01\x12\x03|/4\n\x10\
    \n\t\x04\0\x03\x06\x03\0\x02\0\x03\x12\x03|78\nd\n\x06\x04\0\x03\x06\x03\
    \x01\x12\x05\x7f\x10\x81\x01\x11\x1aS\x20This\x20represents\x20a\x20set\
    \x20of\x20nodes\x20to\x20be\x20executed\x20in\x20parallel\x20by\x20the\
    \x20Gateway\x20executor\n\n\x0e\n\x07\x04\0\x03\x06\x03\x01\x01\x12\x03\
    \x7f\x18$\n\x10\n\x08\x04\0\x03\x06\x03\x01\x02\0\x12\x04\x80\x01\x189\n\
    \x11\n\t\x04\0\x03\x06\x03\x01\x02\0\x04\x12\x04\x80\x01\x18\x20\n\x11\n\
    \t\x04\0\x03\x06\x03\x01\x02\0\x06\x12\x04\x80\x01!.\n\x11\n\t\x04\0\x03\
    \x06\x03\x01\x02\0\x01\x12\x04\x80\x01/4\n\x11\n\t\x04\0\x03\x06\x03\x01\
    \x02\0\x03\x12\x04\x80\x0178\nZ\n\x06\x04\0\x03\x06\x03\x02\x12\x06\x83\
    \x01\x10\x97\x01\x11\x1aH\x20This\x20represents\x20a\x20node\x20to\x20se\
    nd\x20an\x20operation\x20to\x20an\x20implementing\x20service\n\n\x0f\n\
    \x07\x04\0\x03\x06\x03\x02\x01\x12\x04\x83\x01\x18!\n\x8a\x02\n\x08\x04\
    \0\x03\x06\x03\x02\x02\0\x12\x04\x87\x01\x180\x1a\xf7\x01\x20XXX\x20When\
    \x20we\x20want\x20to\x20include\x20more\x20details\x20about\x20the\x20su\
    b-operation\x20that\x20was\n\x20executed\x20against\x20this\x20service,\
    \x20we\x20should\x20include\x20that\x20here\x20in\x20each\x20fetch\x20no\
    de.\n\x20This\x20might\x20include\x20an\x20operation\x20signature,\x20re\
    quires\x20directive,\x20reference\x20resolutions,\x20etc.\n\n\x11\n\t\
    \x04\0\x03\x06\x03\x02\x02\0\x05\x12\x04\x87\x01\x18\x1e\n\x11\n\t\x04\0\
    \x03\x06\x03\x02\x02\0\x01\x12\x04\x87\x01\x1f+\n\x11\n\t\x04\0\x03\x06\
    \x03\x02\x02\0\x03\x12\x04\x87\x01./\n\x10\n\x08\x04\0\x03\x06\x03\x02\
    \x02\x01\x12\x04\x89\x01\x186\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\x01\
    \x05\x12\x04\x89\x01\x18\x1c\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\x01\x01\
    \x12\x04\x89\x01\x1d1\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\x01\x03\x12\
    \x04\x89\x0145\n\xcc\x01\n\x08\x04\0\x03\x06\x03\x02\x02\x02\x12\x04\x8e\
    \x01\x18(\x1a\xb9\x01\x20This\x20Trace\x20only\x20contains\x20start_time\
    ,\x20end_time,\x20duration_ns,\x20and\x20root;\n\x20all\x20timings\x20we\
    re\x20calculated\x20**on\x20the\x20federated\x20service**,\x20and\x20clo\
    ck\x20skew\n\x20will\x20be\x20handled\x20by\x20the\x20ingress\x20server.\
    \n\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\x02\x06\x12\x04\x8e\x01\x18\x1d\n\
    \x11\n\t\x04\0\x03\x06\x03\x02\x02\x02\x01\x12\x04\x8e\x01\x1e#\n\x11\n\
    \t\x04\0\x03\x06\x03\x02\x02\x02\x03\x12\x04\x8e\x01&'\n]\n\x08\x04\0\
    \x03\x06\x03\x02\x02\x03\x12\x04\x91\x01\x184\x1aK\x20relative\x20to\x20\
    the\x20outer\x20trace's\x20start_time,\x20in\x20ns,\x20measured\x20in\
    \x20the\x20gateway.\n\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\x03\x05\x12\
    \x04\x91\x01\x18\x1e\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\x03\x01\x12\x04\
    \x91\x01\x1f/\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\x03\x03\x12\x04\x91\
    \x0123\nk\n\x08\x04\0\x03\x06\x03\x02\x02\x04\x12\x04\x95\x01\x18@\x1aY\
    \x20Wallclock\x20times\x20measured\x20in\x20the\x20gateway\x20for\x20whe\
    n\x20this\x20operation\x20was\n\x20sent\x20and\x20received.\n\n\x11\n\t\
    \x04\0\x03\x06\x03\x02\x02\x04\x06\x12\x04\x95\x01\x181\n\x11\n\t\x04\0\
    \x03\x06\x03\x02\x02\x04\x01\x12\x04\x95\x012;\n\x11\n\t\x04\0\x03\x06\
    \x03\x02\x02\x04\x03\x12\x04\x95\x01>?\n\x10\n\x08\x04\0\x03\x06\x03\x02\
    \x02\x05\x12\x04\x96\x01\x18D\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\x05\
    \x06\x12\x04\x96\x01\x181\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\x05\x01\
    \x12\x04\x96\x012?\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\x05\x03\x12\x04\
    \x96\x01BC\n\xc9\x01\n\x06\x04\0\x03\x06\x03\x03\x12\x06\x9b\x01\x10\x9e\
    \x01\x11\x1a\xb6\x01\x20This\x20node\x20represents\x20a\x20way\x20to\x20\
    reach\x20into\x20the\x20response\x20path\x20and\x20attach\x20related\x20\
    entities.\n\x20XXX\x20Flatten\x20is\x20really\x20not\x20the\x20right\x20\
    name\x20and\x20this\x20node\x20may\x20be\x20renamed\x20in\x20the\x20quer\
    y\x20planner.\n\n\x0f\n\x07\x04\0\x03\x06\x03\x03\x01\x12\x04\x9b\x01\
    \x18#\n\x10\n\x08\x04\0\x03\x06\x03\x03\x02\0\x12\x04\x9c\x01\x18G\n\x11\
    \n\t\x04\0\x03\x06\x03\x03\x02\0\x04\x12\x04\x9c\x01\x18\x20\n\x11\n\t\
    \x04\0\x03\x06\x03\x03\x02\0\x06\x12\x04\x9c\x01!4\n\x11\n\t\x04\0\x03\
    \x06\x03\x03\x02\0\x01\x12\x04\x9c\x015B\n\x11\n\t\x04\0\x03\x06\x03\x03\
    \x02\0\x03\x12\x04\x9c\x01EF\n\x10\n\x08\x04\0\x03\x06\x03\x03\x02\x01\
    \x12\x04\x9d\x01\x18/\n\x11\n\t\x04\0\x03\x06\x03\x03\x02\x01\x06\x12\
    \x04\x9d\x01\x18%\n\x11\n\t\x04\0\x03\x06\x03\x03\x02\x01\x01\x12\x04\
    \x9d\x01&*\n\x11\n\t\x04\0\x03\x06\x03\x03\x02\x01\x03\x12\x04\x9d\x01-.\
    \n\x10\n\x06\x04\0\x03\x06\x03\x04\x12\x06\x9f\x01\x10\xa4\x01\x11\n\x0f\
    \n\x07\x04\0\x03\x06\x03\x04\x01\x12\x04\x9f\x01\x18+\n\x12\n\x08\x04\0\
    \x03\x06\x03\x04\x08\0\x12\x06\xa0\x01\x18\xa3\x01\x19\n\x11\n\t\x04\0\
    \x03\x06\x03\x04\x08\0\x01\x12\x04\xa0\x01\x1e\x20\n\x10\n\x08\x04\0\x03\
    \x06\x03\x04\x02\0\x12\x04\xa1\x01\x206\n\x11\n\t\x04\0\x03\x06\x03\x04\
    \x02\0\x05\x12\x04\xa1\x01\x20&\n\x11\n\t\x04\0\x03\x06\x03\x04\x02\0\
    \x01\x12\x04\xa1\x01'1\n\x11\n\t\x04\0\x03\x06\x03\x04\x02\0\x03\x12\x04\
    \xa1\x0145\n\x10\n\x08\x04\0\x03\x06\x03\x04\x02\x01\x12\x04\xa2\x01\x20\
    1\n\x11\n\t\x04\0\x03\x06\x03\x04\x02\x01\x05\x12\x04\xa2\x01\x20&\n\x11\
    \n\t\x04\0\x03\x06\x03\x04\x02\x01\x01\x12\x04\xa2\x01',\n\x11\n\t\x04\0\
    \x03\x06\x03\x04\x02\x01\x03\x12\x04\xa2\x01/0\n\x10\n\x06\x04\0\x03\x06\
    \x08\0\x12\x06\xa5\x01\x10\xaa\x01\x11\n\x0f\n\x07\x04\0\x03\x06\x08\0\
    \x01\x12\x04\xa5\x01\x16\x1a\n\x0e\n\x06\x04\0\x03\x06\x02\0\x12\x04\xa6\
    \x01\x182\n\x0f\n\x07\x04\0\x03\x06\x02\0\x06\x12\x04\xa6\x01\x18$\n\x0f\
    \n\x07\x04\0\x03\x06\x02\0\x01\x12\x04\xa6\x01%-\n\x0f\n\x07\x04\0\x03\
    \x06\x02\0\x03\x12\x04\xa6\x0101\n\x0e\n\x06\x04\0\x03\x06\x02\x01\x12\
    \x04\xa7\x01\x182\n\x0f\n\x07\x04\0\x03\x06\x02\x01\x06\x12\x04\xa7\x01\
    \x18$\n\x0f\n\x07\x04\0\x03\x06\x02\x01\x01\x12\x04\xa7\x01%-\n\x0f\n\
    \x07\x04\0\x03\x06\x02\x01\x03\x12\x04\xa7\x0101\n\x0e\n\x06\x04\0\x03\
    \x06\x02\x02\x12\x04\xa8\x01\x18,\n\x0f\n\x07\x04\0\x03\x06\x02\x02\x06\
    \x12\x04\xa8\x01\x18!\n\x0f\n\x07\x04\0\x03\x06\x02\x02\x01\x12\x04\xa8\
    \x01\"'\n\x0f\n\x07\x04\0\x03\x06\x02\x02\x03\x12\x04\xa8\x01*+\n\x0e\n\
    \x06\x04\0\x03\x06\x02\x03\x12\x04\xa9\x01\x180\n\x0f\n\x07\x04\0\x03\
    \x06\x02\x03\x06\x12\x04\xa9\x01\x18#\n\x0f\n\x07\x04\0\x03\x06\x02\x03\
    \x01\x12\x04\xa9\x01$+\n\x0f\n\x07\x04\0\x03\x06\x02\x03\x03\x12\x04\xa9\
    \x01./\n@\n\x04\x04\0\x02\0\x12\x04\xae\x01\x081\x1a&\x20Wallclock\x20ti\
    me\x20when\x20the\x20trace\x20began.\n\"\n\x20required\n\n\r\n\x05\x04\0\
    \x02\0\x06\x12\x04\xae\x01\x08!\n\r\n\x05\x04\0\x02\0\x01\x12\x04\xae\
    \x01\",\n\r\n\x05\x04\0\x02\0\x03\x12\x04\xae\x01/0\n@\n\x04\x04\0\x02\
    \x01\x12\x04\xb0\x01\x08/\x1a&\x20Wallclock\x20time\x20when\x20the\x20tr\
    ace\x20ended.\n\"\n\x20required\n\n\r\n\x05\x04\0\x02\x01\x06\x12\x04\
    \xb0\x01\x08!\n\r\n\x05\x04\0\x02\x01\x01\x12\x04\xb0\x01\"*\n\r\n\x05\
    \x04\0\x02\x01\x03\x12\x04\xb0\x01-.\n\x9d\x01\n\x04\x04\0\x02\x02\x12\
    \x04\xb3\x01\x08\x20\x1a\x82\x01\x20High\x20precision\x20duration\x20of\
    \x20the\x20trace;\x20may\x20not\x20equal\x20end_time-start_time\n\x20(eg\
    ,\x20if\x20your\x20machine's\x20clock\x20changed\x20during\x20the\x20tra\
    ce).\n\"\n\x20required\n\n\r\n\x05\x04\0\x02\x02\x05\x12\x04\xb3\x01\x08\
    \x0e\n\r\n\x05\x04\0\x02\x02\x01\x12\x04\xb3\x01\x0f\x1a\n\r\n\x05\x04\0\
    \x02\x02\x03\x12\x04\xb3\x01\x1d\x1f\nr\n\x04\x04\0\x02\x03\x12\x04\xb6\
    \x01\x08\x17\x1ad\x20A\x20tree\x20containing\x20information\x20about\x20\
    all\x20resolvers\x20run\x20directly\x20by\x20this\n\x20service,\x20inclu\
    ding\x20errors.\n\n\r\n\x05\x04\0\x02\x03\x06\x12\x04\xb6\x01\x08\x0c\n\
    \r\n\x05\x04\0\x02\x03\x01\x12\x04\xb6\x01\r\x11\n\r\n\x05\x04\0\x02\x03\
    \x03\x12\x04\xb6\x01\x14\x16\n\xff\x06\n\x04\x04\0\x02\x04\x12\x04\xc6\
    \x01\x08\x1e\x1a\xa8\x05\x20In\x20addition\x20to\x20details.raw_query,\
    \x20we\x20include\x20a\x20\"signature\"\x20of\x20the\x20query,\n\x20whic\
    h\x20can\x20be\x20normalized:\x20for\x20example,\x20you\x20may\x20want\
    \x20to\x20discard\x20aliases,\x20drop\n\x20unused\x20operations\x20and\
    \x20fragments,\x20sort\x20fields,\x20etc.\x20The\x20most\x20important\
    \x20thing\n\x20here\x20is\x20that\x20the\x20signature\x20match\x20the\
    \x20signature\x20in\x20StatsReports.\x20In\n\x20StatsReports\x20signatur\
    es\x20show\x20up\x20as\x20the\x20key\x20in\x20the\x20per_query\x20map\
    \x20(with\x20the\n\x20operation\x20name\x20prepended).\x20\x20The\x20sig\
    nature\x20should\x20be\x20a\x20valid\x20GraphQL\x20query.\n\x20All\x20tr\
    aces\x20must\x20have\x20a\x20signature;\x20if\x20this\x20Trace\x20is\x20\
    in\x20a\x20FullTracesReport\n\x20that\x20signature\x20is\x20in\x20the\
    \x20key\x20of\x20traces_per_query\x20rather\x20than\x20in\x20this\x20fie\
    ld.\n\x20Engineproxy\x20provides\x20the\x20signature\x20in\x20legacy_sig\
    nature_needs_resigning\n\x20instead.\n2\xc5\x01\x20---------------------\
    ----------------------------------------------------\n\x20Fields\x20belo\
    w\x20this\x20line\x20are\x20*not*\x20included\x20in\x20federated\x20trac\
    es\x20(the\x20traces\n\x20sent\x20from\x20federated\x20services\x20to\
    \x20the\x20gateway).\n\n\r\n\x05\x04\0\x02\x04\x05\x12\x04\xc6\x01\x08\
    \x0e\n\r\n\x05\x04\0\x02\x04\x01\x12\x04\xc6\x01\x0f\x18\n\r\n\x05\x04\0\
    \x02\x04\x03\x12\x04\xc6\x01\x1b\x1d\n\xe9\x01\n\x04\x04\0\x02\x05\x12\
    \x04\xcb\x01\x08,\x1a\xda\x01\x20Optional:\x20when\x20GraphQL\x20parsing\
    \x20or\x20validation\x20against\x20the\x20GraphQL\x20schema\x20fails,\
    \x20these\x20fields\n\x20can\x20include\x20reference\x20to\x20the\x20ope\
    ration\x20being\x20sent\x20for\x20users\x20to\x20dig\x20into\x20the\x20s\
    et\x20of\x20operations\n\x20that\x20are\x20failing\x20validation.\n\n\r\
    \n\x05\x04\0\x02\x05\x05\x12\x04\xcb\x01\x08\x0e\n\r\n\x05\x04\0\x02\x05\
    \x01\x12\x04\xcb\x01\x0f&\n\r\n\x05\x04\0\x02\x05\x03\x12\x04\xcb\x01)+\
    \n\x0c\n\x04\x04\0\x02\x06\x12\x04\xcc\x01\x08,\n\r\n\x05\x04\0\x02\x06\
    \x05\x12\x04\xcc\x01\x08\x0e\n\r\n\x05\x04\0\x02\x06\x01\x12\x04\xcc\x01\
    \x0f&\n\r\n\x05\x04\0\x02\x06\x03\x12\x04\xcc\x01)+\n\x0c\n\x04\x04\0\
    \x02\x07\x12\x04\xce\x01\x08\x1c\n\r\n\x05\x04\0\x02\x07\x06\x12\x04\xce\
    \x01\x08\x0f\n\r\n\x05\x04\0\x02\x07\x01\x12\x04\xce\x01\x10\x17\n\r\n\
    \x05\x04\0\x02\x07\x03\x12\x04\xce\x01\x1a\x1b\n\xa9\x01\n\x04\x04\0\x02\
    \x08\x12\x04\xd2\x01\x08\x1f\x1a\x9a\x01\x20Note:\x20engineproxy\x20alwa\
    ys\x20sets\x20client_name,\x20client_version,\x20and\x20client_address\
    \x20to\x20\"none\".\n\x20apollo-engine-reporting\x20allows\x20for\x20the\
    m\x20to\x20be\x20set\x20by\x20the\x20user.\n\n\r\n\x05\x04\0\x02\x08\x05\
    \x12\x04\xd2\x01\x08\x0e\n\r\n\x05\x04\0\x02\x08\x01\x12\x04\xd2\x01\x0f\
    \x1a\n\r\n\x05\x04\0\x02\x08\x03\x12\x04\xd2\x01\x1d\x1e\n\x0c\n\x04\x04\
    \0\x02\t\x12\x04\xd3\x01\x08\"\n\r\n\x05\x04\0\x02\t\x05\x12\x04\xd3\x01\
    \x08\x0e\n\r\n\x05\x04\0\x02\t\x01\x12\x04\xd3\x01\x0f\x1d\n\r\n\x05\x04\
    \0\x02\t\x03\x12\x04\xd3\x01\x20!\n\x0c\n\x04\x04\0\x02\n\x12\x04\xd4\
    \x01\x08\"\n\r\n\x05\x04\0\x02\n\x05\x12\x04\xd4\x01\x08\x0e\n\r\n\x05\
    \x04\0\x02\n\x01\x12\x04\xd4\x01\x0f\x1d\n\r\n\x05\x04\0\x02\n\x03\x12\
    \x04\xd4\x01\x20!\n\x0c\n\x04\x04\0\x02\x0b\x12\x04\xd5\x01\x08(\n\r\n\
    \x05\x04\0\x02\x0b\x05\x12\x04\xd5\x01\x08\x0e\n\r\n\x05\x04\0\x02\x0b\
    \x01\x12\x04\xd5\x01\x0f\"\n\r\n\x05\x04\0\x02\x0b\x03\x12\x04\xd5\x01%'\
    \n\x0c\n\x04\x04\0\x02\x0c\x12\x04\xd7\x01\x08\x17\n\r\n\x05\x04\0\x02\
    \x0c\x06\x12\x04\xd7\x01\x08\x0c\n\r\n\x05\x04\0\x02\x0c\x01\x12\x04\xd7\
    \x01\r\x11\n\r\n\x05\x04\0\x02\x0c\x03\x12\x04\xd7\x01\x14\x16\n\x0c\n\
    \x04\x04\0\x02\r\x12\x04\xd9\x01\x08&\n\r\n\x05\x04\0\x02\r\x06\x12\x04\
    \xd9\x01\x08\x13\n\r\n\x05\x04\0\x02\r\x01\x12\x04\xd9\x01\x14\x20\n\r\n\
    \x05\x04\0\x02\r\x03\x12\x04\xd9\x01#%\n\x93\x02\n\x04\x04\0\x02\x0e\x12\
    \x04\xdf\x01\x08&\x1a\x84\x02\x20If\x20this\x20Trace\x20was\x20created\
    \x20by\x20a\x20gateway,\x20this\x20is\x20the\x20query\x20plan,\x20includ\
    ing\n\x20sub-Traces\x20for\x20federated\x20services.\x20Note\x20that\x20\
    the\x20'root'\x20tree\x20on\x20the\n\x20top-level\x20Trace\x20won't\x20c\
    ontain\x20any\x20resolvers\x20(though\x20it\x20could\x20contain\x20error\
    s\n\x20that\x20occurred\x20in\x20the\x20gateway\x20itself).\n\n\r\n\x05\
    \x04\0\x02\x0e\x06\x12\x04\xdf\x01\x08\x15\n\r\n\x05\x04\0\x02\x0e\x01\
    \x12\x04\xdf\x01\x16\x20\n\r\n\x05\x04\0\x02\x0e\x03\x12\x04\xdf\x01#%\n\
    \x81\x01\n\x04\x04\0\x02\x0f\x12\x04\xe3\x01\x08'\x1as\x20Was\x20this\
    \x20response\x20served\x20from\x20a\x20full\x20query\x20response\x20cach\
    e?\x20\x20(In\x20that\x20case\n\x20the\x20node\x20tree\x20will\x20have\
    \x20no\x20resolvers.)\n\n\r\n\x05\x04\0\x02\x0f\x05\x12\x04\xe3\x01\x08\
    \x0c\n\r\n\x05\x04\0\x02\x0f\x01\x12\x04\xe3\x01\r!\n\r\n\x05\x04\0\x02\
    \x0f\x03\x12\x04\xe3\x01$&\nP\n\x04\x04\0\x02\x10\x12\x04\xe6\x01\x08&\
    \x1aB\x20Was\x20this\x20query\x20specified\x20successfully\x20as\x20a\
    \x20persisted\x20query\x20hash?\n\n\r\n\x05\x04\0\x02\x10\x05\x12\x04\
    \xe6\x01\x08\x0c\n\r\n\x05\x04\0\x02\x10\x01\x12\x04\xe6\x01\r\x20\n\r\n\
    \x05\x04\0\x02\x10\x03\x12\x04\xe6\x01#%\n\xb9\x01\n\x04\x04\0\x02\x11\
    \x12\x04\xea\x01\x08+\x1a\xaa\x01\x20Did\x20this\x20query\x20contain\x20\
    both\x20a\x20full\x20query\x20string\x20and\x20a\x20persisted\x20query\
    \x20hash?\n\x20(This\x20typically\x20means\x20that\x20a\x20previous\x20r\
    equest\x20was\x20rejected\x20as\x20an\x20unknown\n\x20persisted\x20query\
    .)\n\n\r\n\x05\x04\0\x02\x11\x05\x12\x04\xea\x01\x08\x0c\n\r\n\x05\x04\0\
    \x02\x11\x01\x12\x04\xea\x01\r%\n\r\n\x05\x04\0\x02\x11\x03\x12\x04\xea\
    \x01(*\nI\n\x04\x04\0\x02\x12\x12\x04\xed\x01\x08'\x1a;\x20Was\x20this\
    \x20operation\x20registered\x20and\x20a\x20part\x20of\x20the\x20safelist\
    ?\n\n\r\n\x05\x04\0\x02\x12\x05\x12\x04\xed\x01\x08\x0c\n\r\n\x05\x04\0\
    \x02\x12\x01\x12\x04\xed\x01\r!\n\r\n\x05\x04\0\x02\x12\x03\x12\x04\xed\
    \x01$&\nH\n\x04\x04\0\x02\x13\x12\x04\xf0\x01\x08&\x1a:\x20Was\x20this\
    \x20operation\x20forbidden\x20due\x20to\x20lack\x20of\x20safelisting?\n\
    \n\r\n\x05\x04\0\x02\x13\x05\x12\x04\xf0\x01\x08\x0c\n\r\n\x05\x04\0\x02\
    \x13\x01\x12\x04\xf0\x01\r\x20\n\r\n\x05\x04\0\x02\x13\x03\x12\x04\xf0\
    \x01#%\n\xb9\x04\n\x04\x04\0\x02\x14\x12\x04\xfb\x01\x084\x1a\xa7\x03\
    \x20Older\x20agents\x20(eg\x20the\x20Go\x20engineproxy)\x20relied\x20to\
    \x20some\x20degree\x20on\x20the\x20Engine\n\x20backend\x20to\x20run\x20t\
    heir\x20own\x20semi-compatible\x20implementation\x20of\x20a\x20specific\
    \n\x20variant\x20of\x20query\x20signatures.\x20The\x20backend\x20does\
    \x20not\x20do\x20this\x20for\x20new\x20agents\x20(which\n\x20set\x20the\
    \x20above\x20'signature'\x20field).\x20It\x20used\x20to\x20still\x20\"re\
    -sign\"\x20signatures\n\x20from\x20engineproxy,\x20but\x20we've\x20now\
    \x20simplified\x20the\x20backend\x20to\x20no\x20longer\x20do\x20this.\n\
    \x20Deprecated\x20and\x20ignored\x20in\x20FullTracesReports.\n2\x80\x01\
    \x20--------------------------------------------------------------\n\x20\
    Fields\x20below\x20this\x20line\x20are\x20only\x20set\x20by\x20the\x20ol\
    d\x20Go\x20engineproxy.\n\n\r\n\x05\x04\0\x02\x14\x05\x12\x04\xfb\x01\
    \x08\x0e\n\r\n\x05\x04\0\x02\x14\x01\x12\x04\xfb\x01\x0f/\n\r\n\x05\x04\
    \0\x02\x14\x03\x12\x04\xfb\x0123\np\n\x03\x04\0\t\x12\x04\xff\x01\x08\
    \x1e\x1ac\x20removed:\x20Node\x20parse\x20=\x2012;\x20Node\x20validate\
    \x20=\x2013;\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Id128\x20server_id\
    \x20=\x201;\x20Id128\x20client_id\x20=\x202;\n\n\x0c\n\x04\x04\0\t\0\x12\
    \x04\xff\x01\x11\x13\n\r\n\x05\x04\0\t\0\x01\x12\x04\xff\x01\x11\x13\n\r\
    \n\x05\x04\0\t\0\x02\x12\x04\xff\x01\x11\x13\n\x0c\n\x04\x04\0\t\x01\x12\
    \x04\xff\x01\x15\x17\n\r\n\x05\x04\0\t\x01\x01\x12\x04\xff\x01\x15\x17\n\
    \r\n\x05\x04\0\t\x01\x02\x12\x04\xff\x01\x15\x17\n\x0c\n\x04\x04\0\t\x02\
    \x12\x04\xff\x01\x19\x1a\n\r\n\x05\x04\0\t\x02\x01\x12\x04\xff\x01\x19\
    \x1a\n\r\n\x05\x04\0\t\x02\x02\x12\x04\xff\x01\x19\x1a\n\x0c\n\x04\x04\0\
    \t\x03\x12\x04\xff\x01\x1c\x1d\n\r\n\x05\x04\0\t\x03\x01\x12\x04\xff\x01\
    \x1c\x1d\n\r\n\x05\x04\0\t\x03\x02\x12\x04\xff\x01\x1c\x1d\n\x91\x05\n\
    \x02\x04\x01\x12\x06\x89\x02\0\x9d\x02\x01\x1a\x82\x05\x20The\x20`servic\
    e`\x20value\x20embedded\x20within\x20the\x20header\x20key\x20is\x20not\
    \x20guaranteed\x20to\x20contain\x20an\x20actual\x20service,\n\x20and,\
    \x20in\x20most\x20cases,\x20the\x20service\x20information\x20is\x20trust\
    ed\x20to\x20come\x20from\x20upstream\x20processing.\x20If\x20the\n\x20se\
    rvice\x20_is_\x20specified\x20in\x20this\x20header,\x20then\x20it\x20is\
    \x20checked\x20to\x20match\x20the\x20context\x20that\x20is\x20reporting\
    \x20it.\n\x20Otherwise,\x20the\x20service\x20information\x20is\x20deduce\
    d\x20from\x20the\x20token\x20context\x20of\x20the\x20reporter\x20and\x20\
    then\x20sent\n\x20along\x20via\x20other\x20mechanisms\x20(in\x20Kafka,\
    \x20the\x20`ReportKafkaKey).\x20The\x20other\x20information\x20(hostname\
    ,\n\x20agent_version,\x20etc.)\x20is\x20sent\x20by\x20the\x20Apollo\x20E\
    ngine\x20Reporting\x20agent,\x20but\x20we\x20do\x20not\x20currently\x20s\
    ave\x20that\n\x20information\x20to\x20any\x20of\x20our\x20persistent\x20\
    storage.\n\n\x0b\n\x03\x04\x01\x01\x12\x04\x89\x02\x08\x14\n(\n\x04\x04\
    \x01\x02\0\x12\x04\x8b\x02\x08\x1c\x1a\x1a\x20eg\x20\"host-01.example.co\
    m\"\n\n\r\n\x05\x04\x01\x02\0\x05\x12\x04\x8b\x02\x08\x0e\n\r\n\x05\x04\
    \x01\x02\0\x01\x12\x04\x8b\x02\x0f\x17\n\r\n\x05\x04\x01\x02\0\x03\x12\
    \x04\x8b\x02\x1a\x1b\n2\n\x04\x04\x01\x02\x01\x12\x04\x8e\x02\x08!\x1a\
    \x18\x20eg\x20\"engineproxy\x200.1.0\"\n\"\n\x20required\n\n\r\n\x05\x04\
    \x01\x02\x01\x05\x12\x04\x8e\x02\x08\x0e\n\r\n\x05\x04\x01\x02\x01\x01\
    \x12\x04\x8e\x02\x0f\x1c\n\r\n\x05\x04\x01\x02\x01\x03\x12\x04\x8e\x02\
    \x1f\x20\n]\n\x04\x04\x01\x02\x02\x12\x04\x90\x02\x08#\x1aO\x20eg\x20\"p\
    rod-4279-20160804T065423Z-5-g3cf0aa8\"\x20(taken\x20from\x20`git\x20desc\
    ribe\x20--tags`)\n\n\r\n\x05\x04\x01\x02\x02\x05\x12\x04\x90\x02\x08\x0e\
    \n\r\n\x05\x04\x01\x02\x02\x01\x12\x04\x90\x02\x0f\x1e\n\r\n\x05\x04\x01\
    \x02\x02\x03\x12\x04\x90\x02!\"\n\x20\n\x04\x04\x01\x02\x03\x12\x04\x92\
    \x02\x08#\x1a\x12\x20eg\x20\"node\x20v4.6.0\"\n\n\r\n\x05\x04\x01\x02\
    \x03\x05\x12\x04\x92\x02\x08\x0e\n\r\n\x05\x04\x01\x02\x03\x01\x12\x04\
    \x92\x02\x0f\x1e\n\r\n\x05\x04\x01\x02\x03\x03\x12\x04\x92\x02!\"\n^\n\
    \x04\x04\x01\x02\x04\x12\x04\x94\x02\x08\x19\x1aP\x20eg\x20\"Linux\x20bo\
    x\x204.6.5-1-ec2\x20#1\x20SMP\x20Mon\x20Aug\x201\x2002:31:38\x20PDT\x202\
    016\x20x86_64\x20GNU/Linux\"\n\n\r\n\x05\x04\x01\x02\x04\x05\x12\x04\x94\
    \x02\x08\x0e\n\r\n\x05\x04\x01\x02\x04\x01\x12\x04\x94\x02\x0f\x14\n\r\n\
    \x05\x04\x01\x02\x04\x03\x12\x04\x94\x02\x17\x18\n$\n\x04\x04\x01\x02\
    \x05\x12\x04\x96\x02\x08\x1f\x1a\x16\x20eg\x20\"current\",\x20\"prod\"\n\
    \n\r\n\x05\x04\x01\x02\x05\x05\x12\x04\x96\x02\x08\x0e\n\r\n\x05\x04\x01\
    \x02\x05\x01\x12\x04\x96\x02\x0f\x19\n\r\n\x05\x04\x01\x02\x05\x03\x12\
    \x04\x96\x02\x1c\x1e\n\xc6\x01\n\x04\x04\x01\x02\x06\x12\x04\x9a\x02\x08\
    )\x1a\xb7\x01\x20An\x20id\x20that\x20is\x20used\x20to\x20represent\x20th\
    e\x20schema\x20to\x20Apollo\x20Graph\x20Manager\n\x20Using\x20this\x20in\
    \x20place\x20of\x20what\x20used\x20to\x20be\x20schema_hash,\x20since\x20\
    that\x20is\x20no\x20longer\n\x20attached\x20to\x20a\x20schema\x20in\x20t\
    he\x20backend.\n\n\r\n\x05\x04\x01\x02\x06\x05\x12\x04\x9a\x02\x08\x0e\n\
    \r\n\x05\x04\x01\x02\x06\x01\x12\x04\x9a\x02\x0f#\n\r\n\x05\x04\x01\x02\
    \x06\x03\x12\x04\x9a\x02&(\n*\n\x03\x04\x01\t\x12\x04\x9c\x02\x08\x13\"\
    \x1d\x20removed\x20string\x20service\x20=\x203;\n\n\x0c\n\x04\x04\x01\t\
    \0\x12\x04\x9c\x02\x11\x12\n\r\n\x05\x04\x01\t\0\x01\x12\x04\x9c\x02\x11\
    \x12\n\r\n\x05\x04\x01\t\0\x02\x12\x04\x9c\x02\x11\x12\n\x0c\n\x02\x04\
    \x02\x12\x06\x9f\x02\0\xa3\x02\x01\n\x0b\n\x03\x04\x02\x01\x12\x04\x9f\
    \x02\x08\x16\n\x0c\n\x04\x04\x02\x02\0\x12\x04\xa0\x02\x081\n\r\n\x05\
    \x04\x02\x02\0\x06\x12\x04\xa0\x02\x08#\n\r\n\x05\x04\x02\x02\0\x01\x12\
    \x04\xa0\x02$,\n\r\n\x05\x04\x02\x02\0\x03\x12\x04\xa0\x02/0\n\x0c\n\x04\
    \x04\x02\x02\x01\x12\x04\xa1\x02\x08\x20\n\r\n\x05\x04\x02\x02\x01\x05\
    \x12\x04\xa1\x02\x08\x0e\n\r\n\x05\x04\x02\x02\x01\x01\x12\x04\xa1\x02\
    \x0f\x1b\n\r\n\x05\x04\x02\x02\x01\x03\x12\x04\xa1\x02\x1e\x1f\n\x0c\n\
    \x04\x04\x02\x02\x02\x12\x04\xa2\x02\x08.\n\r\n\x05\x04\x02\x02\x02\x05\
    \x12\x04\xa2\x02\x08\x0e\n\r\n\x05\x04\x02\x02\x02\x01\x12\x04\xa2\x02\
    \x0f)\n\r\n\x05\x04\x02\x02\x02\x03\x12\x04\xa2\x02,-\n\x0c\n\x02\x04\
    \x03\x12\x06\xa5\x02\0\xb2\x02\x01\n\x0b\n\x03\x04\x03\x01\x12\x04\xa5\
    \x02\x08\x19\n\x0c\n\x04\x04\x03\x02\0\x12\x04\xa6\x02\x08)\n\r\n\x05\
    \x04\x03\x02\0\x04\x12\x04\xa6\x02\x08\x10\n\r\n\x05\x04\x03\x02\0\x05\
    \x12\x04\xa6\x02\x11\x16\n\r\n\x05\x04\x03\x02\0\x01\x12\x04\xa6\x02\x17\
    $\n\r\n\x05\x04\x03\x02\0\x03\x12\x04\xa6\x02'(\n\x0c\n\x04\x04\x03\x02\
    \x01\x12\x04\xa7\x02\x08!\n\r\n\x05\x04\x03\x02\x01\x05\x12\x04\xa7\x02\
    \x08\x0e\n\r\n\x05\x04\x03\x02\x01\x01\x12\x04\xa7\x02\x0f\x1c\n\r\n\x05\
    \x04\x03\x02\x01\x03\x12\x04\xa7\x02\x1f\x20\n\x0c\n\x04\x04\x03\x02\x02\
    \x12\x04\xa8\x02\x08\x1e\n\r\n\x05\x04\x03\x02\x02\x05\x12\x04\xa8\x02\
    \x08\x0e\n\r\n\x05\x04\x03\x02\x02\x01\x12\x04\xa8\x02\x0f\x19\n\r\n\x05\
    \x04\x03\x02\x02\x03\x12\x04\xa8\x02\x1c\x1d\n\x0c\n\x04\x04\x03\x02\x03\
    \x12\x04\xa9\x02\x08(\n\r\n\x05\x04\x03\x02\x03\x05\x12\x04\xa9\x02\x08\
    \x0e\n\r\n\x05\x04\x03\x02\x03\x01\x12\x04\xa9\x02\x0f#\n\r\n\x05\x04\
    \x03\x02\x03\x03\x12\x04\xa9\x02&'\n\x0c\n\x04\x04\x03\x02\x04\x12\x04\
    \xaa\x02\x08*\n\r\n\x05\x04\x03\x02\x04\x05\x12\x04\xaa\x02\x08\x0e\n\r\
    \n\x05\x04\x03\x02\x04\x01\x12\x04\xaa\x02\x0f%\n\r\n\x05\x04\x03\x02\
    \x04\x03\x12\x04\xaa\x02()\n\x0c\n\x04\x04\x03\x02\x05\x12\x04\xab\x02\
    \x08/\n\r\n\x05\x04\x03\x02\x05\x04\x12\x04\xab\x02\x08\x10\n\r\n\x05\
    \x04\x03\x02\x05\x05\x12\x04\xab\x02\x11\x16\n\r\n\x05\x04\x03\x02\x05\
    \x01\x12\x04\xab\x02\x17*\n\r\n\x05\x04\x03\x02\x05\x03\x12\x04\xab\x02-\
    .\n\x0c\n\x04\x04\x03\x02\x06\x12\x04\xac\x02\x08,\n\r\n\x05\x04\x03\x02\
    \x06\x06\x12\x04\xac\x02\x08\x16\n\r\n\x05\x04\x03\x02\x06\x01\x12\x04\
    \xac\x02\x17'\n\r\n\x05\x04\x03\x02\x06\x03\x12\x04\xac\x02*+\n\x0c\n\
    \x04\x04\x03\x02\x07\x12\x04\xad\x02\x08.\n\r\n\x05\x04\x03\x02\x07\x05\
    \x12\x04\xad\x02\x08\x0e\n\r\n\x05\x04\x03\x02\x07\x01\x12\x04\xad\x02\
    \x0f)\n\r\n\x05\x04\x03\x02\x07\x03\x12\x04\xad\x02,-\n\x0c\n\x04\x04\
    \x03\x02\x08\x12\x04\xae\x02\x082\n\r\n\x05\x04\x03\x02\x08\x04\x12\x04\
    \xae\x02\x08\x10\n\r\n\x05\x04\x03\x02\x08\x05\x12\x04\xae\x02\x11\x16\n\
    \r\n\x05\x04\x03\x02\x08\x01\x12\x04\xae\x02\x17-\n\r\n\x05\x04\x03\x02\
    \x08\x03\x12\x04\xae\x0201\n\x0c\n\x04\x04\x03\x02\t\x12\x04\xaf\x02\x08\
    4\n\r\n\x05\x04\x03\x02\t\x04\x12\x04\xaf\x02\x08\x10\n\r\n\x05\x04\x03\
    \x02\t\x05\x12\x04\xaf\x02\x11\x16\n\r\n\x05\x04\x03\x02\t\x01\x12\x04\
    \xaf\x02\x17.\n\r\n\x05\x04\x03\x02\t\x03\x12\x04\xaf\x0213\n\x0c\n\x04\
    \x04\x03\x02\n\x12\x04\xb0\x02\x08/\n\r\n\x05\x04\x03\x02\n\x05\x12\x04\
    \xb0\x02\x08\x0e\n\r\n\x05\x04\x03\x02\n\x01\x12\x04\xb0\x02\x0f)\n\r\n\
    \x05\x04\x03\x02\n\x03\x12\x04\xb0\x02,.\n\x0c\n\x04\x04\x03\x02\x0b\x12\
    \x04\xb1\x02\x08.\n\r\n\x05\x04\x03\x02\x0b\x05\x12\x04\xb1\x02\x08\x0e\
    \n\r\n\x05\x04\x03\x02\x0b\x01\x12\x04\xb1\x02\x0f(\n\r\n\x05\x04\x03\
    \x02\x0b\x03\x12\x04\xb1\x02+-\n\x0c\n\x02\x04\x04\x12\x06\xb4\x02\0\xb8\
    \x02\x01\n\x0b\n\x03\x04\x04\x01\x12\x04\xb4\x02\x08\x14\n\x0c\n\x04\x04\
    \x04\x02\0\x12\x04\xb5\x02\x08'\n\r\n\x05\x04\x04\x02\0\x05\x12\x04\xb5\
    \x02\x08\x0e\n\r\n\x05\x04\x04\x02\0\x01\x12\x04\xb5\x02\x0f\"\n\r\n\x05\
    \x04\x04\x02\0\x03\x12\x04\xb5\x02%&\n\x0c\n\x04\x04\x04\x02\x01\x12\x04\
    \xb6\x02\x08\x1f\n\r\n\x05\x04\x04\x02\x01\x05\x12\x04\xb6\x02\x08\x0e\n\
    \r\n\x05\x04\x04\x02\x01\x01\x12\x04\xb6\x02\x0f\x1a\n\r\n\x05\x04\x04\
    \x02\x01\x03\x12\x04\xb6\x02\x1d\x1e\n\x0c\n\x04\x04\x04\x02\x02\x12\x04\
    \xb7\x02\x08\"\n\r\n\x05\x04\x04\x02\x02\x05\x12\x04\xb7\x02\x08\x0e\n\r\
    \n\x05\x04\x04\x02\x02\x01\x12\x04\xb7\x02\x0f\x1d\n\r\n\x05\x04\x04\x02\
    \x02\x03\x12\x04\xb7\x02\x20!\n\x0c\n\x02\x04\x05\x12\x06\xba\x02\0\xbd\
    \x02\x01\n\x0b\n\x03\x04\x05\x01\x12\x04\xba\x02\x08'\n\x0c\n\x04\x04\
    \x05\x02\0\x12\x04\xbb\x02\x082\n\r\n\x05\x04\x05\x02\0\x06\x12\x04\xbb\
    \x02\x08\x19\n\r\n\x05\x04\x05\x02\0\x01\x12\x04\xbb\x02\x1a-\n\r\n\x05\
    \x04\x05\x02\0\x03\x12\x04\xbb\x0201\n\x0c\n\x04\x04\x05\x02\x01\x12\x04\
    \xbc\x02\x08!\n\r\n\x05\x04\x05\x02\x01\x06\x12\x04\xbc\x02\x08\x14\n\r\
    \n\x05\x04\x05\x02\x01\x01\x12\x04\xbc\x02\x15\x1c\n\r\n\x05\x04\x05\x02\
    \x01\x03\x12\x04\xbc\x02\x1f\x20\n\x0c\n\x02\x04\x06\x12\x06\xbf\x02\0\
    \xc2\x02\x01\n\x0b\n\x03\x04\x06\x01\x12\x04\xbf\x02\x08\x1f\n\x0c\n\x04\
    \x04\x06\x02\0\x12\x04\xc0\x02\x08!\n\r\n\x05\x04\x06\x02\0\x06\x12\x04\
    \xc0\x02\x08\x14\n\r\n\x05\x04\x06\x02\0\x01\x12\x04\xc0\x02\x15\x1c\n\r\
    \n\x05\x04\x06\x02\0\x03\x12\x04\xc0\x02\x1f\x20\n\x0c\n\x04\x04\x06\x02\
    \x01\x12\x04\xc1\x02\x080\n\r\n\x05\x04\x06\x02\x01\x06\x12\x04\xc1\x02\
    \x08\x1d\n\r\n\x05\x04\x06\x02\x01\x01\x12\x04\xc1\x02\x1e+\n\r\n\x05\
    \x04\x06\x02\x01\x03\x12\x04\xc1\x02./\n\x0c\n\x02\x04\x07\x12\x06\xc4\
    \x02\0\xcb\x02\x01\n\x0b\n\x03\x04\x07\x01\x12\x04\xc4\x02\x08\x11\n=\n\
    \x04\x04\x07\x02\0\x12\x04\xc5\x02\x08\x1f\"/\x20required;\x20eg\x20\"St\
    ring!\"\x20for\x20User.email:String!\n\n\r\n\x05\x04\x07\x02\0\x05\x12\
    \x04\xc5\x02\x08\x0e\n\r\n\x05\x04\x07\x02\0\x01\x12\x04\xc5\x02\x0f\x1a\
    \n\r\n\x05\x04\x07\x02\0\x03\x12\x04\xc5\x02\x1d\x1e\n\x0c\n\x04\x04\x07\
    \x02\x01\x12\x04\xc6\x02\x08\x20\n\r\n\x05\x04\x07\x02\x01\x05\x12\x04\
    \xc6\x02\x08\x0e\n\r\n\x05\x04\x07\x02\x01\x01\x12\x04\xc6\x02\x0f\x1b\n\
    \r\n\x05\x04\x07\x02\x01\x03\x12\x04\xc6\x02\x1e\x1f\n\x0c\n\x04\x04\x07\
    \x02\x02\x12\x04\xc7\x02\x08\x19\n\r\n\x05\x04\x07\x02\x02\x05\x12\x04\
    \xc7\x02\x08\x0e\n\r\n\x05\x04\x07\x02\x02\x01\x12\x04\xc7\x02\x0f\x14\n\
    \r\n\x05\x04\x07\x02\x02\x03\x12\x04\xc7\x02\x17\x18\n\x0c\n\x04\x04\x07\
    \x02\x03\x12\x04\xc8\x02\x08.\n\r\n\x05\x04\x07\x02\x03\x05\x12\x04\xc8\
    \x02\x08\x0e\n\r\n\x05\x04\x07\x02\x03\x01\x12\x04\xc8\x02\x0f)\n\r\n\
    \x05\x04\x07\x02\x03\x03\x12\x04\xc8\x02,-\n:\n\x04\x04\x07\x02\x04\x12\
    \x04\xc9\x02\x08)\",\x20Duration\x20histogram;\x20see\x20docs/histograms\
    .md\n\n\r\n\x05\x04\x07\x02\x04\x04\x12\x04\xc9\x02\x08\x10\n\r\n\x05\
    \x04\x07\x02\x04\x05\x12\x04\xc9\x02\x11\x16\n\r\n\x05\x04\x07\x02\x04\
    \x01\x12\x04\xc9\x02\x17$\n\r\n\x05\x04\x07\x02\x04\x03\x12\x04\xc9\x02'\
    (\n\x0b\n\x03\x04\x07\t\x12\x04\xca\x02\x08\x19\n\x0c\n\x04\x04\x07\t\0\
    \x12\x04\xca\x02\x11\x12\n\r\n\x05\x04\x07\t\0\x01\x12\x04\xca\x02\x11\
    \x12\n\r\n\x05\x04\x07\t\0\x02\x12\x04\xca\x02\x11\x12\n\x0c\n\x04\x04\
    \x07\t\x01\x12\x04\xca\x02\x14\x15\n\r\n\x05\x04\x07\t\x01\x01\x12\x04\
    \xca\x02\x14\x15\n\r\n\x05\x04\x07\t\x01\x02\x12\x04\xca\x02\x14\x15\n\
    \x0c\n\x04\x04\x07\t\x02\x12\x04\xca\x02\x17\x18\n\r\n\x05\x04\x07\t\x02\
    \x01\x12\x04\xca\x02\x17\x18\n\r\n\x05\x04\x07\t\x02\x02\x12\x04\xca\x02\
    \x17\x18\n\x0c\n\x02\x04\x08\x12\x06\xcd\x02\0\xd1\x02\x01\n\x0b\n\x03\
    \x04\x08\x01\x12\x04\xcd\x02\x08\x10\n:\n\x04\x04\x08\x02\0\x12\x04\xcf\
    \x02\x082\x1a,\x20Key\x20is\x20(eg)\x20\"email\"\x20for\x20User.email:St\
    ring!\n\n\r\n\x05\x04\x08\x02\0\x06\x12\x04\xcf\x02\x08\x1e\n\r\n\x05\
    \x04\x08\x02\0\x01\x12\x04\xcf\x02\x1f-\n\r\n\x05\x04\x08\x02\0\x03\x12\
    \x04\xcf\x0201\n\x0b\n\x03\x04\x08\t\x12\x04\xd0\x02\x08\x16\n\x0c\n\x04\
    \x04\x08\t\0\x12\x04\xd0\x02\x11\x12\n\r\n\x05\x04\x08\t\0\x01\x12\x04\
    \xd0\x02\x11\x12\n\r\n\x05\x04\x08\t\0\x02\x12\x04\xd0\x02\x11\x12\n\x0c\
    \n\x04\x04\x08\t\x01\x12\x04\xd0\x02\x14\x15\n\r\n\x05\x04\x08\t\x01\x01\
    \x12\x04\xd0\x02\x14\x15\n\r\n\x05\x04\x08\t\x01\x02\x12\x04\xd0\x02\x14\
    \x15\n\x0c\n\x02\x04\t\x12\x06\xd3\x02\0\xd6\x02\x01\n\x0b\n\x03\x04\t\
    \x01\x12\x04\xd3\x02\x08\r\n;\n\x04\x04\t\x02\0\x12\x04\xd4\x02\x08\x18\
    \"-\x20required;\x20eg\x20\"email\"\x20for\x20User.email:String!\n\n\r\n\
    \x05\x04\t\x02\0\x05\x12\x04\xd4\x02\x08\x0e\n\r\n\x05\x04\t\x02\0\x01\
    \x12\x04\xd4\x02\x0f\x13\n\r\n\x05\x04\t\x02\0\x03\x12\x04\xd4\x02\x16\
    \x17\n=\n\x04\x04\t\x02\x01\x12\x04\xd5\x02\x08\x1f\"/\x20required;\x20e\
    g\x20\"String!\"\x20for\x20User.email:String!\n\n\r\n\x05\x04\t\x02\x01\
    \x05\x12\x04\xd5\x02\x08\x0e\n\r\n\x05\x04\t\x02\x01\x01\x12\x04\xd5\x02\
    \x0f\x1a\n\r\n\x05\x04\t\x02\x01\x03\x12\x04\xd5\x02\x1d\x1e\n\x0c\n\x02\
    \x04\n\x12\x06\xd8\x02\0\xdb\x02\x01\n\x0b\n\x03\x04\n\x01\x12\x04\xd8\
    \x02\x08\x0c\n:\n\x04\x04\n\x02\0\x12\x04\xd9\x02\x08\x18\",\x20required\
    ;\x20eg\x20\"User\"\x20for\x20User.email:String!\n\n\r\n\x05\x04\n\x02\0\
    \x05\x12\x04\xd9\x02\x08\x0e\n\r\n\x05\x04\n\x02\0\x01\x12\x04\xd9\x02\
    \x0f\x13\n\r\n\x05\x04\n\x02\0\x03\x12\x04\xd9\x02\x16\x17\n\x0c\n\x04\
    \x04\n\x02\x01\x12\x04\xda\x02\x08!\n\r\n\x05\x04\n\x02\x01\x04\x12\x04\
    \xda\x02\x08\x10\n\r\n\x05\x04\n\x02\x01\x06\x12\x04\xda\x02\x11\x16\n\r\
    \n\x05\x04\n\x02\x01\x01\x12\x04\xda\x02\x17\x1c\n\r\n\x05\x04\n\x02\x01\
    \x03\x12\x04\xda\x02\x1f\x20\n\x8f\x05\n\x02\x04\x0b\x12\x06\xe5\x02\0\
    \xf7\x02\x01\x1a\x80\x05\x20This\x20is\x20the\x20top-level\x20message\
    \x20used\x20by\x20the\x20new\x20traces\x20ingress.\x20This\n\x20is\x20de\
    signed\x20for\x20the\x20apollo-engine-reporting\x20TypeScript\x20agent\
    \x20and\x20will\n\x20eventually\x20be\x20documented\x20as\x20a\x20public\
    \x20ingress\x20API.\x20This\x20message\x20consists\n\x20solely\x20of\x20\
    traces;\x20the\x20equivalent\x20of\x20the\x20StatsReport\x20is\x20automa\
    tically\n\x20generated\x20server-side\x20from\x20this\x20message.\x20Age\
    nt\x20should\x20either\x20send\x20a\x20trace\x20or\x20include\x20it\x20i\
    n\x20the\x20stats\n\x20for\x20every\x20request\x20in\x20this\x20report.\
    \x20Generally,\x20buffering\x20up\x20until\x20a\x20large\n\x20size\x20ha\
    s\x20been\x20reached\x20(say,\x204MB)\x20or\x205-10\x20seconds\x20has\
    \x20passed\x20is\x20appropriate.\n\x20This\x20message\x20used\x20to\x20b\
    e\x20know\x20as\x20FullTracesReport,\x20but\x20got\x20renamed\x20since\
    \x20it\x20isn't\x20just\x20for\x20traces\x20anymore\n\n\x0b\n\x03\x04\
    \x0b\x01\x12\x04\xe5\x02\x08\x0e\n\x0c\n\x04\x04\x0b\x02\0\x12\x04\xe6\
    \x02\x08\x20\n\r\n\x05\x04\x0b\x02\0\x06\x12\x04\xe6\x02\x08\x14\n\r\n\
    \x05\x04\x0b\x02\0\x01\x12\x04\xe6\x02\x15\x1b\n\r\n\x05\x04\x0b\x02\0\
    \x03\x12\x04\xe6\x02\x1e\x1f\n\xb6\x03\n\x04\x04\x0b\x02\x01\x12\x04\xf0\
    \x02\x089\x1a\xa7\x03\x20key\x20is\x20statsReportKey\x20(#\x20operationN\
    ame\\nsignature)\x20Note\x20that\x20the\x20nested\n\x20traces\x20will\
    \x20*not*\x20have\x20a\x20signature\x20or\x20details.operationName\x20(b\
    ecause\x20the\n\x20key\x20is\x20adequate).\n\n\x20We\x20also\x20assume\
    \x20that\x20traces\x20don't\x20have\n\x20legacy_per_query_implicit_opera\
    tion_name,\x20and\x20we\x20don't\x20require\x20them\x20to\x20have\n\x20d\
    etails.raw_query\x20(which\x20would\x20consume\x20a\x20lot\x20of\x20spac\
    e\x20and\x20has\x20privacy/data\n\x20access\x20issues,\x20and\x20isn't\
    \x20currently\x20exposed\x20by\x20our\x20app\x20anyway).\n\n\r\n\x05\x04\
    \x0b\x02\x01\x06\x12\x04\xf0\x02\x08#\n\r\n\x05\x04\x0b\x02\x01\x01\x12\
    \x04\xf0\x02$4\n\r\n\x05\x04\x0b\x02\x01\x03\x12\x04\xf0\x0278\n\xf8\x02\
    \n\x04\x04\x0b\x02\x02\x12\x04\xf6\x02\x08/\x1a\xc0\x02\x20This\x20is\
    \x20the\x20time\x20that\x20the\x20requests\x20in\x20this\x20trace\x20are\
    \x20considered\x20to\x20have\x20taken\x20place\n\x20If\x20this\x20field\
    \x20is\x20not\x20present\x20the\x20max\x20of\x20the\x20end_time\x20of\
    \x20each\x20trace\x20will\x20be\x20used\x20instead.\n\x20If\x20there\x20\
    are\x20no\x20traces\x20and\x20no\x20end_time\x20present\x20the\x20report\
    \x20will\x20not\x20be\x20able\x20to\x20be\x20processed.\n\x20Note:\x20Th\
    is\x20will\x20override\x20the\x20end_time\x20from\x20traces.\n\"'\x20req\
    uired\x20if\x20no\x20traces\x20in\x20this\x20message\n\n\r\n\x05\x04\x0b\
    \x02\x02\x06\x12\x04\xf6\x02\x08!\n\r\n\x05\x04\x0b\x02\x02\x01\x12\x04\
    \xf6\x02\"*\n\r\n\x05\x04\x0b\x02\x02\x03\x12\x04\xf6\x02-.\n\x0c\n\x02\
    \x04\x0c\x12\x06\xf9\x02\0\xfe\x02\x01\n\x0b\n\x03\x04\x0c\x01\x12\x04\
    \xf9\x02\x08\x1b\n\x0c\n\x04\x04\x0c\x02\0\x12\x04\xfa\x02\x08!\n\r\n\
    \x05\x04\x0c\x02\0\x06\x12\x04\xfa\x02\x08\x14\n\r\n\x05\x04\x0c\x02\0\
    \x01\x12\x04\xfa\x02\x15\x1c\n\r\n\x05\x04\x0c\x02\0\x03\x12\x04\xfa\x02\
    \x1f\x20\n\x0c\n\x04\x04\x0c\x02\x01\x12\x04\xfb\x02\x082\n\r\n\x05\x04\
    \x0c\x02\x01\x06\x12\x04\xfb\x02\x08\x19\n\r\n\x05\x04\x0c\x02\x01\x01\
    \x12\x04\xfb\x02\x1a-\n\r\n\x05\x04\x0c\x02\x01\x03\x12\x04\xfb\x0201\n!\
    \n\x04\x04\x0c\x02\x02\x12\x04\xfd\x02\x080\x1a\x13\x20Key\x20is\x20type\
    \x20name.\n\n\r\n\x05\x04\x0c\x02\x02\x06\x12\x04\xfd\x02\x08\x1d\n\r\n\
    \x05\x04\x0c\x02\x02\x01\x12\x04\xfd\x02\x1e+\n\r\n\x05\x04\x0c\x02\x02\
    \x03\x12\x04\xfd\x02./\no\n\x02\x04\r\x12\x06\x81\x03\0\x84\x03\x01\x1aa\
    \x20A\x20sequence\x20of\x20traces\x20and\x20stats.\x20An\x20individual\
    \x20trace\x20should\x20either\x20be\x20counted\x20as\x20a\x20stat\x20or\
    \x20trace\n\n\x0b\n\x03\x04\r\x01\x12\x04\x81\x03\x08\x16\n\x0c\n\x04\
    \x04\r\x02\0\x12\x04\x82\x03\x08!\n\r\n\x05\x04\r\x02\0\x04\x12\x04\x82\
    \x03\x08\x10\n\r\n\x05\x04\r\x02\0\x06\x12\x04\x82\x03\x11\x16\n\r\n\x05\
    \x04\r\x02\0\x01\x12\x04\x82\x03\x17\x1c\n\r\n\x05\x04\r\x02\0\x03\x12\
    \x04\x82\x03\x1f\x20\n\x0c\n\x04\x04\r\x02\x01\x12\x04\x83\x03\x08<\n\r\
    \n\x05\x04\r\x02\x01\x04\x12\x04\x83\x03\x08\x10\n\r\n\x05\x04\r\x02\x01\
    \x06\x12\x04\x83\x03\x11$\n\r\n\x05\x04\r\x02\x01\x01\x12\x04\x83\x03%7\
    \n\r\n\x05\x04\r\x02\x01\x03\x12\x04\x83\x03:;b\x06proto3\
";

static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<
    ::protobuf::descriptor::FileDescriptorProto,
> = ::protobuf::rt::LazyV2::INIT;

fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto {
    ::protobuf::parse_from_bytes(file_descriptor_proto_data).unwrap()
}

pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
    file_descriptor_proto_lazy.get(|| parse_descriptor_proto())
}