async-graphql-extension-apollo-tracing 3.0.1

An async_graphql extension to send traces & metrics to Apollo Studio
// 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)]
#![cfg_attr(rustfmt, rustfmt_skip)]

#![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 `brevz/apollo/apollo.proto`

use protobuf::Message;

/// 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,
    // 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;
    }

    // .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())
    }

    // .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())
    }

    // .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())
    }

    // .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())
    }

    // .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;
    }
}

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;
                },
                _ => {
                    ::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;
        }
        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)?;
        }
        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 },
            ));
            ::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.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()
    }

    // .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 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 .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())
    }

    // 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)?;
                },
                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);
        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)?;
        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_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.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 .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()
    }

    // .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 .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 .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())
    }

    // .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 .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 .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()
    }

    // .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()
        }
    }

    // .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()
        }
    }

    // .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()
        }
    }

    // .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 .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 .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;
    }

    // .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 .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())
    }

    // .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 graph_ref: ::std::string::String,
    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 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 graph_ref = 12;


    pub fn get_graph_ref(&self) -> &str {
        &self.graph_ref
    }
    pub fn clear_graph_ref(&mut self) {
        self.graph_ref.clear();
    }

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

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

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

    // 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 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 {
                12 => {
                    ::protobuf::rt::read_singular_proto3_string_into(wire_type, is, &mut self.graph_ref)?;
                },
                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)?;
                },
                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.graph_ref.is_empty() {
            my_size += ::protobuf::rt::string_size(12, &self.graph_ref);
        }
        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.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.graph_ref.is_empty() {
            os.write_string(12, &self.graph_ref)?;
        }
        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.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>(
                "graph_ref",
                |m: &ReportHeader| { &m.graph_ref },
                |m: &mut ReportHeader| { &mut m.graph_ref },
            ));
            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>(
                "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.graph_ref.clear();
        self.hostname.clear();
        self.agent_version.clear();
        self.service_version.clear();
        self.runtime_version.clear();
        self.uname.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 .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 sint64 latency_count = 13;


    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 sint64 cache_latency_count = 14;


    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())
    }

    // .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 sint64 public_cache_ttl_count = 15;


    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 sint64 private_cache_ttl_count = 16;


    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 {
                13 => {
                    ::protobuf::rt::read_repeated_sint64_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;
                },
                14 => {
                    ::protobuf::rt::read_repeated_sint64_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;
                },
                15 => {
                    ::protobuf::rt::read_repeated_sint64_into(wire_type, is, &mut self.public_cache_ttl_count)?;
                },
                16 => {
                    ::protobuf::rt::read_repeated_sint64_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_varint_zigzag_size(13, *value);
        };
        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_varint_zigzag_size(14, *value);
        };
        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_varint_zigzag_size(15, *value);
        };
        for value in &self.private_cache_ttl_count {
            my_size += ::protobuf::rt::value_varint_zigzag_size(16, *value);
        };
        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_sint64(13, *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_sint64(14, *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_sint64(15, *v)?;
        };
        for v in &self.private_cache_ttl_count {
            os.write_sint64(16, *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::ProtobufTypeSint64>(
                "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::ProtobufTypeSint64>(
                "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::ProtobufTypeSint64>(
                "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::ProtobufTypeSint64>(
                "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()
    }

    // .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())
    }

    // .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()
    }

    // .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 .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 sint64 latency_count = 9;


    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;
                },
                9 => {
                    ::protobuf::rt::read_repeated_sint64_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_varint_zigzag_size(9, *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<()> {
        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_sint64(9, *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::ProtobufTypeSint64>(
                "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 .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 .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()
    }

    // .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 .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()
    }

    // .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())
    }

    // .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 .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>,
    pub internal_traces_contributing_to_stats: ::protobuf::RepeatedField<Trace>,
    // 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 .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 .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())
    }

    // repeated .Trace internal_traces_contributing_to_stats = 3;


    pub fn get_internal_traces_contributing_to_stats(&self) -> &[Trace] {
        &self.internal_traces_contributing_to_stats
    }
    pub fn clear_internal_traces_contributing_to_stats(&mut self) {
        self.internal_traces_contributing_to_stats.clear();
    }

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

    // Mutable pointer to the field.
    pub fn mut_internal_traces_contributing_to_stats(&mut self) -> &mut ::protobuf::RepeatedField<Trace> {
        &mut self.internal_traces_contributing_to_stats
    }

    // Take field
    pub fn take_internal_traces_contributing_to_stats(&mut self) -> ::protobuf::RepeatedField<Trace> {
        ::std::mem::replace(&mut self.internal_traces_contributing_to_stats, ::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;
            }
        };
        for v in &self.internal_traces_contributing_to_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_message_into(wire_type, is, &mut self.trace)?;
                },
                2 => {
                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.stats_with_context)?;
                },
                3 => {
                    ::protobuf::rt::read_repeated_message_into(wire_type, is, &mut self.internal_traces_contributing_to_stats)?;
                },
                _ => {
                    ::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;
        };
        for value in &self.internal_traces_contributing_to_stats {
            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)?;
        };
        for v in &self.internal_traces_contributing_to_stats {
            os.write_tag(3, ::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 },
            ));
            fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage<Trace>>(
                "internal_traces_contributing_to_stats",
                |m: &TracesAndStats| { &m.internal_traces_contributing_to_stats },
                |m: &mut TracesAndStats| { &mut m.internal_traces_contributing_to_stats },
            ));
            ::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.internal_traces_contributing_to_stats.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\x19brevz/apollo/apollo.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\
    \xcb\x1a\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\x0bduration_ns\x18\
    \x0b\x20\x01(\x04R\ndurationNs\x12\x1f\n\x04root\x18\x0e\x20\x01(\x0b2\
    \x0b.Trace.NodeR\x04root\x12\x1c\n\tsignature\x18\x13\x20\x01(\tR\tsigna\
    ture\x128\n\x17unexecutedOperationBody\x18\x1b\x20\x01(\tR\x17unexecuted\
    OperationBody\x128\n\x17unexecutedOperationName\x18\x1c\x20\x01(\tR\x17u\
    nexecutedOperationName\x12(\n\x07details\x18\x06\x20\x01(\x0b2\x0e.Trace\
    .DetailsR\x07details\x12\x1f\n\x0bclient_name\x18\x07\x20\x01(\tR\nclien\
    tName\x12%\n\x0eclient_version\x18\x08\x20\x01(\tR\rclientVersion\x12%\n\
    \x0eclient_address\x18\t\x20\x01(\tR\rclientAddress\x12.\n\x13client_ref\
    erence_id\x18\x17\x20\x01(\tR\x11clientReferenceId\x12\x1f\n\x04http\x18\
    \n\x20\x01(\x0b2\x0b.Trace.HTTPR\x04http\x125\n\x0ccache_policy\x18\x12\
    \x20\x01(\x0b2\x12.Trace.CachePolicyR\x0bcachePolicy\x123\n\nquery_plan\
    \x18\x1a\x20\x01(\x0b2\x14.Trace.QueryPlanNodeR\tqueryPlan\x12/\n\x14ful\
    l_query_cache_hit\x18\x14\x20\x01(\x08R\x11fullQueryCacheHit\x12.\n\x13p\
    ersisted_query_hit\x18\x15\x20\x01(\x08R\x11persistedQueryHit\x128\n\x18\
    persisted_query_register\x18\x16\x20\x01(\x08R\x16persistedQueryRegister\
    \x121\n\x14registered_operation\x18\x18\x20\x01(\x08R\x13registeredOpera\
    tion\x12/\n\x13forbidden_operation\x18\x19\x20\x01(\x08R\x12forbiddenOpe\
    ration\x1a\x8a\x01\n\x0bCachePolicy\x12.\n\x05scope\x18\x01\x20\x01(\x0e\
    2\x18.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\xbc\x01\n\x07Det\
    ails\x12H\n\x0evariables_json\x18\x04\x20\x03(\x0b2!.Trace.Details.Varia\
    blesJsonEntryR\rvariablesJson\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\x05value:\x02\
    8\x01\x1a{\n\x05Error\x12\x18\n\x07message\x18\x01\x20\x01(\tR\x07messag\
    e\x12+\n\x08location\x18\x02\x20\x03(\x0b2\x0f.Trace.LocationR\x08locati\
    on\x12\x17\n\x07time_ns\x18\x03\x20\x01(\x04R\x06timeNs\x12\x12\n\x04jso\
    n\x18\x04\x20\x01(\tR\x04json\x1a\x8e\x05\n\x04HTTP\x12*\n\x06method\x18\
    \x01\x20\x01(\x0e2\x12.Trace.HTTP.MethodR\x06method\x12\x12\n\x04host\
    \x18\x02\x20\x01(\tR\x04host\x12\x12\n\x04path\x18\x03\x20\x01(\tR\x04pa\
    th\x12H\n\x0frequest_headers\x18\x04\x20\x03(\x0b2\x1f.Trace.HTTP.Reques\
    tHeadersEntryR\x0erequestHeaders\x12K\n\x10response_headers\x18\x05\x20\
    \x03(\x0b2\x20.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\x1aU\n\x13RequestHeadersEntry\x12\x10\n\x03key\x18\x01\x20\x01\
    (\tR\x03key\x12(\n\x05value\x18\x02\x20\x01(\x0b2\x12.Trace.HTTP.ValuesR\
    \x05value:\x028\x01\x1aV\n\x14ResponseHeadersEntry\x12\x10\n\x03key\x18\
    \x01\x20\x01(\tR\x03key\x12(\n\x05value\x18\x02\x20\x01(\x0b2\x12.Trace.\
    HTTP.ValuesR\x05value:\x028\x01\"w\n\x06Method\x12\x0b\n\x07UNKNOWN\x10\
    \0\x12\x0b\n\x07OPTIONS\x10\x01\x12\x07\n\x03GET\x10\x02\x12\x08\n\x04HE\
    AD\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\
    \xee\x02\n\x04Node\x12%\n\rresponse_name\x18\x01\x20\x01(\tH\0R\x0crespo\
    nseName\x12\x16\n\x05index\x18\x02\x20\x01(\rH\0R\x05index\x12.\n\x13ori\
    ginal_field_name\x18\x0e\x20\x01(\tR\x11originalFieldName\x12\x12\n\x04t\
    ype\x18\x03\x20\x01(\tR\x04type\x12\x1f\n\x0bparent_type\x18\r\x20\x01(\
    \tR\nparentType\x125\n\x0ccache_policy\x18\x05\x20\x01(\x0b2\x12.Trace.C\
    achePolicyR\x0bcachePolicy\x12\x1d\n\nstart_time\x18\x08\x20\x01(\x04R\t\
    startTime\x12\x19\n\x08end_time\x18\t\x20\x01(\x04R\x07endTime\x12\"\n\
    \x05error\x18\x0b\x20\x03(\x0b2\x0c.Trace.ErrorR\x05error\x12!\n\x05chil\
    d\x18\x0c\x20\x03(\x0b2\x0b.Trace.NodeR\x05childB\x04\n\x02idJ\x04\x08\
    \x04\x10\x05\x1a\x8b\x07\n\rQueryPlanNode\x12?\n\x08sequence\x18\x01\x20\
    \x01(\x0b2!.Trace.QueryPlanNode.SequenceNodeH\0R\x08sequence\x12?\n\x08p\
    arallel\x18\x02\x20\x01(\x0b2!.Trace.QueryPlanNode.ParallelNodeH\0R\x08p\
    arallel\x126\n\x05fetch\x18\x03\x20\x01(\x0b2\x1e.Trace.QueryPlanNode.Fe\
    tchNodeH\0R\x05fetch\x12<\n\x07flatten\x18\x04\x20\x01(\x0b2\x20.Trace.Q\
    ueryPlanNode.FlattenNodeH\0R\x07flatten\x1a:\n\x0cSequenceNode\x12*\n\
    \x05nodes\x18\x01\x20\x03(\x0b2\x14.Trace.QueryPlanNodeR\x05nodes\x1a:\n\
    \x0cParallelNode\x12*\n\x05nodes\x18\x01\x20\x03(\x0b2\x14.Trace.QueryPl\
    anNodeR\x05nodes\x1a\xa2\x02\n\tFetchNode\x12!\n\x0cservice_name\x18\x01\
    \x20\x01(\tR\x0bserviceName\x120\n\x14trace_parsing_failed\x18\x02\x20\
    \x01(\x08R\x12traceParsingFailed\x12\x1c\n\x05trace\x18\x03\x20\x01(\x0b\
    2\x06.TraceR\x05trace\x12(\n\x10sent_time_offset\x18\x04\x20\x01(\x04R\
    \x0esentTimeOffset\x127\n\tsent_time\x18\x05\x20\x01(\x0b2\x1a.google.pr\
    otobuf.TimestampR\x08sentTime\x12?\n\rreceived_time\x18\x06\x20\x01(\x0b\
    2\x1a.google.protobuf.TimestampR\x0creceivedTime\x1a\x86\x01\n\x0bFlatte\
    nNode\x12M\n\rresponse_path\x18\x01\x20\x03(\x0b2(.Trace.QueryPlanNode.R\
    esponsePathElementR\x0cresponsePath\x12(\n\x04node\x18\x02\x20\x01(\x0b2\
    \x14.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\"\
    \x8c\x02\n\x0cReportHeader\x12\x1b\n\tgraph_ref\x18\x0c\x20\x01(\tR\x08g\
    raphRef\x12\x1a\n\x08hostname\x18\x05\x20\x01(\tR\x08hostname\x12#\n\rag\
    ent_version\x18\x06\x20\x01(\tR\x0cagentVersion\x12'\n\x0fservice_versio\
    n\x18\x07\x20\x01(\tR\x0eserviceVersion\x12'\n\x0fruntime_version\x18\
    \x08\x20\x01(\tR\x0eruntimeVersion\x12\x14\n\x05uname\x18\t\x20\x01(\tR\
    \x05uname\x120\n\x14executable_schema_id\x18\x0b\x20\x01(\tR\x12executab\
    leSchemaIdJ\x04\x08\x03\x10\x04\"\xf9\x01\n\x0ePathErrorStats\x129\n\x08\
    children\x18\x01\x20\x03(\x0b2\x1d.PathErrorStats.ChildrenEntryR\x08chil\
    dren\x12!\n\x0cerrors_count\x18\x04\x20\x01(\x04R\x0berrorsCount\x12;\n\
    \x1arequests_with_errors_count\x18\x05\x20\x01(\x04R\x17requestsWithErro\
    rsCount\x1aL\n\rChildrenEntry\x12\x10\n\x03key\x18\x01\x20\x01(\tR\x03ke\
    y\x12%\n\x05value\x18\x02\x20\x01(\x0b2\x0f.PathErrorStatsR\x05value:\
    \x028\x01\"\x8a\x05\n\x11QueryLatencyStats\x12#\n\rlatency_count\x18\r\
    \x20\x03(\x12R\x0clatencyCount\x12#\n\rrequest_count\x18\x02\x20\x01(\
    \x04R\x0crequestCount\x12\x1d\n\ncache_hits\x18\x03\x20\x01(\x04R\tcache\
    Hits\x120\n\x14persisted_query_hits\x18\x04\x20\x01(\x04R\x12persistedQu\
    eryHits\x124\n\x16persisted_query_misses\x18\x05\x20\x01(\x04R\x14persis\
    tedQueryMisses\x12.\n\x13cache_latency_count\x18\x0e\x20\x03(\x12R\x11ca\
    cheLatencyCount\x129\n\x10root_error_stats\x18\x07\x20\x01(\x0b2\x0f.Pat\
    hErrorStatsR\x0erootErrorStats\x12;\n\x1arequests_with_errors_count\x18\
    \x08\x20\x01(\x04R\x17requestsWithErrorsCount\x123\n\x16public_cache_ttl\
    _count\x18\x0f\x20\x03(\x12R\x13publicCacheTtlCount\x125\n\x17private_ca\
    che_ttl_count\x18\x10\x20\x03(\x12R\x14privateCacheTtlCount\x12<\n\x1are\
    gistered_operation_count\x18\x0b\x20\x01(\x04R\x18registeredOperationCou\
    nt\x12:\n\x19forbidden_operation_count\x18\x0c\x20\x01(\x04R\x17forbidde\
    nOperationCountJ\x04\x08\x01\x10\x02J\x04\x08\x06\x10\x07J\x04\x08\t\x10\
    \nJ\x04\x08\n\x10\x0b\"\x86\x01\n\x0cStatsContext\x12.\n\x13client_refer\
    ence_id\x18\x01\x20\x01(\tR\x11clientReferenceId\x12\x1f\n\x0bclient_nam\
    e\x18\x02\x20\x01(\tR\nclientName\x12%\n\x0eclient_version\x18\x03\x20\
    \x01(\tR\rclientVersion\"\x8e\x01\n\x1fContextualizedQueryLatencyStats\
    \x12B\n\x13query_latency_stats\x18\x01\x20\x01(\x0b2\x12.QueryLatencySta\
    tsR\x11queryLatencyStats\x12'\n\x07context\x18\x02\x20\x01(\x0b2\r.Stats\
    ContextR\x07context\"\xdc\x01\n\x17ContextualizedTypeStats\x12'\n\x07con\
    text\x18\x01\x20\x01(\x0b2\r.StatsContextR\x07context\x12M\n\rper_type_s\
    tat\x18\x02\x20\x03(\x0b2).ContextualizedTypeStats.PerTypeStatEntryR\x0b\
    perTypeStat\x1aI\n\x10PerTypeStatEntry\x12\x10\n\x03key\x18\x01\x20\x01(\
    \tR\x03key\x12\x1f\n\x05value\x18\x02\x20\x01(\x0b2\t.TypeStatR\x05value\
    :\x028\x01\"\xdf\x01\n\tFieldStat\x12\x1f\n\x0breturn_type\x18\x03\x20\
    \x01(\tR\nreturnType\x12!\n\x0cerrors_count\x18\x04\x20\x01(\x04R\x0berr\
    orsCount\x12\x14\n\x05count\x18\x05\x20\x01(\x04R\x05count\x12;\n\x1areq\
    uests_with_errors_count\x18\x06\x20\x01(\x04R\x17requestsWithErrorsCount\
    \x12#\n\rlatency_count\x18\t\x20\x03(\x12R\x0clatencyCountJ\x04\x08\x01\
    \x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\t\"\
    \xa6\x01\n\x08TypeStat\x12A\n\x0eper_field_stat\x18\x03\x20\x03(\x0b2\
    \x1b.TypeStat.PerFieldStatEntryR\x0cperFieldStat\x1aK\n\x11PerFieldStatE\
    ntry\x12\x10\n\x03key\x18\x01\x20\x01(\tR\x03key\x12\x20\n\x05value\x18\
    \x02\x20\x01(\x0b2\n.FieldStatR\x05value:\x028\x01J\x04\x08\x01\x10\x02J\
    \x04\x08\x02\x10\x03\"<\n\x05Field\x12\x12\n\x04name\x18\x02\x20\x01(\tR\
    \x04name\x12\x1f\n\x0breturn_type\x18\x03\x20\x01(\tR\nreturnType\"8\n\
    \x04Type\x12\x12\n\x04name\x18\x01\x20\x01(\tR\x04name\x12\x1c\n\x05fiel\
    d\x18\x02\x20\x03(\x0b2\x06.FieldR\x05field\"\x81\x02\n\x06Report\x12%\n\
    \x06header\x18\x01\x20\x01(\x0b2\r.ReportHeaderR\x06header\x12E\n\x10tra\
    ces_per_query\x18\x05\x20\x03(\x0b2\x1b.Report.TracesPerQueryEntryR\x0et\
    racesPerQuery\x125\n\x08end_time\x18\x02\x20\x01(\x0b2\x1a.google.protob\
    uf.TimestampR\x07endTime\x1aR\n\x13TracesPerQueryEntry\x12\x10\n\x03key\
    \x18\x01\x20\x01(\tR\x03key\x12%\n\x05value\x18\x02\x20\x01(\x0b2\x0f.Tr\
    acesAndStatsR\x05value:\x028\x01\"\x98\x02\n\x13ContextualizedStats\x12'\
    \n\x07context\x18\x01\x20\x01(\x0b2\r.StatsContextR\x07context\x12B\n\
    \x13query_latency_stats\x18\x02\x20\x01(\x0b2\x12.QueryLatencyStatsR\x11\
    queryLatencyStats\x12I\n\rper_type_stat\x18\x03\x20\x03(\x0b2%.Contextua\
    lizedStats.PerTypeStatEntryR\x0bperTypeStat\x1aI\n\x10PerTypeStatEntry\
    \x12\x10\n\x03key\x18\x01\x20\x01(\tR\x03key\x12\x1f\n\x05value\x18\x02\
    \x20\x01(\x0b2\t.TypeStatR\x05value:\x028\x01\"\xcc\x01\n\x0eTracesAndSt\
    ats\x12\x1c\n\x05trace\x18\x01\x20\x03(\x0b2\x06.TraceR\x05trace\x12B\n\
    \x12stats_with_context\x18\x02\x20\x03(\x0b2\x14.ContextualizedStatsR\
    \x10statsWithContext\x12X\n%internal_traces_contributing_to_stats\x18\
    \x03\x20\x03(\x0b2\x06.TraceR!internalTracesContributingToStatsJ\xfd\x8f\
    \x01\n\x07\x12\x05\0\0\x80\x03\x01\n\x08\n\x01\x0c\x12\x03\0\0\x12\n\t\n\
    \x02\x03\0\x12\x03\x03\0)\n\x0b\n\x02\x04\0\x12\x05\x05\0\xf3\x01\x01\n\
    \n\n\x03\x04\0\x01\x12\x03\x05\x08\r\n\x0c\n\x04\x04\0\x03\0\x12\x04\x06\
    \x02\x0f\x03\n\x0c\n\x05\x04\0\x03\0\x01\x12\x03\x06\n\x15\n\x0e\n\x06\
    \x04\0\x03\0\x04\0\x12\x04\x07\x04\x0b\x05\n\x0e\n\x07\x04\0\x03\0\x04\0\
    \x01\x12\x03\x07\t\x0e\n\x0f\n\x08\x04\0\x03\0\x04\0\x02\0\x12\x03\x08\
    \x06\x12\n\x10\n\t\x04\0\x03\0\x04\0\x02\0\x01\x12\x03\x08\x06\r\n\x10\n\
    \t\x04\0\x03\0\x04\0\x02\0\x02\x12\x03\x08\x10\x11\n\x0f\n\x08\x04\0\x03\
    \0\x04\0\x02\x01\x12\x03\t\x06\x11\n\x10\n\t\x04\0\x03\0\x04\0\x02\x01\
    \x01\x12\x03\t\x06\x0c\n\x10\n\t\x04\0\x03\0\x04\0\x02\x01\x02\x12\x03\t\
    \x0f\x10\n\x0f\n\x08\x04\0\x03\0\x04\0\x02\x02\x12\x03\n\x06\x12\n\x10\n\
    \t\x04\0\x03\0\x04\0\x02\x02\x01\x12\x03\n\x06\r\n\x10\n\t\x04\0\x03\0\
    \x04\0\x02\x02\x02\x12\x03\n\x10\x11\n\r\n\x06\x04\0\x03\0\x02\0\x12\x03\
    \r\x04\x14\n\x0e\n\x07\x04\0\x03\0\x02\0\x06\x12\x03\r\x04\t\n\x0e\n\x07\
    \x04\0\x03\0\x02\0\x01\x12\x03\r\n\x0f\n\x0e\n\x07\x04\0\x03\0\x02\0\x03\
    \x12\x03\r\x12\x13\n+\n\x06\x04\0\x03\0\x02\x01\x12\x03\x0e\x04\x19\"\
    \x1c\x20use\x200\x20for\x20absent,\x20-1\x20for\x200\n\n\x0e\n\x07\x04\0\
    \x03\0\x02\x01\x05\x12\x03\x0e\x04\t\n\x0e\n\x07\x04\0\x03\0\x02\x01\x01\
    \x12\x03\x0e\n\x14\n\x0e\n\x07\x04\0\x03\0\x02\x01\x03\x12\x03\x0e\x17\
    \x18\n\x0c\n\x04\x04\0\x03\x01\x12\x04\x11\x02\x1d\x03\n\x0c\n\x05\x04\0\
    \x03\x01\x01\x12\x03\x11\n\x11\n\xf9\x01\n\x06\x04\0\x03\x01\x02\0\x12\
    \x03\x16\x04+\x1a\xe9\x01\x20The\x20variables\x20associated\x20with\x20t\
    his\x20query\x20(unless\x20the\x20reporting\x20agent\x20is\n\x20configur\
    ed\x20to\x20keep\x20them\x20all\x20private).\x20Values\x20are\x20JSON:\
    \x20ie,\x20strings\x20are\n\x20enclosed\x20in\x20double\x20quotes,\x20et\
    c.\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\x16\
    \x04\x17\n\x0e\n\x07\x04\0\x03\x01\x02\0\x01\x12\x03\x16\x18&\n\x0e\n\
    \x07\x04\0\x03\x01\x02\0\x03\x12\x03\x16)*\n\xd8\x01\n\x06\x04\0\x03\x01\
    \x02\x01\x12\x03\x1c\x04\x1e\x1a\xc8\x01\x20This\x20is\x20deprecated\x20\
    and\x20only\x20used\x20for\x20legacy\x20applications\n\x20don't\x20inclu\
    de\x20this\x20in\x20traces\x20inside\x20a\x20FullTracesReport;\x20the\
    \x20operation\n\x20name\x20for\x20these\x20traces\x20comes\x20from\x20th\
    e\x20key\x20of\x20the\x20traces_per_query\x20map.\n\n\x0e\n\x07\x04\0\
    \x03\x01\x02\x01\x05\x12\x03\x1c\x04\n\n\x0e\n\x07\x04\0\x03\x01\x02\x01\
    \x01\x12\x03\x1c\x0b\x19\n\x0e\n\x07\x04\0\x03\x01\x02\x01\x03\x12\x03\
    \x1c\x1c\x1d\n\x0c\n\x04\x04\0\x03\x02\x12\x04\x1f\x02$\x03\n\x0c\n\x05\
    \x04\0\x03\x02\x01\x12\x03\x1f\n\x0f\n\x19\n\x06\x04\0\x03\x02\x02\0\x12\
    \x03\x20\x04\x17\"\n\x20required\n\n\x0e\n\x07\x04\0\x03\x02\x02\0\x05\
    \x12\x03\x20\x04\n\n\x0e\n\x07\x04\0\x03\x02\x02\0\x01\x12\x03\x20\x0b\
    \x12\n\x0e\n\x07\x04\0\x03\x02\x02\0\x03\x12\x03\x20\x15\x16\n\r\n\x06\
    \x04\0\x03\x02\x02\x01\x12\x03!\x04#\n\x0e\n\x07\x04\0\x03\x02\x02\x01\
    \x04\x12\x03!\x04\x0c\n\x0e\n\x07\x04\0\x03\x02\x02\x01\x06\x12\x03!\r\
    \x15\n\x0e\n\x07\x04\0\x03\x02\x02\x01\x01\x12\x03!\x16\x1e\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\"\x04\x17\n\x0e\n\x07\x04\0\x03\x02\x02\x02\x05\x12\x03\"\x04\n\
    \n\x0e\n\x07\x04\0\x03\x02\x02\x02\x01\x12\x03\"\x0b\x12\n\x0e\n\x07\x04\
    \0\x03\x02\x02\x02\x03\x12\x03\"\x15\x16\n\r\n\x06\x04\0\x03\x02\x02\x03\
    \x12\x03#\x04\x14\n\x0e\n\x07\x04\0\x03\x02\x02\x03\x05\x12\x03#\x04\n\n\
    \x0e\n\x07\x04\0\x03\x02\x02\x03\x01\x12\x03#\x0b\x0f\n\x0e\n\x07\x04\0\
    \x03\x02\x02\x03\x03\x12\x03#\x12\x13\n\x0c\n\x04\x04\0\x03\x03\x12\x04&\
    \x02C\x03\n\x0c\n\x05\x04\0\x03\x03\x01\x12\x03&\n\x0e\n\x0e\n\x06\x04\0\
    \x03\x03\x03\0\x12\x04'\x04)\x05\n\x0e\n\x07\x04\0\x03\x03\x03\0\x01\x12\
    \x03'\x0c\x12\n\x0f\n\x08\x04\0\x03\x03\x03\0\x02\0\x12\x03(\x06\x20\n\
    \x10\n\t\x04\0\x03\x03\x03\0\x02\0\x04\x12\x03(\x06\x0e\n\x10\n\t\x04\0\
    \x03\x03\x03\0\x02\0\x05\x12\x03(\x0f\x15\n\x10\n\t\x04\0\x03\x03\x03\0\
    \x02\0\x01\x12\x03(\x16\x1b\n\x10\n\t\x04\0\x03\x03\x03\0\x02\0\x03\x12\
    \x03(\x1e\x1f\n\x0e\n\x06\x04\0\x03\x03\x04\0\x12\x04+\x046\x05\n\x0e\n\
    \x07\x04\0\x03\x03\x04\0\x01\x12\x03+\t\x0f\n\x0f\n\x08\x04\0\x03\x03\
    \x04\0\x02\0\x12\x03,\x06\x12\n\x10\n\t\x04\0\x03\x03\x04\0\x02\0\x01\
    \x12\x03,\x06\r\n\x10\n\t\x04\0\x03\x03\x04\0\x02\0\x02\x12\x03,\x10\x11\
    \n\x0f\n\x08\x04\0\x03\x03\x04\0\x02\x01\x12\x03-\x06\x12\n\x10\n\t\x04\
    \0\x03\x03\x04\0\x02\x01\x01\x12\x03-\x06\r\n\x10\n\t\x04\0\x03\x03\x04\
    \0\x02\x01\x02\x12\x03-\x10\x11\n\x0f\n\x08\x04\0\x03\x03\x04\0\x02\x02\
    \x12\x03.\x06\x0e\n\x10\n\t\x04\0\x03\x03\x04\0\x02\x02\x01\x12\x03.\x06\
    \t\n\x10\n\t\x04\0\x03\x03\x04\0\x02\x02\x02\x12\x03.\x0c\r\n\x0f\n\x08\
    \x04\0\x03\x03\x04\0\x02\x03\x12\x03/\x06\x0f\n\x10\n\t\x04\0\x03\x03\
    \x04\0\x02\x03\x01\x12\x03/\x06\n\n\x10\n\t\x04\0\x03\x03\x04\0\x02\x03\
    \x02\x12\x03/\r\x0e\n\x0f\n\x08\x04\0\x03\x03\x04\0\x02\x04\x12\x030\x06\
    \x0f\n\x10\n\t\x04\0\x03\x03\x04\0\x02\x04\x01\x12\x030\x06\n\n\x10\n\t\
    \x04\0\x03\x03\x04\0\x02\x04\x02\x12\x030\r\x0e\n\x0f\n\x08\x04\0\x03\
    \x03\x04\0\x02\x05\x12\x031\x06\x0e\n\x10\n\t\x04\0\x03\x03\x04\0\x02\
    \x05\x01\x12\x031\x06\t\n\x10\n\t\x04\0\x03\x03\x04\0\x02\x05\x02\x12\
    \x031\x0c\r\n\x0f\n\x08\x04\0\x03\x03\x04\0\x02\x06\x12\x032\x06\x11\n\
    \x10\n\t\x04\0\x03\x03\x04\0\x02\x06\x01\x12\x032\x06\x0c\n\x10\n\t\x04\
    \0\x03\x03\x04\0\x02\x06\x02\x12\x032\x0f\x10\n\x0f\n\x08\x04\0\x03\x03\
    \x04\0\x02\x07\x12\x033\x06\x10\n\x10\n\t\x04\0\x03\x03\x04\0\x02\x07\
    \x01\x12\x033\x06\x0b\n\x10\n\t\x04\0\x03\x03\x04\0\x02\x07\x02\x12\x033\
    \x0e\x0f\n\x0f\n\x08\x04\0\x03\x03\x04\0\x02\x08\x12\x034\x06\x12\n\x10\
    \n\t\x04\0\x03\x03\x04\0\x02\x08\x01\x12\x034\x06\r\n\x10\n\t\x04\0\x03\
    \x03\x04\0\x02\x08\x02\x12\x034\x10\x11\n\x0f\n\x08\x04\0\x03\x03\x04\0\
    \x02\t\x12\x035\x06\x10\n\x10\n\t\x04\0\x03\x03\x04\0\x02\t\x01\x12\x035\
    \x06\x0b\n\x10\n\t\x04\0\x03\x03\x04\0\x02\t\x02\x12\x035\x0e\x0f\n\r\n\
    \x06\x04\0\x03\x03\x02\0\x12\x037\x04\x16\n\x0e\n\x07\x04\0\x03\x03\x02\
    \0\x06\x12\x037\x04\n\n\x0e\n\x07\x04\0\x03\x03\x02\0\x01\x12\x037\x0b\
    \x11\n\x0e\n\x07\x04\0\x03\x03\x02\0\x03\x12\x037\x14\x15\n\r\n\x06\x04\
    \0\x03\x03\x02\x01\x12\x038\x04\x14\n\x0e\n\x07\x04\0\x03\x03\x02\x01\
    \x05\x12\x038\x04\n\n\x0e\n\x07\x04\0\x03\x03\x02\x01\x01\x12\x038\x0b\
    \x0f\n\x0e\n\x07\x04\0\x03\x03\x02\x01\x03\x12\x038\x12\x13\n\r\n\x06\
    \x04\0\x03\x03\x02\x02\x12\x039\x04\x14\n\x0e\n\x07\x04\0\x03\x03\x02\
    \x02\x05\x12\x039\x04\n\n\x0e\n\x07\x04\0\x03\x03\x02\x02\x01\x12\x039\
    \x0b\x0f\n\x0e\n\x07\x04\0\x03\x03\x02\x02\x03\x12\x039\x12\x13\nD\n\x06\
    \x04\0\x03\x03\x02\x03\x12\x03<\x04,\x1a5\x20Should\x20exclude\x20manual\
    \x20blacklist\x20(\"Auth\"\x20by\x20default)\n\n\x0e\n\x07\x04\0\x03\x03\
    \x02\x03\x06\x12\x03<\x04\x17\n\x0e\n\x07\x04\0\x03\x03\x02\x03\x01\x12\
    \x03<\x18'\n\x0e\n\x07\x04\0\x03\x03\x02\x03\x03\x12\x03<*+\n\r\n\x06\
    \x04\0\x03\x03\x02\x04\x12\x03=\x04-\n\x0e\n\x07\x04\0\x03\x03\x02\x04\
    \x06\x12\x03=\x04\x17\n\x0e\n\x07\x04\0\x03\x03\x02\x04\x01\x12\x03=\x18\
    (\n\x0e\n\x07\x04\0\x03\x03\x02\x04\x03\x12\x03=+,\n\r\n\x06\x04\0\x03\
    \x03\x02\x05\x12\x03?\x04\x1b\n\x0e\n\x07\x04\0\x03\x03\x02\x05\x05\x12\
    \x03?\x04\n\n\x0e\n\x07\x04\0\x03\x03\x02\x05\x01\x12\x03?\x0b\x16\n\x0e\
    \n\x07\x04\0\x03\x03\x02\x05\x03\x12\x03?\x19\x1a\n\x1d\n\x06\x04\0\x03\
    \x03\x02\x06\x12\x03A\x04\x14\"\x0e\x20TLS\x20was\x20used\n\n\x0e\n\x07\
    \x04\0\x03\x03\x02\x06\x05\x12\x03A\x04\x08\n\x0e\n\x07\x04\0\x03\x03\
    \x02\x06\x01\x12\x03A\t\x0f\n\x0e\n\x07\x04\0\x03\x03\x02\x06\x03\x12\
    \x03A\x12\x13\nG\n\x06\x04\0\x03\x03\x02\x07\x12\x03B\x04\x18\"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\x03B\x04\n\n\x0e\n\
    \x07\x04\0\x03\x03\x02\x07\x01\x12\x03B\x0b\x13\n\x0e\n\x07\x04\0\x03\
    \x03\x02\x07\x03\x12\x03B\x16\x17\n\x0c\n\x04\x04\0\x03\x04\x12\x04E\x02\
    H\x03\n\x0c\n\x05\x04\0\x03\x04\x01\x12\x03E\n\x12\n\r\n\x06\x04\0\x03\
    \x04\x02\0\x12\x03F\x04\x14\n\x0e\n\x07\x04\0\x03\x04\x02\0\x05\x12\x03F\
    \x04\n\n\x0e\n\x07\x04\0\x03\x04\x02\0\x01\x12\x03F\x0b\x0f\n\x0e\n\x07\
    \x04\0\x03\x04\x02\0\x03\x12\x03F\x12\x13\n\r\n\x06\x04\0\x03\x04\x02\
    \x01\x12\x03G\x04\x16\n\x0e\n\x07\x04\0\x03\x04\x02\x01\x05\x12\x03G\x04\
    \n\n\x0e\n\x07\x04\0\x03\x04\x02\x01\x01\x12\x03G\x0b\x11\n\x0e\n\x07\
    \x04\0\x03\x04\x02\x01\x03\x12\x03G\x14\x15\n\xd7\x02\n\x04\x04\0\x03\
    \x05\x12\x04O\x02o\x03\x1a\xc8\x02\x20We\x20store\x20information\x20on\
    \x20each\x20resolver\x20execution\x20as\x20a\x20Node\x20on\x20a\x20tree.\
    \n\x20The\x20structure\x20of\x20the\x20tree\x20corresponds\x20to\x20the\
    \x20structure\x20of\x20the\x20GraphQL\n\x20response;\x20it\x20does\x20no\
    t\x20indicate\x20the\x20order\x20in\x20which\x20resolvers\x20were\n\x20i\
    nvoked.\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\
    \x03O\n\x0e\n\xd4\x03\n\x06\x04\0\x03\x05\x08\0\x12\x04W\x04Z\x05\x1a\
    \xc3\x03\x20The\x20name\x20of\x20the\x20field\x20(for\x20Nodes\x20repres\
    enting\x20a\x20resolver\x20call)\x20or\x20the\n\x20index\x20in\x20a\x20l\
    ist\x20(for\x20intermediate\x20Nodes\x20representing\x20elements\x20of\
    \x20a\x20list).\n\x20field_name\x20is\x20the\x20name\x20of\x20the\x20fie\
    ld\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\x20field\
    \x20name\x20from\x20the\x20schema.)\x20In\x20any\x20context\x20where\n\
    \x20we're\x20building\x20up\x20a\x20path,\x20we\x20use\x20the\x20respons\
    e_name\x20rather\x20than\x20the\n\x20original_field_name.\n\n\x0e\n\x07\
    \x04\0\x03\x05\x08\0\x01\x12\x03W\n\x0c\n\r\n\x06\x04\0\x03\x05\x02\0\
    \x12\x03X\x06\x1f\n\x0e\n\x07\x04\0\x03\x05\x02\0\x05\x12\x03X\x06\x0c\n\
    \x0e\n\x07\x04\0\x03\x05\x02\0\x01\x12\x03X\r\x1a\n\x0e\n\x07\x04\0\x03\
    \x05\x02\0\x03\x12\x03X\x1d\x1e\n\r\n\x06\x04\0\x03\x05\x02\x01\x12\x03Y\
    \x06\x17\n\x0e\n\x07\x04\0\x03\x05\x02\x01\x05\x12\x03Y\x06\x0c\n\x0e\n\
    \x07\x04\0\x03\x05\x02\x01\x01\x12\x03Y\r\x12\n\x0e\n\x07\x04\0\x03\x05\
    \x02\x01\x03\x12\x03Y\x15\x16\n\r\n\x06\x04\0\x03\x05\x02\x02\x12\x03\\\
    \x04$\n\x0e\n\x07\x04\0\x03\x05\x02\x02\x05\x12\x03\\\x04\n\n\x0e\n\x07\
    \x04\0\x03\x05\x02\x02\x01\x12\x03\\\x0b\x1e\n\x0e\n\x07\x04\0\x03\x05\
    \x02\x02\x03\x12\x03\\!#\nO\n\x06\x04\0\x03\x05\x02\x03\x12\x03_\x04\x14\
    \x1a@\x20The\x20field's\x20return\x20type;\x20e.g.\x20\"String!\"\x20for\
    \x20User.email:String!\n\n\x0e\n\x07\x04\0\x03\x05\x02\x03\x05\x12\x03_\
    \x04\n\n\x0e\n\x07\x04\0\x03\x05\x02\x03\x01\x12\x03_\x0b\x0f\n\x0e\n\
    \x07\x04\0\x03\x05\x02\x03\x03\x12\x03_\x12\x13\nL\n\x06\x04\0\x03\x05\
    \x02\x04\x12\x03b\x04\x1c\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\x03b\x04\n\n\x0e\n\x07\x04\0\x03\x05\x02\x04\x01\x12\
    \x03b\x0b\x16\n\x0e\n\x07\x04\0\x03\x05\x02\x04\x03\x12\x03b\x19\x1b\n\r\
    \n\x06\x04\0\x03\x05\x02\x05\x12\x03d\x04!\n\x0e\n\x07\x04\0\x03\x05\x02\
    \x05\x06\x12\x03d\x04\x0f\n\x0e\n\x07\x04\0\x03\x05\x02\x05\x01\x12\x03d\
    \x10\x1c\n\x0e\n\x07\x04\0\x03\x05\x02\x05\x03\x12\x03d\x1f\x20\n:\n\x06\
    \x04\0\x03\x05\x02\x06\x12\x03g\x04\x1a\x1a+\x20relative\x20to\x20the\
    \x20trace's\x20start_time,\x20in\x20ns\n\n\x0e\n\x07\x04\0\x03\x05\x02\
    \x06\x05\x12\x03g\x04\n\n\x0e\n\x07\x04\0\x03\x05\x02\x06\x01\x12\x03g\
    \x0b\x15\n\x0e\n\x07\x04\0\x03\x05\x02\x06\x03\x12\x03g\x18\x19\n:\n\x06\
    \x04\0\x03\x05\x02\x07\x12\x03i\x04\x18\x1a+\x20relative\x20to\x20the\
    \x20trace's\x20start_time,\x20in\x20ns\n\n\x0e\n\x07\x04\0\x03\x05\x02\
    \x07\x05\x12\x03i\x04\n\n\x0e\n\x07\x04\0\x03\x05\x02\x07\x01\x12\x03i\
    \x0b\x13\n\x0e\n\x07\x04\0\x03\x05\x02\x07\x03\x12\x03i\x16\x17\n\r\n\
    \x06\x04\0\x03\x05\x02\x08\x12\x03k\x04\x1e\n\x0e\n\x07\x04\0\x03\x05\
    \x02\x08\x04\x12\x03k\x04\x0c\n\x0e\n\x07\x04\0\x03\x05\x02\x08\x06\x12\
    \x03k\r\x12\n\x0e\n\x07\x04\0\x03\x05\x02\x08\x01\x12\x03k\x13\x18\n\x0e\
    \n\x07\x04\0\x03\x05\x02\x08\x03\x12\x03k\x1b\x1d\n\r\n\x06\x04\0\x03\
    \x05\x02\t\x12\x03l\x04\x1d\n\x0e\n\x07\x04\0\x03\x05\x02\t\x04\x12\x03l\
    \x04\x0c\n\x0e\n\x07\x04\0\x03\x05\x02\t\x06\x12\x03l\r\x11\n\x0e\n\x07\
    \x04\0\x03\x05\x02\t\x01\x12\x03l\x12\x17\n\x0e\n\x07\x04\0\x03\x05\x02\
    \t\x03\x12\x03l\x1a\x1c\n\x0c\n\x05\x04\0\x03\x05\t\x12\x03n\x04\x0f\n\r\
    \n\x06\x04\0\x03\x05\t\0\x12\x03n\r\x0e\n\x0e\n\x07\x04\0\x03\x05\t\0\
    \x01\x12\x03n\r\x0e\n\x0e\n\x07\x04\0\x03\x05\t\0\x02\x12\x03n\r\x0e\n\
    \xfe\x02\n\x04\x04\0\x03\x06\x12\x05u\x02\xa7\x01\x03\x1a\xee\x02\x20rep\
    resents\x20a\x20node\x20in\x20the\x20query\x20plan,\x20under\x20which\
    \x20there\x20is\x20a\x20trace\x20tree\x20for\x20that\x20service\x20fetch\
    .\n\x20In\x20particular,\x20each\x20fetch\x20node\x20represents\x20a\x20\
    call\x20to\x20an\x20implementing\x20service,\x20and\x20calls\x20to\x20im\
    plementing\n\x20services\x20may\x20not\x20be\x20unique.\x20See\x20https:\
    //github.com/apollographql/apollo-server/blob/main/packages/apollo-gatew\
    ay/src/QueryPlan.ts\n\x20for\x20more\x20information\x20and\x20details.\n\
    \n\x0c\n\x05\x04\0\x03\x06\x01\x12\x03u\n\x17\nd\n\x06\x04\0\x03\x06\x03\
    \0\x12\x04w\x04y\x05\x1aT\x20This\x20represents\x20a\x20set\x20of\x20nod\
    es\x20to\x20be\x20executed\x20sequentially\x20by\x20the\x20Gateway\x20ex\
    ecutor\n\n\x0e\n\x07\x04\0\x03\x06\x03\0\x01\x12\x03w\x0c\x18\n\x0f\n\
    \x08\x04\0\x03\x06\x03\0\x02\0\x12\x03x\x06'\n\x10\n\t\x04\0\x03\x06\x03\
    \0\x02\0\x04\x12\x03x\x06\x0e\n\x10\n\t\x04\0\x03\x06\x03\0\x02\0\x06\
    \x12\x03x\x0f\x1c\n\x10\n\t\x04\0\x03\x06\x03\0\x02\0\x01\x12\x03x\x1d\"\
    \n\x10\n\t\x04\0\x03\x06\x03\0\x02\0\x03\x12\x03x%&\nc\n\x06\x04\0\x03\
    \x06\x03\x01\x12\x04{\x04}\x05\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{\
    \x0c\x18\n\x0f\n\x08\x04\0\x03\x06\x03\x01\x02\0\x12\x03|\x06'\n\x10\n\t\
    \x04\0\x03\x06\x03\x01\x02\0\x04\x12\x03|\x06\x0e\n\x10\n\t\x04\0\x03\
    \x06\x03\x01\x02\0\x06\x12\x03|\x0f\x1c\n\x10\n\t\x04\0\x03\x06\x03\x01\
    \x02\0\x01\x12\x03|\x1d\"\n\x10\n\t\x04\0\x03\x06\x03\x01\x02\0\x03\x12\
    \x03|%&\nY\n\x06\x04\0\x03\x06\x03\x02\x12\x05\x7f\x04\x93\x01\x05\x1aH\
    \x20This\x20represents\x20a\x20node\x20to\x20send\x20an\x20operation\x20\
    to\x20an\x20implementing\x20service\n\n\x0e\n\x07\x04\0\x03\x06\x03\x02\
    \x01\x12\x03\x7f\x0c\x15\n\x8a\x02\n\x08\x04\0\x03\x06\x03\x02\x02\0\x12\
    \x04\x83\x01\x06\x1e\x1a\xf7\x01\x20XXX\x20When\x20we\x20want\x20to\x20i\
    nclude\x20more\x20details\x20about\x20the\x20sub-operation\x20that\x20wa\
    s\n\x20executed\x20against\x20this\x20service,\x20we\x20should\x20includ\
    e\x20that\x20here\x20in\x20each\x20fetch\x20node.\n\x20This\x20might\x20\
    include\x20an\x20operation\x20signature,\x20requires\x20directive,\x20re\
    ference\x20resolutions,\x20etc.\n\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\0\
    \x05\x12\x04\x83\x01\x06\x0c\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\0\x01\
    \x12\x04\x83\x01\r\x19\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\0\x03\x12\x04\
    \x83\x01\x1c\x1d\n\x10\n\x08\x04\0\x03\x06\x03\x02\x02\x01\x12\x04\x85\
    \x01\x06$\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\x01\x05\x12\x04\x85\x01\
    \x06\n\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\x01\x01\x12\x04\x85\x01\x0b\
    \x1f\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\x01\x03\x12\x04\x85\x01\"#\n\
    \xcc\x01\n\x08\x04\0\x03\x06\x03\x02\x02\x02\x12\x04\x8a\x01\x06\x16\x1a\
    \xb9\x01\x20This\x20Trace\x20only\x20contains\x20start_time,\x20end_time\
    ,\x20duration_ns,\x20and\x20root;\n\x20all\x20timings\x20were\x20calcula\
    ted\x20**on\x20the\x20federated\x20service**,\x20and\x20clock\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\x8a\x01\x06\x0b\n\x11\n\t\x04\
    \0\x03\x06\x03\x02\x02\x02\x01\x12\x04\x8a\x01\x0c\x11\n\x11\n\t\x04\0\
    \x03\x06\x03\x02\x02\x02\x03\x12\x04\x8a\x01\x14\x15\n]\n\x08\x04\0\x03\
    \x06\x03\x02\x02\x03\x12\x04\x8d\x01\x06\"\x1aK\x20relative\x20to\x20the\
    \x20outer\x20trace's\x20start_time,\x20in\x20ns,\x20measured\x20in\x20th\
    e\x20gateway.\n\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\x03\x05\x12\x04\x8d\
    \x01\x06\x0c\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\x03\x01\x12\x04\x8d\x01\
    \r\x1d\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\x03\x03\x12\x04\x8d\x01\x20!\
    \nk\n\x08\x04\0\x03\x06\x03\x02\x02\x04\x12\x04\x91\x01\x06.\x1aY\x20Wal\
    lclock\x20times\x20measured\x20in\x20the\x20gateway\x20for\x20when\x20th\
    is\x20operation\x20was\n\x20sent\x20and\x20received.\n\n\x11\n\t\x04\0\
    \x03\x06\x03\x02\x02\x04\x06\x12\x04\x91\x01\x06\x1f\n\x11\n\t\x04\0\x03\
    \x06\x03\x02\x02\x04\x01\x12\x04\x91\x01\x20)\n\x11\n\t\x04\0\x03\x06\
    \x03\x02\x02\x04\x03\x12\x04\x91\x01,-\n\x10\n\x08\x04\0\x03\x06\x03\x02\
    \x02\x05\x12\x04\x92\x01\x062\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\x05\
    \x06\x12\x04\x92\x01\x06\x1f\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\x05\x01\
    \x12\x04\x92\x01\x20-\n\x11\n\t\x04\0\x03\x06\x03\x02\x02\x05\x03\x12\
    \x04\x92\x0101\n\xc9\x01\n\x06\x04\0\x03\x06\x03\x03\x12\x06\x97\x01\x04\
    \x9a\x01\x05\x1a\xb6\x01\x20This\x20node\x20represents\x20a\x20way\x20to\
    \x20reach\x20into\x20the\x20response\x20path\x20and\x20attach\x20related\
    \x20entities.\n\x20XXX\x20Flatten\x20is\x20really\x20not\x20the\x20right\
    \x20name\x20and\x20this\x20node\x20may\x20be\x20renamed\x20in\x20the\x20\
    query\x20planner.\n\n\x0f\n\x07\x04\0\x03\x06\x03\x03\x01\x12\x04\x97\
    \x01\x0c\x17\n\x10\n\x08\x04\0\x03\x06\x03\x03\x02\0\x12\x04\x98\x01\x06\
    5\n\x11\n\t\x04\0\x03\x06\x03\x03\x02\0\x04\x12\x04\x98\x01\x06\x0e\n\
    \x11\n\t\x04\0\x03\x06\x03\x03\x02\0\x06\x12\x04\x98\x01\x0f\"\n\x11\n\t\
    \x04\0\x03\x06\x03\x03\x02\0\x01\x12\x04\x98\x01#0\n\x11\n\t\x04\0\x03\
    \x06\x03\x03\x02\0\x03\x12\x04\x98\x0134\n\x10\n\x08\x04\0\x03\x06\x03\
    \x03\x02\x01\x12\x04\x99\x01\x06\x1d\n\x11\n\t\x04\0\x03\x06\x03\x03\x02\
    \x01\x06\x12\x04\x99\x01\x06\x13\n\x11\n\t\x04\0\x03\x06\x03\x03\x02\x01\
    \x01\x12\x04\x99\x01\x14\x18\n\x11\n\t\x04\0\x03\x06\x03\x03\x02\x01\x03\
    \x12\x04\x99\x01\x1b\x1c\n\x10\n\x06\x04\0\x03\x06\x03\x04\x12\x06\x9b\
    \x01\x04\xa0\x01\x05\n\x0f\n\x07\x04\0\x03\x06\x03\x04\x01\x12\x04\x9b\
    \x01\x0c\x1f\n\x12\n\x08\x04\0\x03\x06\x03\x04\x08\0\x12\x06\x9c\x01\x06\
    \x9f\x01\x07\n\x11\n\t\x04\0\x03\x06\x03\x04\x08\0\x01\x12\x04\x9c\x01\
    \x0c\x0e\n\x10\n\x08\x04\0\x03\x06\x03\x04\x02\0\x12\x04\x9d\x01\x08\x1e\
    \n\x11\n\t\x04\0\x03\x06\x03\x04\x02\0\x05\x12\x04\x9d\x01\x08\x0e\n\x11\
    \n\t\x04\0\x03\x06\x03\x04\x02\0\x01\x12\x04\x9d\x01\x0f\x19\n\x11\n\t\
    \x04\0\x03\x06\x03\x04\x02\0\x03\x12\x04\x9d\x01\x1c\x1d\n\x10\n\x08\x04\
    \0\x03\x06\x03\x04\x02\x01\x12\x04\x9e\x01\x08\x19\n\x11\n\t\x04\0\x03\
    \x06\x03\x04\x02\x01\x05\x12\x04\x9e\x01\x08\x0e\n\x11\n\t\x04\0\x03\x06\
    \x03\x04\x02\x01\x01\x12\x04\x9e\x01\x0f\x14\n\x11\n\t\x04\0\x03\x06\x03\
    \x04\x02\x01\x03\x12\x04\x9e\x01\x17\x18\n\x10\n\x06\x04\0\x03\x06\x08\0\
    \x12\x06\xa1\x01\x04\xa6\x01\x05\n\x0f\n\x07\x04\0\x03\x06\x08\0\x01\x12\
    \x04\xa1\x01\n\x0e\n\x0e\n\x06\x04\0\x03\x06\x02\0\x12\x04\xa2\x01\x06\
    \x20\n\x0f\n\x07\x04\0\x03\x06\x02\0\x06\x12\x04\xa2\x01\x06\x12\n\x0f\n\
    \x07\x04\0\x03\x06\x02\0\x01\x12\x04\xa2\x01\x13\x1b\n\x0f\n\x07\x04\0\
    \x03\x06\x02\0\x03\x12\x04\xa2\x01\x1e\x1f\n\x0e\n\x06\x04\0\x03\x06\x02\
    \x01\x12\x04\xa3\x01\x06\x20\n\x0f\n\x07\x04\0\x03\x06\x02\x01\x06\x12\
    \x04\xa3\x01\x06\x12\n\x0f\n\x07\x04\0\x03\x06\x02\x01\x01\x12\x04\xa3\
    \x01\x13\x1b\n\x0f\n\x07\x04\0\x03\x06\x02\x01\x03\x12\x04\xa3\x01\x1e\
    \x1f\n\x0e\n\x06\x04\0\x03\x06\x02\x02\x12\x04\xa4\x01\x06\x1a\n\x0f\n\
    \x07\x04\0\x03\x06\x02\x02\x06\x12\x04\xa4\x01\x06\x0f\n\x0f\n\x07\x04\0\
    \x03\x06\x02\x02\x01\x12\x04\xa4\x01\x10\x15\n\x0f\n\x07\x04\0\x03\x06\
    \x02\x02\x03\x12\x04\xa4\x01\x18\x19\n\x0e\n\x06\x04\0\x03\x06\x02\x03\
    \x12\x04\xa5\x01\x06\x1e\n\x0f\n\x07\x04\0\x03\x06\x02\x03\x06\x12\x04\
    \xa5\x01\x06\x11\n\x0f\n\x07\x04\0\x03\x06\x02\x03\x01\x12\x04\xa5\x01\
    \x12\x19\n\x0f\n\x07\x04\0\x03\x06\x02\x03\x03\x12\x04\xa5\x01\x1c\x1d\n\
    @\n\x04\x04\0\x02\0\x12\x04\xaa\x01\x02+\x1a&\x20Wallclock\x20time\x20wh\
    en\x20the\x20trace\x20began.\n\"\n\x20required\n\n\r\n\x05\x04\0\x02\0\
    \x06\x12\x04\xaa\x01\x02\x1b\n\r\n\x05\x04\0\x02\0\x01\x12\x04\xaa\x01\
    \x1c&\n\r\n\x05\x04\0\x02\0\x03\x12\x04\xaa\x01)*\n@\n\x04\x04\0\x02\x01\
    \x12\x04\xac\x01\x02)\x1a&\x20Wallclock\x20time\x20when\x20the\x20trace\
    \x20ended.\n\"\n\x20required\n\n\r\n\x05\x04\0\x02\x01\x06\x12\x04\xac\
    \x01\x02\x1b\n\r\n\x05\x04\0\x02\x01\x01\x12\x04\xac\x01\x1c$\n\r\n\x05\
    \x04\0\x02\x01\x03\x12\x04\xac\x01'(\n\x9d\x01\n\x04\x04\0\x02\x02\x12\
    \x04\xaf\x01\x02\x1a\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\xaf\x01\x02\
    \x08\n\r\n\x05\x04\0\x02\x02\x01\x12\x04\xaf\x01\t\x14\n\r\n\x05\x04\0\
    \x02\x02\x03\x12\x04\xaf\x01\x17\x19\nr\n\x04\x04\0\x02\x03\x12\x04\xb2\
    \x01\x02\x11\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\xb2\x01\x02\x06\n\
    \r\n\x05\x04\0\x02\x03\x01\x12\x04\xb2\x01\x07\x0b\n\r\n\x05\x04\0\x02\
    \x03\x03\x12\x04\xb2\x01\x0e\x10\n\xff\x06\n\x04\x04\0\x02\x04\x12\x04\
    \xc2\x01\x02\x18\x1a\xa8\x05\x20In\x20addition\x20to\x20details.raw_quer\
    y,\x20we\x20include\x20a\x20\"signature\"\x20of\x20the\x20query,\n\x20wh\
    ich\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\xc2\x01\x02\
    \x08\n\r\n\x05\x04\0\x02\x04\x01\x12\x04\xc2\x01\t\x12\n\r\n\x05\x04\0\
    \x02\x04\x03\x12\x04\xc2\x01\x15\x17\n\xe9\x01\n\x04\x04\0\x02\x05\x12\
    \x04\xc7\x01\x02&\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\xc7\x01\x02\x08\n\r\n\x05\x04\0\x02\x05\
    \x01\x12\x04\xc7\x01\t\x20\n\r\n\x05\x04\0\x02\x05\x03\x12\x04\xc7\x01#%\
    \n\x0c\n\x04\x04\0\x02\x06\x12\x04\xc8\x01\x02&\n\r\n\x05\x04\0\x02\x06\
    \x05\x12\x04\xc8\x01\x02\x08\n\r\n\x05\x04\0\x02\x06\x01\x12\x04\xc8\x01\
    \t\x20\n\r\n\x05\x04\0\x02\x06\x03\x12\x04\xc8\x01#%\n\x0c\n\x04\x04\0\
    \x02\x07\x12\x04\xca\x01\x02\x16\n\r\n\x05\x04\0\x02\x07\x06\x12\x04\xca\
    \x01\x02\t\n\r\n\x05\x04\0\x02\x07\x01\x12\x04\xca\x01\n\x11\n\r\n\x05\
    \x04\0\x02\x07\x03\x12\x04\xca\x01\x14\x15\n\xa9\x01\n\x04\x04\0\x02\x08\
    \x12\x04\xce\x01\x02\x19\x1a\x9a\x01\x20Note:\x20engineproxy\x20always\
    \x20sets\x20client_name,\x20client_version,\x20and\x20client_address\x20\
    to\x20\"none\".\n\x20apollo-engine-reporting\x20allows\x20for\x20them\
    \x20to\x20be\x20set\x20by\x20the\x20user.\n\n\r\n\x05\x04\0\x02\x08\x05\
    \x12\x04\xce\x01\x02\x08\n\r\n\x05\x04\0\x02\x08\x01\x12\x04\xce\x01\t\
    \x14\n\r\n\x05\x04\0\x02\x08\x03\x12\x04\xce\x01\x17\x18\n\x0c\n\x04\x04\
    \0\x02\t\x12\x04\xcf\x01\x02\x1c\n\r\n\x05\x04\0\x02\t\x05\x12\x04\xcf\
    \x01\x02\x08\n\r\n\x05\x04\0\x02\t\x01\x12\x04\xcf\x01\t\x17\n\r\n\x05\
    \x04\0\x02\t\x03\x12\x04\xcf\x01\x1a\x1b\n\x0c\n\x04\x04\0\x02\n\x12\x04\
    \xd0\x01\x02\x1c\n\r\n\x05\x04\0\x02\n\x05\x12\x04\xd0\x01\x02\x08\n\r\n\
    \x05\x04\0\x02\n\x01\x12\x04\xd0\x01\t\x17\n\r\n\x05\x04\0\x02\n\x03\x12\
    \x04\xd0\x01\x1a\x1b\n\x0c\n\x04\x04\0\x02\x0b\x12\x04\xd1\x01\x02\"\n\r\
    \n\x05\x04\0\x02\x0b\x05\x12\x04\xd1\x01\x02\x08\n\r\n\x05\x04\0\x02\x0b\
    \x01\x12\x04\xd1\x01\t\x1c\n\r\n\x05\x04\0\x02\x0b\x03\x12\x04\xd1\x01\
    \x1f!\n\x0c\n\x04\x04\0\x02\x0c\x12\x04\xd3\x01\x02\x11\n\r\n\x05\x04\0\
    \x02\x0c\x06\x12\x04\xd3\x01\x02\x06\n\r\n\x05\x04\0\x02\x0c\x01\x12\x04\
    \xd3\x01\x07\x0b\n\r\n\x05\x04\0\x02\x0c\x03\x12\x04\xd3\x01\x0e\x10\n\
    \x0c\n\x04\x04\0\x02\r\x12\x04\xd5\x01\x02\x20\n\r\n\x05\x04\0\x02\r\x06\
    \x12\x04\xd5\x01\x02\r\n\r\n\x05\x04\0\x02\r\x01\x12\x04\xd5\x01\x0e\x1a\
    \n\r\n\x05\x04\0\x02\r\x03\x12\x04\xd5\x01\x1d\x1f\n\x93\x02\n\x04\x04\0\
    \x02\x0e\x12\x04\xdb\x01\x02\x20\x1a\x84\x02\x20If\x20this\x20Trace\x20w\
    as\x20created\x20by\x20a\x20gateway,\x20this\x20is\x20the\x20query\x20pl\
    an,\x20including\n\x20sub-Traces\x20for\x20federated\x20services.\x20Not\
    e\x20that\x20the\x20'root'\x20tree\x20on\x20the\n\x20top-level\x20Trace\
    \x20won't\x20contain\x20any\x20resolvers\x20(though\x20it\x20could\x20co\
    ntain\x20errors\n\x20that\x20occurred\x20in\x20the\x20gateway\x20itself)\
    .\n\n\r\n\x05\x04\0\x02\x0e\x06\x12\x04\xdb\x01\x02\x0f\n\r\n\x05\x04\0\
    \x02\x0e\x01\x12\x04\xdb\x01\x10\x1a\n\r\n\x05\x04\0\x02\x0e\x03\x12\x04\
    \xdb\x01\x1d\x1f\n\x81\x01\n\x04\x04\0\x02\x0f\x12\x04\xdf\x01\x02!\x1as\
    \x20Was\x20this\x20response\x20served\x20from\x20a\x20full\x20query\x20r\
    esponse\x20cache?\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\xdf\x01\x02\x06\n\r\n\x05\x04\0\x02\x0f\x01\x12\x04\xdf\x01\x07\x1b\
    \n\r\n\x05\x04\0\x02\x0f\x03\x12\x04\xdf\x01\x1e\x20\nP\n\x04\x04\0\x02\
    \x10\x12\x04\xe2\x01\x02\x20\x1aB\x20Was\x20this\x20query\x20specified\
    \x20successfully\x20as\x20a\x20persisted\x20query\x20hash?\n\n\r\n\x05\
    \x04\0\x02\x10\x05\x12\x04\xe2\x01\x02\x06\n\r\n\x05\x04\0\x02\x10\x01\
    \x12\x04\xe2\x01\x07\x1a\n\r\n\x05\x04\0\x02\x10\x03\x12\x04\xe2\x01\x1d\
    \x1f\n\xb9\x01\n\x04\x04\0\x02\x11\x12\x04\xe6\x01\x02%\x1a\xaa\x01\x20D\
    id\x20this\x20query\x20contain\x20both\x20a\x20full\x20query\x20string\
    \x20and\x20a\x20persisted\x20query\x20hash?\n\x20(This\x20typically\x20m\
    eans\x20that\x20a\x20previous\x20request\x20was\x20rejected\x20as\x20an\
    \x20unknown\n\x20persisted\x20query.)\n\n\r\n\x05\x04\0\x02\x11\x05\x12\
    \x04\xe6\x01\x02\x06\n\r\n\x05\x04\0\x02\x11\x01\x12\x04\xe6\x01\x07\x1f\
    \n\r\n\x05\x04\0\x02\x11\x03\x12\x04\xe6\x01\"$\nI\n\x04\x04\0\x02\x12\
    \x12\x04\xe9\x01\x02!\x1a;\x20Was\x20this\x20operation\x20registered\x20\
    and\x20a\x20part\x20of\x20the\x20safelist?\n\n\r\n\x05\x04\0\x02\x12\x05\
    \x12\x04\xe9\x01\x02\x06\n\r\n\x05\x04\0\x02\x12\x01\x12\x04\xe9\x01\x07\
    \x1b\n\r\n\x05\x04\0\x02\x12\x03\x12\x04\xe9\x01\x1e\x20\nH\n\x04\x04\0\
    \x02\x13\x12\x04\xec\x01\x02\x20\x1a:\x20Was\x20this\x20operation\x20for\
    bidden\x20due\x20to\x20lack\x20of\x20safelisting?\n\n\r\n\x05\x04\0\x02\
    \x13\x05\x12\x04\xec\x01\x02\x06\n\r\n\x05\x04\0\x02\x13\x01\x12\x04\xec\
    \x01\x07\x1a\n\r\n\x05\x04\0\x02\x13\x03\x12\x04\xec\x01\x1d\x1f\np\n\
    \x03\x04\0\t\x12\x04\xf2\x01\x02\x18\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\xf2\x01\x0b\r\n\r\n\x05\x04\0\t\0\
    \x01\x12\x04\xf2\x01\x0b\r\n\r\n\x05\x04\0\t\0\x02\x12\x04\xf2\x01\x0b\r\
    \n\x0c\n\x04\x04\0\t\x01\x12\x04\xf2\x01\x0f\x11\n\r\n\x05\x04\0\t\x01\
    \x01\x12\x04\xf2\x01\x0f\x11\n\r\n\x05\x04\0\t\x01\x02\x12\x04\xf2\x01\
    \x0f\x11\n\x0c\n\x04\x04\0\t\x02\x12\x04\xf2\x01\x13\x14\n\r\n\x05\x04\0\
    \t\x02\x01\x12\x04\xf2\x01\x13\x14\n\r\n\x05\x04\0\t\x02\x02\x12\x04\xf2\
    \x01\x13\x14\n\x0c\n\x04\x04\0\t\x03\x12\x04\xf2\x01\x16\x17\n\r\n\x05\
    \x04\0\t\x03\x01\x12\x04\xf2\x01\x16\x17\n\r\n\x05\x04\0\t\x03\x02\x12\
    \x04\xf2\x01\x16\x17\n\x91\x05\n\x02\x04\x01\x12\x06\xfc\x01\0\x91\x02\
    \x01\x1a\x82\x05\x20The\x20`service`\x20value\x20embedded\x20within\x20t\
    he\x20header\x20key\x20is\x20not\x20guaranteed\x20to\x20contain\x20an\
    \x20actual\x20service,\n\x20and,\x20in\x20most\x20cases,\x20the\x20servi\
    ce\x20information\x20is\x20trusted\x20to\x20come\x20from\x20upstream\x20\
    processing.\x20If\x20the\n\x20service\x20_is_\x20specified\x20in\x20this\
    \x20header,\x20then\x20it\x20is\x20checked\x20to\x20match\x20the\x20cont\
    ext\x20that\x20is\x20reporting\x20it.\n\x20Otherwise,\x20the\x20service\
    \x20information\x20is\x20deduced\x20from\x20the\x20token\x20context\x20o\
    f\x20the\x20reporter\x20and\x20then\x20sent\n\x20along\x20via\x20other\
    \x20mechanisms\x20(in\x20Kafka,\x20the\x20`ReportKafkaKey).\x20The\x20ot\
    her\x20information\x20(hostname,\n\x20agent_version,\x20etc.)\x20is\x20s\
    ent\x20by\x20the\x20Apollo\x20Engine\x20Reporting\x20agent,\x20but\x20we\
    \x20do\x20not\x20currently\x20save\x20that\n\x20information\x20to\x20any\
    \x20of\x20our\x20persistent\x20storage.\n\n\x0b\n\x03\x04\x01\x01\x12\
    \x04\xfc\x01\x08\x14\n&\n\x04\x04\x01\x02\0\x12\x04\xfe\x01\x02\x18\x1a\
    \x18\x20eg\x20\"mygraph@myvariant\"\n\n\r\n\x05\x04\x01\x02\0\x05\x12\
    \x04\xfe\x01\x02\x08\n\r\n\x05\x04\x01\x02\0\x01\x12\x04\xfe\x01\t\x12\n\
    \r\n\x05\x04\x01\x02\0\x03\x12\x04\xfe\x01\x15\x17\n(\n\x04\x04\x01\x02\
    \x01\x12\x04\x81\x02\x02\x16\x1a\x1a\x20eg\x20\"host-01.example.com\"\n\
    \n\r\n\x05\x04\x01\x02\x01\x05\x12\x04\x81\x02\x02\x08\n\r\n\x05\x04\x01\
    \x02\x01\x01\x12\x04\x81\x02\t\x11\n\r\n\x05\x04\x01\x02\x01\x03\x12\x04\
    \x81\x02\x14\x15\n2\n\x04\x04\x01\x02\x02\x12\x04\x84\x02\x02\x1b\x1a\
    \x18\x20eg\x20\"engineproxy\x200.1.0\"\n\"\n\x20required\n\n\r\n\x05\x04\
    \x01\x02\x02\x05\x12\x04\x84\x02\x02\x08\n\r\n\x05\x04\x01\x02\x02\x01\
    \x12\x04\x84\x02\t\x16\n\r\n\x05\x04\x01\x02\x02\x03\x12\x04\x84\x02\x19\
    \x1a\n]\n\x04\x04\x01\x02\x03\x12\x04\x86\x02\x02\x1d\x1aO\x20eg\x20\"pr\
    od-4279-20160804T065423Z-5-g3cf0aa8\"\x20(taken\x20from\x20`git\x20descr\
    ibe\x20--tags`)\n\n\r\n\x05\x04\x01\x02\x03\x05\x12\x04\x86\x02\x02\x08\
    \n\r\n\x05\x04\x01\x02\x03\x01\x12\x04\x86\x02\t\x18\n\r\n\x05\x04\x01\
    \x02\x03\x03\x12\x04\x86\x02\x1b\x1c\n\x20\n\x04\x04\x01\x02\x04\x12\x04\
    \x88\x02\x02\x1d\x1a\x12\x20eg\x20\"node\x20v4.6.0\"\n\n\r\n\x05\x04\x01\
    \x02\x04\x05\x12\x04\x88\x02\x02\x08\n\r\n\x05\x04\x01\x02\x04\x01\x12\
    \x04\x88\x02\t\x18\n\r\n\x05\x04\x01\x02\x04\x03\x12\x04\x88\x02\x1b\x1c\
    \n^\n\x04\x04\x01\x02\x05\x12\x04\x8a\x02\x02\x13\x1aP\x20eg\x20\"Linux\
    \x20box\x204.6.5-1-ec2\x20#1\x20SMP\x20Mon\x20Aug\x201\x2002:31:38\x20PD\
    T\x202016\x20x86_64\x20GNU/Linux\"\n\n\r\n\x05\x04\x01\x02\x05\x05\x12\
    \x04\x8a\x02\x02\x08\n\r\n\x05\x04\x01\x02\x05\x01\x12\x04\x8a\x02\t\x0e\
    \n\r\n\x05\x04\x01\x02\x05\x03\x12\x04\x8a\x02\x11\x12\n\xc6\x01\n\x04\
    \x04\x01\x02\x06\x12\x04\x8e\x02\x02#\x1a\xb7\x01\x20An\x20id\x20that\
    \x20is\x20used\x20to\x20represent\x20the\x20schema\x20to\x20Apollo\x20Gr\
    aph\x20Manager\n\x20Using\x20this\x20in\x20place\x20of\x20what\x20used\
    \x20to\x20be\x20schema_hash,\x20since\x20that\x20is\x20no\x20longer\n\
    \x20attached\x20to\x20a\x20schema\x20in\x20the\x20backend.\n\n\r\n\x05\
    \x04\x01\x02\x06\x05\x12\x04\x8e\x02\x02\x08\n\r\n\x05\x04\x01\x02\x06\
    \x01\x12\x04\x8e\x02\t\x1d\n\r\n\x05\x04\x01\x02\x06\x03\x12\x04\x8e\x02\
    \x20\"\n*\n\x03\x04\x01\t\x12\x04\x90\x02\x02\r\"\x1d\x20removed\x20stri\
    ng\x20service\x20=\x203;\n\n\x0c\n\x04\x04\x01\t\0\x12\x04\x90\x02\x0b\
    \x0c\n\r\n\x05\x04\x01\t\0\x01\x12\x04\x90\x02\x0b\x0c\n\r\n\x05\x04\x01\
    \t\0\x02\x12\x04\x90\x02\x0b\x0c\n\x0c\n\x02\x04\x02\x12\x06\x93\x02\0\
    \x97\x02\x01\n\x0b\n\x03\x04\x02\x01\x12\x04\x93\x02\x08\x16\n\x0c\n\x04\
    \x04\x02\x02\0\x12\x04\x94\x02\x02+\n\r\n\x05\x04\x02\x02\0\x06\x12\x04\
    \x94\x02\x02\x1d\n\r\n\x05\x04\x02\x02\0\x01\x12\x04\x94\x02\x1e&\n\r\n\
    \x05\x04\x02\x02\0\x03\x12\x04\x94\x02)*\n\x0c\n\x04\x04\x02\x02\x01\x12\
    \x04\x95\x02\x02\x1a\n\r\n\x05\x04\x02\x02\x01\x05\x12\x04\x95\x02\x02\
    \x08\n\r\n\x05\x04\x02\x02\x01\x01\x12\x04\x95\x02\t\x15\n\r\n\x05\x04\
    \x02\x02\x01\x03\x12\x04\x95\x02\x18\x19\n\x0c\n\x04\x04\x02\x02\x02\x12\
    \x04\x96\x02\x02(\n\r\n\x05\x04\x02\x02\x02\x05\x12\x04\x96\x02\x02\x08\
    \n\r\n\x05\x04\x02\x02\x02\x01\x12\x04\x96\x02\t#\n\r\n\x05\x04\x02\x02\
    \x02\x03\x12\x04\x96\x02&'\n\x0c\n\x02\x04\x03\x12\x06\x99\x02\0\xa8\x02\
    \x01\n\x0b\n\x03\x04\x03\x01\x12\x04\x99\x02\x08\x19\n\x0c\n\x04\x04\x03\
    \x02\0\x12\x04\x9a\x02\x02%\n\r\n\x05\x04\x03\x02\0\x04\x12\x04\x9a\x02\
    \x02\n\n\r\n\x05\x04\x03\x02\0\x05\x12\x04\x9a\x02\x0b\x11\n\r\n\x05\x04\
    \x03\x02\0\x01\x12\x04\x9a\x02\x12\x1f\n\r\n\x05\x04\x03\x02\0\x03\x12\
    \x04\x9a\x02\"$\n\x0c\n\x04\x04\x03\x02\x01\x12\x04\x9b\x02\x02\x1b\n\r\
    \n\x05\x04\x03\x02\x01\x05\x12\x04\x9b\x02\x02\x08\n\r\n\x05\x04\x03\x02\
    \x01\x01\x12\x04\x9b\x02\t\x16\n\r\n\x05\x04\x03\x02\x01\x03\x12\x04\x9b\
    \x02\x19\x1a\n\x0c\n\x04\x04\x03\x02\x02\x12\x04\x9c\x02\x02\x18\n\r\n\
    \x05\x04\x03\x02\x02\x05\x12\x04\x9c\x02\x02\x08\n\r\n\x05\x04\x03\x02\
    \x02\x01\x12\x04\x9c\x02\t\x13\n\r\n\x05\x04\x03\x02\x02\x03\x12\x04\x9c\
    \x02\x16\x17\n\x0c\n\x04\x04\x03\x02\x03\x12\x04\x9d\x02\x02\"\n\r\n\x05\
    \x04\x03\x02\x03\x05\x12\x04\x9d\x02\x02\x08\n\r\n\x05\x04\x03\x02\x03\
    \x01\x12\x04\x9d\x02\t\x1d\n\r\n\x05\x04\x03\x02\x03\x03\x12\x04\x9d\x02\
    \x20!\n\x0c\n\x04\x04\x03\x02\x04\x12\x04\x9e\x02\x02$\n\r\n\x05\x04\x03\
    \x02\x04\x05\x12\x04\x9e\x02\x02\x08\n\r\n\x05\x04\x03\x02\x04\x01\x12\
    \x04\x9e\x02\t\x1f\n\r\n\x05\x04\x03\x02\x04\x03\x12\x04\x9e\x02\"#\n\
    \x0c\n\x04\x04\x03\x02\x05\x12\x04\x9f\x02\x02+\n\r\n\x05\x04\x03\x02\
    \x05\x04\x12\x04\x9f\x02\x02\n\n\r\n\x05\x04\x03\x02\x05\x05\x12\x04\x9f\
    \x02\x0b\x11\n\r\n\x05\x04\x03\x02\x05\x01\x12\x04\x9f\x02\x12%\n\r\n\
    \x05\x04\x03\x02\x05\x03\x12\x04\x9f\x02(*\n\x0c\n\x04\x04\x03\x02\x06\
    \x12\x04\xa0\x02\x02&\n\r\n\x05\x04\x03\x02\x06\x06\x12\x04\xa0\x02\x02\
    \x10\n\r\n\x05\x04\x03\x02\x06\x01\x12\x04\xa0\x02\x11!\n\r\n\x05\x04\
    \x03\x02\x06\x03\x12\x04\xa0\x02$%\n\x0c\n\x04\x04\x03\x02\x07\x12\x04\
    \xa1\x02\x02(\n\r\n\x05\x04\x03\x02\x07\x05\x12\x04\xa1\x02\x02\x08\n\r\
    \n\x05\x04\x03\x02\x07\x01\x12\x04\xa1\x02\t#\n\r\n\x05\x04\x03\x02\x07\
    \x03\x12\x04\xa1\x02&'\n\x0c\n\x04\x04\x03\x02\x08\x12\x04\xa2\x02\x02.\
    \n\r\n\x05\x04\x03\x02\x08\x04\x12\x04\xa2\x02\x02\n\n\r\n\x05\x04\x03\
    \x02\x08\x05\x12\x04\xa2\x02\x0b\x11\n\r\n\x05\x04\x03\x02\x08\x01\x12\
    \x04\xa2\x02\x12(\n\r\n\x05\x04\x03\x02\x08\x03\x12\x04\xa2\x02+-\n\x0c\
    \n\x04\x04\x03\x02\t\x12\x04\xa3\x02\x02/\n\r\n\x05\x04\x03\x02\t\x04\
    \x12\x04\xa3\x02\x02\n\n\r\n\x05\x04\x03\x02\t\x05\x12\x04\xa3\x02\x0b\
    \x11\n\r\n\x05\x04\x03\x02\t\x01\x12\x04\xa3\x02\x12)\n\r\n\x05\x04\x03\
    \x02\t\x03\x12\x04\xa3\x02,.\n\x0c\n\x04\x04\x03\x02\n\x12\x04\xa4\x02\
    \x02)\n\r\n\x05\x04\x03\x02\n\x05\x12\x04\xa4\x02\x02\x08\n\r\n\x05\x04\
    \x03\x02\n\x01\x12\x04\xa4\x02\t#\n\r\n\x05\x04\x03\x02\n\x03\x12\x04\
    \xa4\x02&(\n\x0c\n\x04\x04\x03\x02\x0b\x12\x04\xa5\x02\x02(\n\r\n\x05\
    \x04\x03\x02\x0b\x05\x12\x04\xa5\x02\x02\x08\n\r\n\x05\x04\x03\x02\x0b\
    \x01\x12\x04\xa5\x02\t\"\n\r\n\x05\x04\x03\x02\x0b\x03\x12\x04\xa5\x02%'\
    \n8\n\x03\x04\x03\t\x12\x04\xa7\x02\x02\x17\x1a+\x201,\x206,\x209,\x20an\
    d\x2010\x20were\x20old\x20int64\x20histograms\n\n\x0c\n\x04\x04\x03\t\0\
    \x12\x04\xa7\x02\x0b\x0c\n\r\n\x05\x04\x03\t\0\x01\x12\x04\xa7\x02\x0b\
    \x0c\n\r\n\x05\x04\x03\t\0\x02\x12\x04\xa7\x02\x0b\x0c\n\x0c\n\x04\x04\
    \x03\t\x01\x12\x04\xa7\x02\x0e\x0f\n\r\n\x05\x04\x03\t\x01\x01\x12\x04\
    \xa7\x02\x0e\x0f\n\r\n\x05\x04\x03\t\x01\x02\x12\x04\xa7\x02\x0e\x0f\n\
    \x0c\n\x04\x04\x03\t\x02\x12\x04\xa7\x02\x11\x12\n\r\n\x05\x04\x03\t\x02\
    \x01\x12\x04\xa7\x02\x11\x12\n\r\n\x05\x04\x03\t\x02\x02\x12\x04\xa7\x02\
    \x11\x12\n\x0c\n\x04\x04\x03\t\x03\x12\x04\xa7\x02\x14\x16\n\r\n\x05\x04\
    \x03\t\x03\x01\x12\x04\xa7\x02\x14\x16\n\r\n\x05\x04\x03\t\x03\x02\x12\
    \x04\xa7\x02\x14\x16\n\x0c\n\x02\x04\x04\x12\x06\xaa\x02\0\xae\x02\x01\n\
    \x0b\n\x03\x04\x04\x01\x12\x04\xaa\x02\x08\x14\n\x0c\n\x04\x04\x04\x02\0\
    \x12\x04\xab\x02\x02!\n\r\n\x05\x04\x04\x02\0\x05\x12\x04\xab\x02\x02\
    \x08\n\r\n\x05\x04\x04\x02\0\x01\x12\x04\xab\x02\t\x1c\n\r\n\x05\x04\x04\
    \x02\0\x03\x12\x04\xab\x02\x1f\x20\n\x0c\n\x04\x04\x04\x02\x01\x12\x04\
    \xac\x02\x02\x19\n\r\n\x05\x04\x04\x02\x01\x05\x12\x04\xac\x02\x02\x08\n\
    \r\n\x05\x04\x04\x02\x01\x01\x12\x04\xac\x02\t\x14\n\r\n\x05\x04\x04\x02\
    \x01\x03\x12\x04\xac\x02\x17\x18\n\x0c\n\x04\x04\x04\x02\x02\x12\x04\xad\
    \x02\x02\x1c\n\r\n\x05\x04\x04\x02\x02\x05\x12\x04\xad\x02\x02\x08\n\r\n\
    \x05\x04\x04\x02\x02\x01\x12\x04\xad\x02\t\x17\n\r\n\x05\x04\x04\x02\x02\
    \x03\x12\x04\xad\x02\x1a\x1b\n\x0c\n\x02\x04\x05\x12\x06\xb0\x02\0\xb3\
    \x02\x01\n\x0b\n\x03\x04\x05\x01\x12\x04\xb0\x02\x08'\n\x0c\n\x04\x04\
    \x05\x02\0\x12\x04\xb1\x02\x02,\n\r\n\x05\x04\x05\x02\0\x06\x12\x04\xb1\
    \x02\x02\x13\n\r\n\x05\x04\x05\x02\0\x01\x12\x04\xb1\x02\x14'\n\r\n\x05\
    \x04\x05\x02\0\x03\x12\x04\xb1\x02*+\n\x0c\n\x04\x04\x05\x02\x01\x12\x04\
    \xb2\x02\x02\x1b\n\r\n\x05\x04\x05\x02\x01\x06\x12\x04\xb2\x02\x02\x0e\n\
    \r\n\x05\x04\x05\x02\x01\x01\x12\x04\xb2\x02\x0f\x16\n\r\n\x05\x04\x05\
    \x02\x01\x03\x12\x04\xb2\x02\x19\x1a\n\x0c\n\x02\x04\x06\x12\x06\xb5\x02\
    \0\xb8\x02\x01\n\x0b\n\x03\x04\x06\x01\x12\x04\xb5\x02\x08\x1f\n\x0c\n\
    \x04\x04\x06\x02\0\x12\x04\xb6\x02\x02\x1b\n\r\n\x05\x04\x06\x02\0\x06\
    \x12\x04\xb6\x02\x02\x0e\n\r\n\x05\x04\x06\x02\0\x01\x12\x04\xb6\x02\x0f\
    \x16\n\r\n\x05\x04\x06\x02\0\x03\x12\x04\xb6\x02\x19\x1a\n\x0c\n\x04\x04\
    \x06\x02\x01\x12\x04\xb7\x02\x02*\n\r\n\x05\x04\x06\x02\x01\x06\x12\x04\
    \xb7\x02\x02\x17\n\r\n\x05\x04\x06\x02\x01\x01\x12\x04\xb7\x02\x18%\n\r\
    \n\x05\x04\x06\x02\x01\x03\x12\x04\xb7\x02()\n\x0c\n\x02\x04\x07\x12\x06\
    \xba\x02\0\xc1\x02\x01\n\x0b\n\x03\x04\x07\x01\x12\x04\xba\x02\x08\x11\n\
    =\n\x04\x04\x07\x02\0\x12\x04\xbb\x02\x02\x19\"/\x20required;\x20eg\x20\
    \"String!\"\x20for\x20User.email:String!\n\n\r\n\x05\x04\x07\x02\0\x05\
    \x12\x04\xbb\x02\x02\x08\n\r\n\x05\x04\x07\x02\0\x01\x12\x04\xbb\x02\t\
    \x14\n\r\n\x05\x04\x07\x02\0\x03\x12\x04\xbb\x02\x17\x18\n\x0c\n\x04\x04\
    \x07\x02\x01\x12\x04\xbc\x02\x02\x1a\n\r\n\x05\x04\x07\x02\x01\x05\x12\
    \x04\xbc\x02\x02\x08\n\r\n\x05\x04\x07\x02\x01\x01\x12\x04\xbc\x02\t\x15\
    \n\r\n\x05\x04\x07\x02\x01\x03\x12\x04\xbc\x02\x18\x19\n\x0c\n\x04\x04\
    \x07\x02\x02\x12\x04\xbd\x02\x02\x13\n\r\n\x05\x04\x07\x02\x02\x05\x12\
    \x04\xbd\x02\x02\x08\n\r\n\x05\x04\x07\x02\x02\x01\x12\x04\xbd\x02\t\x0e\
    \n\r\n\x05\x04\x07\x02\x02\x03\x12\x04\xbd\x02\x11\x12\n\x0c\n\x04\x04\
    \x07\x02\x03\x12\x04\xbe\x02\x02(\n\r\n\x05\x04\x07\x02\x03\x05\x12\x04\
    \xbe\x02\x02\x08\n\r\n\x05\x04\x07\x02\x03\x01\x12\x04\xbe\x02\t#\n\r\n\
    \x05\x04\x07\x02\x03\x03\x12\x04\xbe\x02&'\n:\n\x04\x04\x07\x02\x04\x12\
    \x04\xbf\x02\x02$\",\x20Duration\x20histogram;\x20see\x20docs/histograms\
    .md\n\n\r\n\x05\x04\x07\x02\x04\x04\x12\x04\xbf\x02\x02\n\n\r\n\x05\x04\
    \x07\x02\x04\x05\x12\x04\xbf\x02\x0b\x11\n\r\n\x05\x04\x07\x02\x04\x01\
    \x12\x04\xbf\x02\x12\x1f\n\r\n\x05\x04\x07\x02\x04\x03\x12\x04\xbf\x02\"\
    #\n\x0b\n\x03\x04\x07\t\x12\x04\xc0\x02\x02\x16\n\x0c\n\x04\x04\x07\t\0\
    \x12\x04\xc0\x02\x0b\x0c\n\r\n\x05\x04\x07\t\0\x01\x12\x04\xc0\x02\x0b\
    \x0c\n\r\n\x05\x04\x07\t\0\x02\x12\x04\xc0\x02\x0b\x0c\n\x0c\n\x04\x04\
    \x07\t\x01\x12\x04\xc0\x02\x0e\x0f\n\r\n\x05\x04\x07\t\x01\x01\x12\x04\
    \xc0\x02\x0e\x0f\n\r\n\x05\x04\x07\t\x01\x02\x12\x04\xc0\x02\x0e\x0f\n\
    \x0c\n\x04\x04\x07\t\x02\x12\x04\xc0\x02\x11\x12\n\r\n\x05\x04\x07\t\x02\
    \x01\x12\x04\xc0\x02\x11\x12\n\r\n\x05\x04\x07\t\x02\x02\x12\x04\xc0\x02\
    \x11\x12\n\x0c\n\x04\x04\x07\t\x03\x12\x04\xc0\x02\x14\x15\n\r\n\x05\x04\
    \x07\t\x03\x01\x12\x04\xc0\x02\x14\x15\n\r\n\x05\x04\x07\t\x03\x02\x12\
    \x04\xc0\x02\x14\x15\n\x0c\n\x02\x04\x08\x12\x06\xc3\x02\0\xc7\x02\x01\n\
    \x0b\n\x03\x04\x08\x01\x12\x04\xc3\x02\x08\x10\n:\n\x04\x04\x08\x02\0\
    \x12\x04\xc5\x02\x02,\x1a,\x20Key\x20is\x20(eg)\x20\"email\"\x20for\x20U\
    ser.email:String!\n\n\r\n\x05\x04\x08\x02\0\x06\x12\x04\xc5\x02\x02\x18\
    \n\r\n\x05\x04\x08\x02\0\x01\x12\x04\xc5\x02\x19'\n\r\n\x05\x04\x08\x02\
    \0\x03\x12\x04\xc5\x02*+\n\x0b\n\x03\x04\x08\t\x12\x04\xc6\x02\x02\x10\n\
    \x0c\n\x04\x04\x08\t\0\x12\x04\xc6\x02\x0b\x0c\n\r\n\x05\x04\x08\t\0\x01\
    \x12\x04\xc6\x02\x0b\x0c\n\r\n\x05\x04\x08\t\0\x02\x12\x04\xc6\x02\x0b\
    \x0c\n\x0c\n\x04\x04\x08\t\x01\x12\x04\xc6\x02\x0e\x0f\n\r\n\x05\x04\x08\
    \t\x01\x01\x12\x04\xc6\x02\x0e\x0f\n\r\n\x05\x04\x08\t\x01\x02\x12\x04\
    \xc6\x02\x0e\x0f\n\x0c\n\x02\x04\t\x12\x06\xca\x02\0\xcd\x02\x01\n\x0b\n\
    \x03\x04\t\x01\x12\x04\xca\x02\x08\r\n;\n\x04\x04\t\x02\0\x12\x04\xcb\
    \x02\x02\x12\"-\x20required;\x20eg\x20\"email\"\x20for\x20User.email:Str\
    ing!\n\n\r\n\x05\x04\t\x02\0\x05\x12\x04\xcb\x02\x02\x08\n\r\n\x05\x04\t\
    \x02\0\x01\x12\x04\xcb\x02\t\r\n\r\n\x05\x04\t\x02\0\x03\x12\x04\xcb\x02\
    \x10\x11\n=\n\x04\x04\t\x02\x01\x12\x04\xcc\x02\x02\x19\"/\x20required;\
    \x20eg\x20\"String!\"\x20for\x20User.email:String!\n\n\r\n\x05\x04\t\x02\
    \x01\x05\x12\x04\xcc\x02\x02\x08\n\r\n\x05\x04\t\x02\x01\x01\x12\x04\xcc\
    \x02\t\x14\n\r\n\x05\x04\t\x02\x01\x03\x12\x04\xcc\x02\x17\x18\n\x0c\n\
    \x02\x04\n\x12\x06\xcf\x02\0\xd2\x02\x01\n\x0b\n\x03\x04\n\x01\x12\x04\
    \xcf\x02\x08\x0c\n:\n\x04\x04\n\x02\0\x12\x04\xd0\x02\x02\x12\",\x20requ\
    ired;\x20eg\x20\"User\"\x20for\x20User.email:String!\n\n\r\n\x05\x04\n\
    \x02\0\x05\x12\x04\xd0\x02\x02\x08\n\r\n\x05\x04\n\x02\0\x01\x12\x04\xd0\
    \x02\t\r\n\r\n\x05\x04\n\x02\0\x03\x12\x04\xd0\x02\x10\x11\n\x0c\n\x04\
    \x04\n\x02\x01\x12\x04\xd1\x02\x02\x1b\n\r\n\x05\x04\n\x02\x01\x04\x12\
    \x04\xd1\x02\x02\n\n\r\n\x05\x04\n\x02\x01\x06\x12\x04\xd1\x02\x0b\x10\n\
    \r\n\x05\x04\n\x02\x01\x01\x12\x04\xd1\x02\x11\x16\n\r\n\x05\x04\n\x02\
    \x01\x03\x12\x04\xd1\x02\x19\x1a\n\x8f\x05\n\x02\x04\x0b\x12\x06\xdc\x02\
    \0\xee\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\xdc\x02\x08\x0e\n\x0c\n\x04\x04\x0b\x02\0\x12\x04\xdd\
    \x02\x02\x1a\n\r\n\x05\x04\x0b\x02\0\x06\x12\x04\xdd\x02\x02\x0e\n\r\n\
    \x05\x04\x0b\x02\0\x01\x12\x04\xdd\x02\x0f\x15\n\r\n\x05\x04\x0b\x02\0\
    \x03\x12\x04\xdd\x02\x18\x19\n\xb6\x03\n\x04\x04\x0b\x02\x01\x12\x04\xe7\
    \x02\x023\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\xe7\x02\x02\x1d\n\r\n\x05\x04\x0b\x02\x01\x01\
    \x12\x04\xe7\x02\x1e.\n\r\n\x05\x04\x0b\x02\x01\x03\x12\x04\xe7\x0212\n\
    \xf8\x02\n\x04\x04\x0b\x02\x02\x12\x04\xed\x02\x02)\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\x20the\
    re\x20are\x20no\x20traces\x20and\x20no\x20end_time\x20present\x20the\x20\
    report\x20will\x20not\x20be\x20able\x20to\x20be\x20processed.\n\x20Note:\
    \x20This\x20will\x20override\x20the\x20end_time\x20from\x20traces.\n\"'\
    \x20required\x20if\x20no\x20traces\x20in\x20this\x20message\n\n\r\n\x05\
    \x04\x0b\x02\x02\x06\x12\x04\xed\x02\x02\x1b\n\r\n\x05\x04\x0b\x02\x02\
    \x01\x12\x04\xed\x02\x1c$\n\r\n\x05\x04\x0b\x02\x02\x03\x12\x04\xed\x02'\
    (\n\x0c\n\x02\x04\x0c\x12\x06\xf0\x02\0\xf6\x02\x01\n\x0b\n\x03\x04\x0c\
    \x01\x12\x04\xf0\x02\x08\x1b\n\x0c\n\x04\x04\x0c\x02\0\x12\x04\xf1\x02\
    \x02\x1b\n\r\n\x05\x04\x0c\x02\0\x06\x12\x04\xf1\x02\x02\x0e\n\r\n\x05\
    \x04\x0c\x02\0\x01\x12\x04\xf1\x02\x0f\x16\n\r\n\x05\x04\x0c\x02\0\x03\
    \x12\x04\xf1\x02\x19\x1a\n\x0c\n\x04\x04\x0c\x02\x01\x12\x04\xf2\x02\x02\
    ,\n\r\n\x05\x04\x0c\x02\x01\x06\x12\x04\xf2\x02\x02\x13\n\r\n\x05\x04\
    \x0c\x02\x01\x01\x12\x04\xf2\x02\x14'\n\r\n\x05\x04\x0c\x02\x01\x03\x12\
    \x04\xf2\x02*+\n!\n\x04\x04\x0c\x02\x02\x12\x04\xf4\x02\x02*\x1a\x13\x20\
    Key\x20is\x20type\x20name.\n\n\r\n\x05\x04\x0c\x02\x02\x06\x12\x04\xf4\
    \x02\x02\x17\n\r\n\x05\x04\x0c\x02\x02\x01\x12\x04\xf4\x02\x18%\n\r\n\
    \x05\x04\x0c\x02\x02\x03\x12\x04\xf4\x02()\no\n\x02\x04\r\x12\x06\xf9\
    \x02\0\x80\x03\x01\x1aa\x20A\x20sequence\x20of\x20traces\x20and\x20stats\
    .\x20An\x20individual\x20trace\x20should\x20either\x20be\x20counted\x20a\
    s\x20a\x20stat\x20or\x20trace\n\n\x0b\n\x03\x04\r\x01\x12\x04\xf9\x02\
    \x08\x16\n\x0c\n\x04\x04\r\x02\0\x12\x04\xfa\x02\x02\x1b\n\r\n\x05\x04\r\
    \x02\0\x04\x12\x04\xfa\x02\x02\n\n\r\n\x05\x04\r\x02\0\x06\x12\x04\xfa\
    \x02\x0b\x10\n\r\n\x05\x04\r\x02\0\x01\x12\x04\xfa\x02\x11\x16\n\r\n\x05\
    \x04\r\x02\0\x03\x12\x04\xfa\x02\x19\x1a\n\x0c\n\x04\x04\r\x02\x01\x12\
    \x04\xfb\x02\x026\n\r\n\x05\x04\r\x02\x01\x04\x12\x04\xfb\x02\x02\n\n\r\
    \n\x05\x04\r\x02\x01\x06\x12\x04\xfb\x02\x0b\x1e\n\r\n\x05\x04\r\x02\x01\
    \x01\x12\x04\xfb\x02\x1f1\n\r\n\x05\x04\r\x02\x01\x03\x12\x04\xfb\x0245\
    \n\xda\x01\n\x04\x04\r\x02\x02\x12\x04\xff\x02\x02;\x1a\xcb\x01\x20This\
    \x20field\x20is\x20used\x20to\x20validate\x20that\x20the\x20algorithm\
    \x20used\x20to\x20construct\x20`stats_with_context`\n\x20matches\x20simi\
    lar\x20algorithms\x20in\x20Apollo's\x20servers.\x20It\x20is\x20otherwise\
    \x20ignored\x20and\x20should\x20not\n\x20be\x20included\x20in\x20reports\
    .\n\n\r\n\x05\x04\r\x02\x02\x04\x12\x04\xff\x02\x02\n\n\r\n\x05\x04\r\
    \x02\x02\x06\x12\x04\xff\x02\x0b\x10\n\r\n\x05\x04\r\x02\x02\x01\x12\x04\
    \xff\x02\x116\n\r\n\x05\x04\r\x02\x02\x03\x12\x04\xff\x029:b\x06proto3\
";

static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;

fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto {
    Message::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()
    })
}