// This file is generated by rust-protobuf 3.3.0. Do not edit
// .proto file is parsed by protoc --rust-out=...
// @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_results)]
#![allow(unused_mut)]

//! Generated file from `sp_common.proto`

/// Generated files are compatible only with the same version
/// of protobuf runtime.
const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_3_3_0;

///  Common response message for many gRPC methods
// @@protoc_insertion_point(message:protos.StandardResponse)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct StandardResponse {
    // message fields
    ///  Co-relation ID for the request / response
    // @@protoc_insertion_point(field:protos.StandardResponse.id)
    pub id: ::std::string::String,
    // @@protoc_insertion_point(field:protos.StandardResponse.code)
    pub code: ::protobuf::EnumOrUnknown<ResponseCode>,
    // @@protoc_insertion_point(field:protos.StandardResponse.message)
    pub message: ::std::string::String,
    // special fields
    // @@protoc_insertion_point(special_field:protos.StandardResponse.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

    fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
        let mut fields = ::std::vec::Vec::with_capacity(3);
        let mut oneofs = ::std::vec::Vec::with_capacity(0);
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "id",
            |m: &StandardResponse| { &m.id },
            |m: &mut StandardResponse| { &mut m.id },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "code",
            |m: &StandardResponse| { &m.code },
            |m: &mut StandardResponse| { &mut m.code },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "message",
            |m: &StandardResponse| { &m.message },
            |m: &mut StandardResponse| { &mut m.message },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<StandardResponse>(
            "StandardResponse",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for StandardResponse {
    const NAME: &'static str = "StandardResponse";

    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> {
        while let Some(tag) = is.read_raw_tag_or_eof()? {
            match tag {
                10 => {
                    self.id = is.read_string()?;
                },
                16 => {
                    self.code = is.read_enum_or_unknown()?;
                },
                26 => {
                    self.message = is.read_string()?;
                },
                tag => {
                    ::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
                },
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u64 {
        let mut my_size = 0;
        if !self.id.is_empty() {
            my_size += ::protobuf::rt::string_size(1, &self.id);
        }
        if self.code != ::protobuf::EnumOrUnknown::new(ResponseCode::RESPONSE_CODE_UNSET) {
            my_size += ::protobuf::rt::int32_size(2, self.code.value());
        }
        if !self.message.is_empty() {
            my_size += ::protobuf::rt::string_size(3, &self.message);
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
        self.special_fields.cached_size().set(my_size as u32);
        my_size
    }

    fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
        if !self.id.is_empty() {
            os.write_string(1, &self.id)?;
        }
        if self.code != ::protobuf::EnumOrUnknown::new(ResponseCode::RESPONSE_CODE_UNSET) {
            os.write_enum(2, ::protobuf::EnumOrUnknown::value(&self.code))?;
        }
        if !self.message.is_empty() {
            os.write_string(3, &self.message)?;
        }
        os.write_unknown_fields(self.special_fields.unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn special_fields(&self) -> &::protobuf::SpecialFields {
        &self.special_fields
    }

    fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields {
        &mut self.special_fields
    }

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

    fn clear(&mut self) {
        self.id.clear();
        self.code = ::protobuf::EnumOrUnknown::new(ResponseCode::RESPONSE_CODE_UNSET);
        self.message.clear();
        self.special_fields.clear();
    }

    fn default_instance() -> &'static StandardResponse {
        static instance: StandardResponse = StandardResponse {
            id: ::std::string::String::new(),
            code: ::protobuf::EnumOrUnknown::from_i32(0),
            message: ::std::string::String::new(),
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for StandardResponse {
    fn descriptor() -> ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new();
        descriptor.get(|| file_descriptor().message_by_package_relative_name("StandardResponse").unwrap()).clone()
    }
}

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

impl ::protobuf::reflect::ProtobufValue for StandardResponse {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

///  Used to indicate who a command is intended for
// @@protoc_insertion_point(message:protos.Audience)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct Audience {
    // message fields
    ///  Name of the service -- let's include the service name on all calls, we can
    ///  optimize later ~DS
    // @@protoc_insertion_point(field:protos.Audience.service_name)
    pub service_name: ::std::string::String,
    ///  Name of the component the SDK is interacting with (ie. kafka-$topic-name)
    // @@protoc_insertion_point(field:protos.Audience.component_name)
    pub component_name: ::std::string::String,
    ///  Consumer or Producer
    // @@protoc_insertion_point(field:protos.Audience.operation_type)
    pub operation_type: ::protobuf::EnumOrUnknown<OperationType>,
    ///  Name for the consumer or producer
    // @@protoc_insertion_point(field:protos.Audience.operation_name)
    pub operation_name: ::std::string::String,
    // special fields
    // @@protoc_insertion_point(special_field:protos.Audience.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

    fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
        let mut fields = ::std::vec::Vec::with_capacity(4);
        let mut oneofs = ::std::vec::Vec::with_capacity(0);
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "service_name",
            |m: &Audience| { &m.service_name },
            |m: &mut Audience| { &mut m.service_name },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "component_name",
            |m: &Audience| { &m.component_name },
            |m: &mut Audience| { &mut m.component_name },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "operation_type",
            |m: &Audience| { &m.operation_type },
            |m: &mut Audience| { &mut m.operation_type },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "operation_name",
            |m: &Audience| { &m.operation_name },
            |m: &mut Audience| { &mut m.operation_name },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<Audience>(
            "Audience",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for Audience {
    const NAME: &'static str = "Audience";

    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> {
        while let Some(tag) = is.read_raw_tag_or_eof()? {
            match tag {
                10 => {
                    self.service_name = is.read_string()?;
                },
                18 => {
                    self.component_name = is.read_string()?;
                },
                24 => {
                    self.operation_type = is.read_enum_or_unknown()?;
                },
                34 => {
                    self.operation_name = is.read_string()?;
                },
                tag => {
                    ::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
                },
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u64 {
        let mut my_size = 0;
        if !self.service_name.is_empty() {
            my_size += ::protobuf::rt::string_size(1, &self.service_name);
        }
        if !self.component_name.is_empty() {
            my_size += ::protobuf::rt::string_size(2, &self.component_name);
        }
        if self.operation_type != ::protobuf::EnumOrUnknown::new(OperationType::OPERATION_TYPE_UNSET) {
            my_size += ::protobuf::rt::int32_size(3, self.operation_type.value());
        }
        if !self.operation_name.is_empty() {
            my_size += ::protobuf::rt::string_size(4, &self.operation_name);
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
        self.special_fields.cached_size().set(my_size as u32);
        my_size
    }

    fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
        if !self.service_name.is_empty() {
            os.write_string(1, &self.service_name)?;
        }
        if !self.component_name.is_empty() {
            os.write_string(2, &self.component_name)?;
        }
        if self.operation_type != ::protobuf::EnumOrUnknown::new(OperationType::OPERATION_TYPE_UNSET) {
            os.write_enum(3, ::protobuf::EnumOrUnknown::value(&self.operation_type))?;
        }
        if !self.operation_name.is_empty() {
            os.write_string(4, &self.operation_name)?;
        }
        os.write_unknown_fields(self.special_fields.unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn special_fields(&self) -> &::protobuf::SpecialFields {
        &self.special_fields
    }

    fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields {
        &mut self.special_fields
    }

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

    fn clear(&mut self) {
        self.service_name.clear();
        self.component_name.clear();
        self.operation_type = ::protobuf::EnumOrUnknown::new(OperationType::OPERATION_TYPE_UNSET);
        self.operation_name.clear();
        self.special_fields.clear();
    }

    fn default_instance() -> &'static Audience {
        static instance: Audience = Audience {
            service_name: ::std::string::String::new(),
            component_name: ::std::string::String::new(),
            operation_type: ::protobuf::EnumOrUnknown::from_i32(0),
            operation_name: ::std::string::String::new(),
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for Audience {
    fn descriptor() -> ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new();
        descriptor.get(|| file_descriptor().message_by_package_relative_name("Audience").unwrap()).clone()
    }
}

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

impl ::protobuf::reflect::ProtobufValue for Audience {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:protos.Metric)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct Metric {
    // message fields
    // @@protoc_insertion_point(field:protos.Metric.name)
    pub name: ::std::string::String,
    // @@protoc_insertion_point(field:protos.Metric.labels)
    pub labels: ::std::collections::HashMap<::std::string::String, ::std::string::String>,
    // @@protoc_insertion_point(field:protos.Metric.value)
    pub value: f64,
    // @@protoc_insertion_point(field:protos.Metric.audience)
    pub audience: ::protobuf::MessageField<Audience>,
    // special fields
    // @@protoc_insertion_point(special_field:protos.Metric.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

    fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
        let mut fields = ::std::vec::Vec::with_capacity(4);
        let mut oneofs = ::std::vec::Vec::with_capacity(0);
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "name",
            |m: &Metric| { &m.name },
            |m: &mut Metric| { &mut m.name },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_map_simpler_accessor::<_, _, _>(
            "labels",
            |m: &Metric| { &m.labels },
            |m: &mut Metric| { &mut m.labels },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "value",
            |m: &Metric| { &m.value },
            |m: &mut Metric| { &mut m.value },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_message_field_accessor::<_, Audience>(
            "audience",
            |m: &Metric| { &m.audience },
            |m: &mut Metric| { &mut m.audience },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<Metric>(
            "Metric",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for Metric {
    const NAME: &'static str = "Metric";

    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> {
        while let Some(tag) = is.read_raw_tag_or_eof()? {
            match tag {
                10 => {
                    self.name = is.read_string()?;
                },
                18 => {
                    let len = is.read_raw_varint32()?;
                    let old_limit = is.push_limit(len as u64)?;
                    let mut key = ::std::default::Default::default();
                    let mut value = ::std::default::Default::default();
                    while let Some(tag) = is.read_raw_tag_or_eof()? {
                        match tag {
                            10 => key = is.read_string()?,
                            18 => value = is.read_string()?,
                            _ => ::protobuf::rt::skip_field_for_tag(tag, is)?,
                        };
                    }
                    is.pop_limit(old_limit);
                    self.labels.insert(key, value);
                },
                25 => {
                    self.value = is.read_double()?;
                },
                34 => {
                    ::protobuf::rt::read_singular_message_into_field(is, &mut self.audience)?;
                },
                tag => {
                    ::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
                },
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u64 {
        let mut my_size = 0;
        if !self.name.is_empty() {
            my_size += ::protobuf::rt::string_size(1, &self.name);
        }
        for (k, v) in &self.labels {
            let mut entry_size = 0;
            entry_size += ::protobuf::rt::string_size(1, &k);
            entry_size += ::protobuf::rt::string_size(2, &v);
            my_size += 1 + ::protobuf::rt::compute_raw_varint64_size(entry_size) + entry_size
        };
        if self.value != 0. {
            my_size += 1 + 8;
        }
        if let Some(v) = self.audience.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint64_size(len) + len;
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
        self.special_fields.cached_size().set(my_size as u32);
        my_size
    }

    fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
        if !self.name.is_empty() {
            os.write_string(1, &self.name)?;
        }
        for (k, v) in &self.labels {
            let mut entry_size = 0;
            entry_size += ::protobuf::rt::string_size(1, &k);
            entry_size += ::protobuf::rt::string_size(2, &v);
            os.write_raw_varint32(18)?; // Tag.
            os.write_raw_varint32(entry_size as u32)?;
            os.write_string(1, &k)?;
            os.write_string(2, &v)?;
        };
        if self.value != 0. {
            os.write_double(3, self.value)?;
        }
        if let Some(v) = self.audience.as_ref() {
            ::protobuf::rt::write_message_field_with_cached_size(4, v, os)?;
        }
        os.write_unknown_fields(self.special_fields.unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn special_fields(&self) -> &::protobuf::SpecialFields {
        &self.special_fields
    }

    fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields {
        &mut self.special_fields
    }

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

    fn clear(&mut self) {
        self.name.clear();
        self.labels.clear();
        self.value = 0.;
        self.audience.clear();
        self.special_fields.clear();
    }

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

impl ::protobuf::MessageFull for Metric {
    fn descriptor() -> ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new();
        descriptor.get(|| file_descriptor().message_by_package_relative_name("Metric").unwrap()).clone()
    }
}

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

impl ::protobuf::reflect::ProtobufValue for Metric {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:protos.TailRequest)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct TailRequest {
    // message fields
    // @@protoc_insertion_point(field:protos.TailRequest.type)
    pub type_: ::protobuf::EnumOrUnknown<TailRequestType>,
    // @@protoc_insertion_point(field:protos.TailRequest._id)
    pub _id: ::std::option::Option<::std::string::String>,
    // @@protoc_insertion_point(field:protos.TailRequest.audience)
    pub audience: ::protobuf::MessageField<Audience>,
    // @@protoc_insertion_point(field:protos.TailRequest.pipeline_id)
    pub pipeline_id: ::std::option::Option<::std::string::String>,
    // @@protoc_insertion_point(field:protos.TailRequest._metadata)
    pub _metadata: ::std::collections::HashMap<::std::string::String, ::std::string::String>,
    // special fields
    // @@protoc_insertion_point(special_field:protos.TailRequest.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

    fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
        let mut fields = ::std::vec::Vec::with_capacity(5);
        let mut oneofs = ::std::vec::Vec::with_capacity(0);
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "type",
            |m: &TailRequest| { &m.type_ },
            |m: &mut TailRequest| { &mut m.type_ },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "_id",
            |m: &TailRequest| { &m._id },
            |m: &mut TailRequest| { &mut m._id },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_message_field_accessor::<_, Audience>(
            "audience",
            |m: &TailRequest| { &m.audience },
            |m: &mut TailRequest| { &mut m.audience },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "pipeline_id",
            |m: &TailRequest| { &m.pipeline_id },
            |m: &mut TailRequest| { &mut m.pipeline_id },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_map_simpler_accessor::<_, _, _>(
            "_metadata",
            |m: &TailRequest| { &m._metadata },
            |m: &mut TailRequest| { &mut m._metadata },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<TailRequest>(
            "TailRequest",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for TailRequest {
    const NAME: &'static str = "TailRequest";

    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> {
        while let Some(tag) = is.read_raw_tag_or_eof()? {
            match tag {
                8 => {
                    self.type_ = is.read_enum_or_unknown()?;
                },
                18 => {
                    self._id = ::std::option::Option::Some(is.read_string()?);
                },
                26 => {
                    ::protobuf::rt::read_singular_message_into_field(is, &mut self.audience)?;
                },
                34 => {
                    self.pipeline_id = ::std::option::Option::Some(is.read_string()?);
                },
                8002 => {
                    let len = is.read_raw_varint32()?;
                    let old_limit = is.push_limit(len as u64)?;
                    let mut key = ::std::default::Default::default();
                    let mut value = ::std::default::Default::default();
                    while let Some(tag) = is.read_raw_tag_or_eof()? {
                        match tag {
                            10 => key = is.read_string()?,
                            18 => value = is.read_string()?,
                            _ => ::protobuf::rt::skip_field_for_tag(tag, is)?,
                        };
                    }
                    is.pop_limit(old_limit);
                    self._metadata.insert(key, value);
                },
                tag => {
                    ::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
                },
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u64 {
        let mut my_size = 0;
        if self.type_ != ::protobuf::EnumOrUnknown::new(TailRequestType::TAIL_REQUEST_TYPE_UNSET) {
            my_size += ::protobuf::rt::int32_size(1, self.type_.value());
        }
        if let Some(v) = self._id.as_ref() {
            my_size += ::protobuf::rt::string_size(2, &v);
        }
        if let Some(v) = self.audience.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint64_size(len) + len;
        }
        if let Some(v) = self.pipeline_id.as_ref() {
            my_size += ::protobuf::rt::string_size(4, &v);
        }
        for (k, v) in &self._metadata {
            let mut entry_size = 0;
            entry_size += ::protobuf::rt::string_size(1, &k);
            entry_size += ::protobuf::rt::string_size(2, &v);
            my_size += 2 + ::protobuf::rt::compute_raw_varint64_size(entry_size) + entry_size
        };
        my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
        self.special_fields.cached_size().set(my_size as u32);
        my_size
    }

    fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
        if self.type_ != ::protobuf::EnumOrUnknown::new(TailRequestType::TAIL_REQUEST_TYPE_UNSET) {
            os.write_enum(1, ::protobuf::EnumOrUnknown::value(&self.type_))?;
        }
        if let Some(v) = self._id.as_ref() {
            os.write_string(2, v)?;
        }
        if let Some(v) = self.audience.as_ref() {
            ::protobuf::rt::write_message_field_with_cached_size(3, v, os)?;
        }
        if let Some(v) = self.pipeline_id.as_ref() {
            os.write_string(4, v)?;
        }
        for (k, v) in &self._metadata {
            let mut entry_size = 0;
            entry_size += ::protobuf::rt::string_size(1, &k);
            entry_size += ::protobuf::rt::string_size(2, &v);
            os.write_raw_varint32(8002)?; // Tag.
            os.write_raw_varint32(entry_size as u32)?;
            os.write_string(1, &k)?;
            os.write_string(2, &v)?;
        };
        os.write_unknown_fields(self.special_fields.unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn special_fields(&self) -> &::protobuf::SpecialFields {
        &self.special_fields
    }

    fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields {
        &mut self.special_fields
    }

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

    fn clear(&mut self) {
        self.type_ = ::protobuf::EnumOrUnknown::new(TailRequestType::TAIL_REQUEST_TYPE_UNSET);
        self._id = ::std::option::Option::None;
        self.audience.clear();
        self.pipeline_id = ::std::option::Option::None;
        self._metadata.clear();
        self.special_fields.clear();
    }

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

impl ::protobuf::MessageFull for TailRequest {
    fn descriptor() -> ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new();
        descriptor.get(|| file_descriptor().message_by_package_relative_name("TailRequest").unwrap()).clone()
    }
}

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

impl ::protobuf::reflect::ProtobufValue for TailRequest {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

///  TailResponse originates in the SDK and then is sent to streamdal servers where
///  it is forwarded to the correct frontend streaming gRPC connection
// @@protoc_insertion_point(message:protos.TailResponse)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct TailResponse {
    // message fields
    // @@protoc_insertion_point(field:protos.TailResponse.type)
    pub type_: ::protobuf::EnumOrUnknown<TailResponseType>,
    // @@protoc_insertion_point(field:protos.TailResponse.tail_request_id)
    pub tail_request_id: ::std::string::String,
    // @@protoc_insertion_point(field:protos.TailResponse.audience)
    pub audience: ::protobuf::MessageField<Audience>,
    // @@protoc_insertion_point(field:protos.TailResponse.pipeline_id)
    pub pipeline_id: ::std::string::String,
    // @@protoc_insertion_point(field:protos.TailResponse.session_id)
    pub session_id: ::std::string::String,
    ///  Timestamp in nanoseconds
    // @@protoc_insertion_point(field:protos.TailResponse.timestamp_ns)
    pub timestamp_ns: i64,
    ///  Payload data. For errors, this will be the error message
    ///  For payloads, this will be JSON of the payload data, post processing
    // @@protoc_insertion_point(field:protos.TailResponse.original_data)
    pub original_data: ::std::vec::Vec<u8>,
    ///  For payloads, this will be the new data, post processing
    // @@protoc_insertion_point(field:protos.TailResponse.new_data)
    pub new_data: ::std::vec::Vec<u8>,
    // @@protoc_insertion_point(field:protos.TailResponse._metadata)
    pub _metadata: ::std::collections::HashMap<::std::string::String, ::std::string::String>,
    ///  Set by server to indicate that the response is a keepalive message
    // @@protoc_insertion_point(field:protos.TailResponse._keepalive)
    pub _keepalive: ::std::option::Option<bool>,
    // special fields
    // @@protoc_insertion_point(special_field:protos.TailResponse.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

    fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
        let mut fields = ::std::vec::Vec::with_capacity(10);
        let mut oneofs = ::std::vec::Vec::with_capacity(0);
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "type",
            |m: &TailResponse| { &m.type_ },
            |m: &mut TailResponse| { &mut m.type_ },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "tail_request_id",
            |m: &TailResponse| { &m.tail_request_id },
            |m: &mut TailResponse| { &mut m.tail_request_id },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_message_field_accessor::<_, Audience>(
            "audience",
            |m: &TailResponse| { &m.audience },
            |m: &mut TailResponse| { &mut m.audience },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "pipeline_id",
            |m: &TailResponse| { &m.pipeline_id },
            |m: &mut TailResponse| { &mut m.pipeline_id },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "session_id",
            |m: &TailResponse| { &m.session_id },
            |m: &mut TailResponse| { &mut m.session_id },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "timestamp_ns",
            |m: &TailResponse| { &m.timestamp_ns },
            |m: &mut TailResponse| { &mut m.timestamp_ns },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "original_data",
            |m: &TailResponse| { &m.original_data },
            |m: &mut TailResponse| { &mut m.original_data },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "new_data",
            |m: &TailResponse| { &m.new_data },
            |m: &mut TailResponse| { &mut m.new_data },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_map_simpler_accessor::<_, _, _>(
            "_metadata",
            |m: &TailResponse| { &m._metadata },
            |m: &mut TailResponse| { &mut m._metadata },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "_keepalive",
            |m: &TailResponse| { &m._keepalive },
            |m: &mut TailResponse| { &mut m._keepalive },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<TailResponse>(
            "TailResponse",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for TailResponse {
    const NAME: &'static str = "TailResponse";

    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> {
        while let Some(tag) = is.read_raw_tag_or_eof()? {
            match tag {
                8 => {
                    self.type_ = is.read_enum_or_unknown()?;
                },
                18 => {
                    self.tail_request_id = is.read_string()?;
                },
                26 => {
                    ::protobuf::rt::read_singular_message_into_field(is, &mut self.audience)?;
                },
                34 => {
                    self.pipeline_id = is.read_string()?;
                },
                42 => {
                    self.session_id = is.read_string()?;
                },
                48 => {
                    self.timestamp_ns = is.read_int64()?;
                },
                58 => {
                    self.original_data = is.read_bytes()?;
                },
                66 => {
                    self.new_data = is.read_bytes()?;
                },
                8002 => {
                    let len = is.read_raw_varint32()?;
                    let old_limit = is.push_limit(len as u64)?;
                    let mut key = ::std::default::Default::default();
                    let mut value = ::std::default::Default::default();
                    while let Some(tag) = is.read_raw_tag_or_eof()? {
                        match tag {
                            10 => key = is.read_string()?,
                            18 => value = is.read_string()?,
                            _ => ::protobuf::rt::skip_field_for_tag(tag, is)?,
                        };
                    }
                    is.pop_limit(old_limit);
                    self._metadata.insert(key, value);
                },
                8008 => {
                    self._keepalive = ::std::option::Option::Some(is.read_bool()?);
                },
                tag => {
                    ::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
                },
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u64 {
        let mut my_size = 0;
        if self.type_ != ::protobuf::EnumOrUnknown::new(TailResponseType::TAIL_RESPONSE_TYPE_UNSET) {
            my_size += ::protobuf::rt::int32_size(1, self.type_.value());
        }
        if !self.tail_request_id.is_empty() {
            my_size += ::protobuf::rt::string_size(2, &self.tail_request_id);
        }
        if let Some(v) = self.audience.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint64_size(len) + len;
        }
        if !self.pipeline_id.is_empty() {
            my_size += ::protobuf::rt::string_size(4, &self.pipeline_id);
        }
        if !self.session_id.is_empty() {
            my_size += ::protobuf::rt::string_size(5, &self.session_id);
        }
        if self.timestamp_ns != 0 {
            my_size += ::protobuf::rt::int64_size(6, self.timestamp_ns);
        }
        if !self.original_data.is_empty() {
            my_size += ::protobuf::rt::bytes_size(7, &self.original_data);
        }
        if !self.new_data.is_empty() {
            my_size += ::protobuf::rt::bytes_size(8, &self.new_data);
        }
        for (k, v) in &self._metadata {
            let mut entry_size = 0;
            entry_size += ::protobuf::rt::string_size(1, &k);
            entry_size += ::protobuf::rt::string_size(2, &v);
            my_size += 2 + ::protobuf::rt::compute_raw_varint64_size(entry_size) + entry_size
        };
        if let Some(v) = self._keepalive {
            my_size += 2 + 1;
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
        self.special_fields.cached_size().set(my_size as u32);
        my_size
    }

    fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
        if self.type_ != ::protobuf::EnumOrUnknown::new(TailResponseType::TAIL_RESPONSE_TYPE_UNSET) {
            os.write_enum(1, ::protobuf::EnumOrUnknown::value(&self.type_))?;
        }
        if !self.tail_request_id.is_empty() {
            os.write_string(2, &self.tail_request_id)?;
        }
        if let Some(v) = self.audience.as_ref() {
            ::protobuf::rt::write_message_field_with_cached_size(3, v, os)?;
        }
        if !self.pipeline_id.is_empty() {
            os.write_string(4, &self.pipeline_id)?;
        }
        if !self.session_id.is_empty() {
            os.write_string(5, &self.session_id)?;
        }
        if self.timestamp_ns != 0 {
            os.write_int64(6, self.timestamp_ns)?;
        }
        if !self.original_data.is_empty() {
            os.write_bytes(7, &self.original_data)?;
        }
        if !self.new_data.is_empty() {
            os.write_bytes(8, &self.new_data)?;
        }
        for (k, v) in &self._metadata {
            let mut entry_size = 0;
            entry_size += ::protobuf::rt::string_size(1, &k);
            entry_size += ::protobuf::rt::string_size(2, &v);
            os.write_raw_varint32(8002)?; // Tag.
            os.write_raw_varint32(entry_size as u32)?;
            os.write_string(1, &k)?;
            os.write_string(2, &v)?;
        };
        if let Some(v) = self._keepalive {
            os.write_bool(1001, v)?;
        }
        os.write_unknown_fields(self.special_fields.unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn special_fields(&self) -> &::protobuf::SpecialFields {
        &self.special_fields
    }

    fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields {
        &mut self.special_fields
    }

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

    fn clear(&mut self) {
        self.type_ = ::protobuf::EnumOrUnknown::new(TailResponseType::TAIL_RESPONSE_TYPE_UNSET);
        self.tail_request_id.clear();
        self.audience.clear();
        self.pipeline_id.clear();
        self.session_id.clear();
        self.timestamp_ns = 0;
        self.original_data.clear();
        self.new_data.clear();
        self._metadata.clear();
        self._keepalive = ::std::option::Option::None;
        self.special_fields.clear();
    }

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

impl ::protobuf::MessageFull for TailResponse {
    fn descriptor() -> ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new();
        descriptor.get(|| file_descriptor().message_by_package_relative_name("TailResponse").unwrap()).clone()
    }
}

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

impl ::protobuf::reflect::ProtobufValue for TailResponse {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:protos.AudienceRate)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct AudienceRate {
    // message fields
    // @@protoc_insertion_point(field:protos.AudienceRate.bytes)
    pub bytes: f64,
    // @@protoc_insertion_point(field:protos.AudienceRate.processed)
    pub processed: f64,
    // special fields
    // @@protoc_insertion_point(special_field:protos.AudienceRate.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

    fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
        let mut fields = ::std::vec::Vec::with_capacity(2);
        let mut oneofs = ::std::vec::Vec::with_capacity(0);
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "bytes",
            |m: &AudienceRate| { &m.bytes },
            |m: &mut AudienceRate| { &mut m.bytes },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "processed",
            |m: &AudienceRate| { &m.processed },
            |m: &mut AudienceRate| { &mut m.processed },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<AudienceRate>(
            "AudienceRate",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for AudienceRate {
    const NAME: &'static str = "AudienceRate";

    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> {
        while let Some(tag) = is.read_raw_tag_or_eof()? {
            match tag {
                9 => {
                    self.bytes = is.read_double()?;
                },
                17 => {
                    self.processed = is.read_double()?;
                },
                tag => {
                    ::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
                },
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u64 {
        let mut my_size = 0;
        if self.bytes != 0. {
            my_size += 1 + 8;
        }
        if self.processed != 0. {
            my_size += 1 + 8;
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
        self.special_fields.cached_size().set(my_size as u32);
        my_size
    }

    fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
        if self.bytes != 0. {
            os.write_double(1, self.bytes)?;
        }
        if self.processed != 0. {
            os.write_double(2, self.processed)?;
        }
        os.write_unknown_fields(self.special_fields.unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn special_fields(&self) -> &::protobuf::SpecialFields {
        &self.special_fields
    }

    fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields {
        &mut self.special_fields
    }

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

    fn clear(&mut self) {
        self.bytes = 0.;
        self.processed = 0.;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static AudienceRate {
        static instance: AudienceRate = AudienceRate {
            bytes: 0.,
            processed: 0.,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for AudienceRate {
    fn descriptor() -> ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new();
        descriptor.get(|| file_descriptor().message_by_package_relative_name("AudienceRate").unwrap()).clone()
    }
}

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

impl ::protobuf::reflect::ProtobufValue for AudienceRate {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:protos.Schema)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct Schema {
    // message fields
    // @@protoc_insertion_point(field:protos.Schema.json_schema)
    pub json_schema: ::std::vec::Vec<u8>,
    // @@protoc_insertion_point(field:protos.Schema._version)
    pub _version: i32,
    // @@protoc_insertion_point(field:protos.Schema._metadata)
    pub _metadata: ::std::collections::HashMap<::std::string::String, ::std::string::String>,
    // special fields
    // @@protoc_insertion_point(special_field:protos.Schema.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

    fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
        let mut fields = ::std::vec::Vec::with_capacity(3);
        let mut oneofs = ::std::vec::Vec::with_capacity(0);
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "json_schema",
            |m: &Schema| { &m.json_schema },
            |m: &mut Schema| { &mut m.json_schema },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "_version",
            |m: &Schema| { &m._version },
            |m: &mut Schema| { &mut m._version },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_map_simpler_accessor::<_, _, _>(
            "_metadata",
            |m: &Schema| { &m._metadata },
            |m: &mut Schema| { &mut m._metadata },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<Schema>(
            "Schema",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for Schema {
    const NAME: &'static str = "Schema";

    fn is_initialized(&self) -> bool {
        true
    }

    fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> {
        while let Some(tag) = is.read_raw_tag_or_eof()? {
            match tag {
                10 => {
                    self.json_schema = is.read_bytes()?;
                },
                800 => {
                    self._version = is.read_int32()?;
                },
                8002 => {
                    let len = is.read_raw_varint32()?;
                    let old_limit = is.push_limit(len as u64)?;
                    let mut key = ::std::default::Default::default();
                    let mut value = ::std::default::Default::default();
                    while let Some(tag) = is.read_raw_tag_or_eof()? {
                        match tag {
                            10 => key = is.read_string()?,
                            18 => value = is.read_string()?,
                            _ => ::protobuf::rt::skip_field_for_tag(tag, is)?,
                        };
                    }
                    is.pop_limit(old_limit);
                    self._metadata.insert(key, value);
                },
                tag => {
                    ::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
                },
            };
        }
        ::std::result::Result::Ok(())
    }

    // Compute sizes of nested messages
    #[allow(unused_variables)]
    fn compute_size(&self) -> u64 {
        let mut my_size = 0;
        if !self.json_schema.is_empty() {
            my_size += ::protobuf::rt::bytes_size(1, &self.json_schema);
        }
        if self._version != 0 {
            my_size += ::protobuf::rt::int32_size(100, self._version);
        }
        for (k, v) in &self._metadata {
            let mut entry_size = 0;
            entry_size += ::protobuf::rt::string_size(1, &k);
            entry_size += ::protobuf::rt::string_size(2, &v);
            my_size += 2 + ::protobuf::rt::compute_raw_varint64_size(entry_size) + entry_size
        };
        my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
        self.special_fields.cached_size().set(my_size as u32);
        my_size
    }

    fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
        if !self.json_schema.is_empty() {
            os.write_bytes(1, &self.json_schema)?;
        }
        if self._version != 0 {
            os.write_int32(100, self._version)?;
        }
        for (k, v) in &self._metadata {
            let mut entry_size = 0;
            entry_size += ::protobuf::rt::string_size(1, &k);
            entry_size += ::protobuf::rt::string_size(2, &v);
            os.write_raw_varint32(8002)?; // Tag.
            os.write_raw_varint32(entry_size as u32)?;
            os.write_string(1, &k)?;
            os.write_string(2, &v)?;
        };
        os.write_unknown_fields(self.special_fields.unknown_fields())?;
        ::std::result::Result::Ok(())
    }

    fn special_fields(&self) -> &::protobuf::SpecialFields {
        &self.special_fields
    }

    fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields {
        &mut self.special_fields
    }

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

    fn clear(&mut self) {
        self.json_schema.clear();
        self._version = 0;
        self._metadata.clear();
        self.special_fields.clear();
    }

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

impl ::protobuf::MessageFull for Schema {
    fn descriptor() -> ::protobuf::reflect::MessageDescriptor {
        static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new();
        descriptor.get(|| file_descriptor().message_by_package_relative_name("Schema").unwrap()).clone()
    }
}

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

impl ::protobuf::reflect::ProtobufValue for Schema {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

///  Common status codes used in gRPC method responses
#[derive(Clone,Copy,PartialEq,Eq,Debug,Hash)]
// @@protoc_insertion_point(enum:protos.ResponseCode)
pub enum ResponseCode {
    // @@protoc_insertion_point(enum_value:protos.ResponseCode.RESPONSE_CODE_UNSET)
    RESPONSE_CODE_UNSET = 0,
    // @@protoc_insertion_point(enum_value:protos.ResponseCode.RESPONSE_CODE_OK)
    RESPONSE_CODE_OK = 1,
    // @@protoc_insertion_point(enum_value:protos.ResponseCode.RESPONSE_CODE_BAD_REQUEST)
    RESPONSE_CODE_BAD_REQUEST = 2,
    // @@protoc_insertion_point(enum_value:protos.ResponseCode.RESPONSE_CODE_NOT_FOUND)
    RESPONSE_CODE_NOT_FOUND = 3,
    // @@protoc_insertion_point(enum_value:protos.ResponseCode.RESPONSE_CODE_INTERNAL_SERVER_ERROR)
    RESPONSE_CODE_INTERNAL_SERVER_ERROR = 4,
    // @@protoc_insertion_point(enum_value:protos.ResponseCode.RESPONSE_CODE_GENERIC_ERROR)
    RESPONSE_CODE_GENERIC_ERROR = 5,
}

impl ::protobuf::Enum for ResponseCode {
    const NAME: &'static str = "ResponseCode";

    fn value(&self) -> i32 {
        *self as i32
    }

    fn from_i32(value: i32) -> ::std::option::Option<ResponseCode> {
        match value {
            0 => ::std::option::Option::Some(ResponseCode::RESPONSE_CODE_UNSET),
            1 => ::std::option::Option::Some(ResponseCode::RESPONSE_CODE_OK),
            2 => ::std::option::Option::Some(ResponseCode::RESPONSE_CODE_BAD_REQUEST),
            3 => ::std::option::Option::Some(ResponseCode::RESPONSE_CODE_NOT_FOUND),
            4 => ::std::option::Option::Some(ResponseCode::RESPONSE_CODE_INTERNAL_SERVER_ERROR),
            5 => ::std::option::Option::Some(ResponseCode::RESPONSE_CODE_GENERIC_ERROR),
            _ => ::std::option::Option::None
        }
    }

    fn from_str(str: &str) -> ::std::option::Option<ResponseCode> {
        match str {
            "RESPONSE_CODE_UNSET" => ::std::option::Option::Some(ResponseCode::RESPONSE_CODE_UNSET),
            "RESPONSE_CODE_OK" => ::std::option::Option::Some(ResponseCode::RESPONSE_CODE_OK),
            "RESPONSE_CODE_BAD_REQUEST" => ::std::option::Option::Some(ResponseCode::RESPONSE_CODE_BAD_REQUEST),
            "RESPONSE_CODE_NOT_FOUND" => ::std::option::Option::Some(ResponseCode::RESPONSE_CODE_NOT_FOUND),
            "RESPONSE_CODE_INTERNAL_SERVER_ERROR" => ::std::option::Option::Some(ResponseCode::RESPONSE_CODE_INTERNAL_SERVER_ERROR),
            "RESPONSE_CODE_GENERIC_ERROR" => ::std::option::Option::Some(ResponseCode::RESPONSE_CODE_GENERIC_ERROR),
            _ => ::std::option::Option::None
        }
    }

    const VALUES: &'static [ResponseCode] = &[
        ResponseCode::RESPONSE_CODE_UNSET,
        ResponseCode::RESPONSE_CODE_OK,
        ResponseCode::RESPONSE_CODE_BAD_REQUEST,
        ResponseCode::RESPONSE_CODE_NOT_FOUND,
        ResponseCode::RESPONSE_CODE_INTERNAL_SERVER_ERROR,
        ResponseCode::RESPONSE_CODE_GENERIC_ERROR,
    ];
}

impl ::protobuf::EnumFull for ResponseCode {
    fn enum_descriptor() -> ::protobuf::reflect::EnumDescriptor {
        static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::Lazy::new();
        descriptor.get(|| file_descriptor().enum_by_package_relative_name("ResponseCode").unwrap()).clone()
    }

    fn descriptor(&self) -> ::protobuf::reflect::EnumValueDescriptor {
        let index = *self as usize;
        Self::enum_descriptor().value_by_index(index)
    }
}

impl ::std::default::Default for ResponseCode {
    fn default() -> Self {
        ResponseCode::RESPONSE_CODE_UNSET
    }
}

impl ResponseCode {
    fn generated_enum_descriptor_data() -> ::protobuf::reflect::GeneratedEnumDescriptorData {
        ::protobuf::reflect::GeneratedEnumDescriptorData::new::<ResponseCode>("ResponseCode")
    }
}

///  Each SDK client is a $service + $component + $operation_type
#[derive(Clone,Copy,PartialEq,Eq,Debug,Hash)]
// @@protoc_insertion_point(enum:protos.OperationType)
pub enum OperationType {
    // @@protoc_insertion_point(enum_value:protos.OperationType.OPERATION_TYPE_UNSET)
    OPERATION_TYPE_UNSET = 0,
    // @@protoc_insertion_point(enum_value:protos.OperationType.OPERATION_TYPE_CONSUMER)
    OPERATION_TYPE_CONSUMER = 1,
    // @@protoc_insertion_point(enum_value:protos.OperationType.OPERATION_TYPE_PRODUCER)
    OPERATION_TYPE_PRODUCER = 2,
}

impl ::protobuf::Enum for OperationType {
    const NAME: &'static str = "OperationType";

    fn value(&self) -> i32 {
        *self as i32
    }

    fn from_i32(value: i32) -> ::std::option::Option<OperationType> {
        match value {
            0 => ::std::option::Option::Some(OperationType::OPERATION_TYPE_UNSET),
            1 => ::std::option::Option::Some(OperationType::OPERATION_TYPE_CONSUMER),
            2 => ::std::option::Option::Some(OperationType::OPERATION_TYPE_PRODUCER),
            _ => ::std::option::Option::None
        }
    }

    fn from_str(str: &str) -> ::std::option::Option<OperationType> {
        match str {
            "OPERATION_TYPE_UNSET" => ::std::option::Option::Some(OperationType::OPERATION_TYPE_UNSET),
            "OPERATION_TYPE_CONSUMER" => ::std::option::Option::Some(OperationType::OPERATION_TYPE_CONSUMER),
            "OPERATION_TYPE_PRODUCER" => ::std::option::Option::Some(OperationType::OPERATION_TYPE_PRODUCER),
            _ => ::std::option::Option::None
        }
    }

    const VALUES: &'static [OperationType] = &[
        OperationType::OPERATION_TYPE_UNSET,
        OperationType::OPERATION_TYPE_CONSUMER,
        OperationType::OPERATION_TYPE_PRODUCER,
    ];
}

impl ::protobuf::EnumFull for OperationType {
    fn enum_descriptor() -> ::protobuf::reflect::EnumDescriptor {
        static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::Lazy::new();
        descriptor.get(|| file_descriptor().enum_by_package_relative_name("OperationType").unwrap()).clone()
    }

    fn descriptor(&self) -> ::protobuf::reflect::EnumValueDescriptor {
        let index = *self as usize;
        Self::enum_descriptor().value_by_index(index)
    }
}

impl ::std::default::Default for OperationType {
    fn default() -> Self {
        OperationType::OPERATION_TYPE_UNSET
    }
}

impl OperationType {
    fn generated_enum_descriptor_data() -> ::protobuf::reflect::GeneratedEnumDescriptorData {
        ::protobuf::reflect::GeneratedEnumDescriptorData::new::<OperationType>("OperationType")
    }
}

#[derive(Clone,Copy,PartialEq,Eq,Debug,Hash)]
// @@protoc_insertion_point(enum:protos.TailResponseType)
pub enum TailResponseType {
    // @@protoc_insertion_point(enum_value:protos.TailResponseType.TAIL_RESPONSE_TYPE_UNSET)
    TAIL_RESPONSE_TYPE_UNSET = 0,
    // @@protoc_insertion_point(enum_value:protos.TailResponseType.TAIL_RESPONSE_TYPE_PAYLOAD)
    TAIL_RESPONSE_TYPE_PAYLOAD = 1,
    // @@protoc_insertion_point(enum_value:protos.TailResponseType.TAIL_RESPONSE_TYPE_ERROR)
    TAIL_RESPONSE_TYPE_ERROR = 2,
}

impl ::protobuf::Enum for TailResponseType {
    const NAME: &'static str = "TailResponseType";

    fn value(&self) -> i32 {
        *self as i32
    }

    fn from_i32(value: i32) -> ::std::option::Option<TailResponseType> {
        match value {
            0 => ::std::option::Option::Some(TailResponseType::TAIL_RESPONSE_TYPE_UNSET),
            1 => ::std::option::Option::Some(TailResponseType::TAIL_RESPONSE_TYPE_PAYLOAD),
            2 => ::std::option::Option::Some(TailResponseType::TAIL_RESPONSE_TYPE_ERROR),
            _ => ::std::option::Option::None
        }
    }

    fn from_str(str: &str) -> ::std::option::Option<TailResponseType> {
        match str {
            "TAIL_RESPONSE_TYPE_UNSET" => ::std::option::Option::Some(TailResponseType::TAIL_RESPONSE_TYPE_UNSET),
            "TAIL_RESPONSE_TYPE_PAYLOAD" => ::std::option::Option::Some(TailResponseType::TAIL_RESPONSE_TYPE_PAYLOAD),
            "TAIL_RESPONSE_TYPE_ERROR" => ::std::option::Option::Some(TailResponseType::TAIL_RESPONSE_TYPE_ERROR),
            _ => ::std::option::Option::None
        }
    }

    const VALUES: &'static [TailResponseType] = &[
        TailResponseType::TAIL_RESPONSE_TYPE_UNSET,
        TailResponseType::TAIL_RESPONSE_TYPE_PAYLOAD,
        TailResponseType::TAIL_RESPONSE_TYPE_ERROR,
    ];
}

impl ::protobuf::EnumFull for TailResponseType {
    fn enum_descriptor() -> ::protobuf::reflect::EnumDescriptor {
        static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::Lazy::new();
        descriptor.get(|| file_descriptor().enum_by_package_relative_name("TailResponseType").unwrap()).clone()
    }

    fn descriptor(&self) -> ::protobuf::reflect::EnumValueDescriptor {
        let index = *self as usize;
        Self::enum_descriptor().value_by_index(index)
    }
}

impl ::std::default::Default for TailResponseType {
    fn default() -> Self {
        TailResponseType::TAIL_RESPONSE_TYPE_UNSET
    }
}

impl TailResponseType {
    fn generated_enum_descriptor_data() -> ::protobuf::reflect::GeneratedEnumDescriptorData {
        ::protobuf::reflect::GeneratedEnumDescriptorData::new::<TailResponseType>("TailResponseType")
    }
}

#[derive(Clone,Copy,PartialEq,Eq,Debug,Hash)]
// @@protoc_insertion_point(enum:protos.TailRequestType)
pub enum TailRequestType {
    // @@protoc_insertion_point(enum_value:protos.TailRequestType.TAIL_REQUEST_TYPE_UNSET)
    TAIL_REQUEST_TYPE_UNSET = 0,
    // @@protoc_insertion_point(enum_value:protos.TailRequestType.TAIL_REQUEST_TYPE_START)
    TAIL_REQUEST_TYPE_START = 1,
    // @@protoc_insertion_point(enum_value:protos.TailRequestType.TAIL_REQUEST_TYPE_STOP)
    TAIL_REQUEST_TYPE_STOP = 2,
}

impl ::protobuf::Enum for TailRequestType {
    const NAME: &'static str = "TailRequestType";

    fn value(&self) -> i32 {
        *self as i32
    }

    fn from_i32(value: i32) -> ::std::option::Option<TailRequestType> {
        match value {
            0 => ::std::option::Option::Some(TailRequestType::TAIL_REQUEST_TYPE_UNSET),
            1 => ::std::option::Option::Some(TailRequestType::TAIL_REQUEST_TYPE_START),
            2 => ::std::option::Option::Some(TailRequestType::TAIL_REQUEST_TYPE_STOP),
            _ => ::std::option::Option::None
        }
    }

    fn from_str(str: &str) -> ::std::option::Option<TailRequestType> {
        match str {
            "TAIL_REQUEST_TYPE_UNSET" => ::std::option::Option::Some(TailRequestType::TAIL_REQUEST_TYPE_UNSET),
            "TAIL_REQUEST_TYPE_START" => ::std::option::Option::Some(TailRequestType::TAIL_REQUEST_TYPE_START),
            "TAIL_REQUEST_TYPE_STOP" => ::std::option::Option::Some(TailRequestType::TAIL_REQUEST_TYPE_STOP),
            _ => ::std::option::Option::None
        }
    }

    const VALUES: &'static [TailRequestType] = &[
        TailRequestType::TAIL_REQUEST_TYPE_UNSET,
        TailRequestType::TAIL_REQUEST_TYPE_START,
        TailRequestType::TAIL_REQUEST_TYPE_STOP,
    ];
}

impl ::protobuf::EnumFull for TailRequestType {
    fn enum_descriptor() -> ::protobuf::reflect::EnumDescriptor {
        static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::Lazy::new();
        descriptor.get(|| file_descriptor().enum_by_package_relative_name("TailRequestType").unwrap()).clone()
    }

    fn descriptor(&self) -> ::protobuf::reflect::EnumValueDescriptor {
        let index = *self as usize;
        Self::enum_descriptor().value_by_index(index)
    }
}

impl ::std::default::Default for TailRequestType {
    fn default() -> Self {
        TailRequestType::TAIL_REQUEST_TYPE_UNSET
    }
}

impl TailRequestType {
    fn generated_enum_descriptor_data() -> ::protobuf::reflect::GeneratedEnumDescriptorData {
        ::protobuf::reflect::GeneratedEnumDescriptorData::new::<TailRequestType>("TailRequestType")
    }
}

static file_descriptor_proto_data: &'static [u8] = b"\
    \n\x0fsp_common.proto\x12\x06protos\"f\n\x10StandardResponse\x12\x0e\n\
    \x02id\x18\x01\x20\x01(\tR\x02id\x12(\n\x04code\x18\x02\x20\x01(\x0e2\
    \x14.protos.ResponseCodeR\x04code\x12\x18\n\x07message\x18\x03\x20\x01(\
    \tR\x07message\"\xb9\x01\n\x08Audience\x12!\n\x0cservice_name\x18\x01\
    \x20\x01(\tR\x0bserviceName\x12%\n\x0ecomponent_name\x18\x02\x20\x01(\tR\
    \rcomponentName\x12<\n\x0eoperation_type\x18\x03\x20\x01(\x0e2\x15.proto\
    s.OperationTypeR\roperationType\x12%\n\x0eoperation_name\x18\x04\x20\x01\
    (\tR\roperationName\"\xcf\x01\n\x06Metric\x12\x12\n\x04name\x18\x01\x20\
    \x01(\tR\x04name\x122\n\x06labels\x18\x02\x20\x03(\x0b2\x1a.protos.Metri\
    c.LabelsEntryR\x06labels\x12\x14\n\x05value\x18\x03\x20\x01(\x01R\x05val\
    ue\x12,\n\x08audience\x18\x04\x20\x01(\x0b2\x10.protos.AudienceR\x08audi\
    ence\x1a9\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01\x20\x01(\tR\x03key\
    \x12\x14\n\x05value\x18\x02\x20\x01(\tR\x05value:\x028\x01\"\xba\x02\n\
    \x0bTailRequest\x12+\n\x04type\x18\x01\x20\x01(\x0e2\x17.protos.TailRequ\
    estTypeR\x04type\x12\x14\n\x03_id\x18\x02\x20\x01(\tH\0R\x02Id\x88\x01\
    \x01\x12,\n\x08audience\x18\x03\x20\x01(\x0b2\x10.protos.AudienceR\x08au\
    dience\x12$\n\x0bpipeline_id\x18\x04\x20\x01(\tH\x01R\npipelineId\x88\
    \x01\x01\x12?\n\t_metadata\x18\xe8\x07\x20\x03(\x0b2!.protos.TailRequest\
    .MetadataEntryR\x08Metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\
    \x01\x20\x01(\tR\x03key\x12\x14\n\x05value\x18\x02\x20\x01(\tR\x05value:\
    \x028\x01B\x06\n\x04X_idB\x0e\n\x0c_pipeline_id\"\xe8\x03\n\x0cTailRespo\
    nse\x12,\n\x04type\x18\x01\x20\x01(\x0e2\x18.protos.TailResponseTypeR\
    \x04type\x12&\n\x0ftail_request_id\x18\x02\x20\x01(\tR\rtailRequestId\
    \x12,\n\x08audience\x18\x03\x20\x01(\x0b2\x10.protos.AudienceR\x08audien\
    ce\x12\x1f\n\x0bpipeline_id\x18\x04\x20\x01(\tR\npipelineId\x12\x1d\n\ns\
    ession_id\x18\x05\x20\x01(\tR\tsessionId\x12!\n\x0ctimestamp_ns\x18\x06\
    \x20\x01(\x03R\x0btimestampNs\x12#\n\roriginal_data\x18\x07\x20\x01(\x0c\
    R\x0coriginalData\x12\x19\n\x08new_data\x18\x08\x20\x01(\x0cR\x07newData\
    \x12@\n\t_metadata\x18\xe8\x07\x20\x03(\x0b2\".protos.TailResponse.Metad\
    ataEntryR\x08Metadata\x12#\n\n_keepalive\x18\xe9\x07\x20\x01(\x08H\0R\tK\
    eepalive\x88\x01\x01\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01\x20\
    \x01(\tR\x03key\x12\x14\n\x05value\x18\x02\x20\x01(\tR\x05value:\x028\
    \x01B\r\n\x0bX_keepalive\"B\n\x0cAudienceRate\x12\x14\n\x05bytes\x18\x01\
    \x20\x01(\x01R\x05bytes\x12\x1c\n\tprocessed\x18\x02\x20\x01(\x01R\tproc\
    essed\"\xbd\x01\n\x06Schema\x12\x1f\n\x0bjson_schema\x18\x01\x20\x01(\
    \x0cR\njsonSchema\x12\x19\n\x08_version\x18d\x20\x01(\x05R\x07Version\
    \x12:\n\t_metadata\x18\xe8\x07\x20\x03(\x0b2\x1c.protos.Schema.MetadataE\
    ntryR\x08Metadata\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01\x20\x01\
    (\tR\x03key\x12\x14\n\x05value\x18\x02\x20\x01(\tR\x05value:\x028\x01*\
    \xc3\x01\n\x0cResponseCode\x12\x17\n\x13RESPONSE_CODE_UNSET\x10\0\x12\
    \x14\n\x10RESPONSE_CODE_OK\x10\x01\x12\x1d\n\x19RESPONSE_CODE_BAD_REQUES\
    T\x10\x02\x12\x1b\n\x17RESPONSE_CODE_NOT_FOUND\x10\x03\x12'\n#RESPONSE_C\
    ODE_INTERNAL_SERVER_ERROR\x10\x04\x12\x1f\n\x1bRESPONSE_CODE_GENERIC_ERR\
    OR\x10\x05*c\n\rOperationType\x12\x18\n\x14OPERATION_TYPE_UNSET\x10\0\
    \x12\x1b\n\x17OPERATION_TYPE_CONSUMER\x10\x01\x12\x1b\n\x17OPERATION_TYP\
    E_PRODUCER\x10\x02*n\n\x10TailResponseType\x12\x1c\n\x18TAIL_RESPONSE_TY\
    PE_UNSET\x10\0\x12\x1e\n\x1aTAIL_RESPONSE_TYPE_PAYLOAD\x10\x01\x12\x1c\n\
    \x18TAIL_RESPONSE_TYPE_ERROR\x10\x02*g\n\x0fTailRequestType\x12\x1b\n\
    \x17TAIL_REQUEST_TYPE_UNSET\x10\0\x12\x1b\n\x17TAIL_REQUEST_TYPE_START\
    \x10\x01\x12\x1a\n\x16TAIL_REQUEST_TYPE_STOP\x10\x02B-Z+github.com/strea\
    mdal/protos/build/go/protosJ\xe8\x1e\n\x06\x12\x04\0\0r\x01\n\x08\n\x01\
    \x0c\x12\x03\0\0\x12\n\x08\n\x01\x02\x12\x03\x02\0\x0f\n\x08\n\x01\x08\
    \x12\x03\x04\0B\n\t\n\x02\x08\x0b\x12\x03\x04\0B\n;\n\x02\x04\0\x12\x04\
    \x07\0\x0c\x01\x1a/\x20Common\x20response\x20message\x20for\x20many\x20g\
    RPC\x20methods\n\n\n\n\x03\x04\0\x01\x12\x03\x07\x08\x18\n8\n\x04\x04\0\
    \x02\0\x12\x03\t\x02\x10\x1a+\x20Co-relation\x20ID\x20for\x20the\x20requ\
    est\x20/\x20response\n\n\x0c\n\x05\x04\0\x02\0\x05\x12\x03\t\x02\x08\n\
    \x0c\n\x05\x04\0\x02\0\x01\x12\x03\t\t\x0b\n\x0c\n\x05\x04\0\x02\0\x03\
    \x12\x03\t\x0e\x0f\n\x0b\n\x04\x04\0\x02\x01\x12\x03\n\x02\x18\n\x0c\n\
    \x05\x04\0\x02\x01\x06\x12\x03\n\x02\x0e\n\x0c\n\x05\x04\0\x02\x01\x01\
    \x12\x03\n\x0f\x13\n\x0c\n\x05\x04\0\x02\x01\x03\x12\x03\n\x16\x17\n\x0b\
    \n\x04\x04\0\x02\x02\x12\x03\x0b\x02\x15\n\x0c\n\x05\x04\0\x02\x02\x05\
    \x12\x03\x0b\x02\x08\n\x0c\n\x05\x04\0\x02\x02\x01\x12\x03\x0b\t\x10\n\
    \x0c\n\x05\x04\0\x02\x02\x03\x12\x03\x0b\x13\x14\n?\n\x02\x05\0\x12\x04\
    \x0f\0\x16\x01\x1a3\x20Common\x20status\x20codes\x20used\x20in\x20gRPC\
    \x20method\x20responses\n\n\n\n\x03\x05\0\x01\x12\x03\x0f\x05\x11\n\x0b\
    \n\x04\x05\0\x02\0\x12\x03\x10\x02\x19\n\x0c\n\x05\x05\0\x02\0\x01\x12\
    \x03\x10\x02\x15\n\x0c\n\x05\x05\0\x02\0\x02\x12\x03\x10\x17\x18\n\x0b\n\
    \x04\x05\0\x02\x01\x12\x03\x11\x02\x17\n\x0c\n\x05\x05\0\x02\x01\x01\x12\
    \x03\x11\x02\x12\n\x0c\n\x05\x05\0\x02\x01\x02\x12\x03\x11\x15\x16\n\x0b\
    \n\x04\x05\0\x02\x02\x12\x03\x12\x02\x20\n\x0c\n\x05\x05\0\x02\x02\x01\
    \x12\x03\x12\x02\x1b\n\x0c\n\x05\x05\0\x02\x02\x02\x12\x03\x12\x1e\x1f\n\
    \x0b\n\x04\x05\0\x02\x03\x12\x03\x13\x02\x1e\n\x0c\n\x05\x05\0\x02\x03\
    \x01\x12\x03\x13\x02\x19\n\x0c\n\x05\x05\0\x02\x03\x02\x12\x03\x13\x1c\
    \x1d\n\x0b\n\x04\x05\0\x02\x04\x12\x03\x14\x02*\n\x0c\n\x05\x05\0\x02\
    \x04\x01\x12\x03\x14\x02%\n\x0c\n\x05\x05\0\x02\x04\x02\x12\x03\x14()\n\
    \x0b\n\x04\x05\0\x02\x05\x12\x03\x15\x02\"\n\x0c\n\x05\x05\0\x02\x05\x01\
    \x12\x03\x15\x02\x1d\n\x0c\n\x05\x05\0\x02\x05\x02\x12\x03\x15\x20!\nJ\n\
    \x02\x05\x01\x12\x04\x19\0\x1d\x01\x1a>\x20Each\x20SDK\x20client\x20is\
    \x20a\x20$service\x20+\x20$component\x20+\x20$operation_type\n\n\n\n\x03\
    \x05\x01\x01\x12\x03\x19\x05\x12\n\x0b\n\x04\x05\x01\x02\0\x12\x03\x1a\
    \x02\x1b\n\x0c\n\x05\x05\x01\x02\0\x01\x12\x03\x1a\x02\x16\n\x0c\n\x05\
    \x05\x01\x02\0\x02\x12\x03\x1a\x19\x1a\n\x0b\n\x04\x05\x01\x02\x01\x12\
    \x03\x1b\x02\x1e\n\x0c\n\x05\x05\x01\x02\x01\x01\x12\x03\x1b\x02\x19\n\
    \x0c\n\x05\x05\x01\x02\x01\x02\x12\x03\x1b\x1c\x1d\n\x0b\n\x04\x05\x01\
    \x02\x02\x12\x03\x1c\x02\x1e\n\x0c\n\x05\x05\x01\x02\x02\x01\x12\x03\x1c\
    \x02\x19\n\x0c\n\x05\x05\x01\x02\x02\x02\x12\x03\x1c\x1c\x1d\n<\n\x02\
    \x04\x01\x12\x04\x20\0-\x01\x1a0\x20Used\x20to\x20indicate\x20who\x20a\
    \x20command\x20is\x20intended\x20for\n\n\n\n\x03\x04\x01\x01\x12\x03\x20\
    \x08\x10\nm\n\x04\x04\x01\x02\0\x12\x03#\x02\x1a\x1a`\x20Name\x20of\x20t\
    he\x20service\x20--\x20let's\x20include\x20the\x20service\x20name\x20on\
    \x20all\x20calls,\x20we\x20can\n\x20optimize\x20later\x20~DS\n\n\x0c\n\
    \x05\x04\x01\x02\0\x05\x12\x03#\x02\x08\n\x0c\n\x05\x04\x01\x02\0\x01\
    \x12\x03#\t\x15\n\x0c\n\x05\x04\x01\x02\0\x03\x12\x03#\x18\x19\nX\n\x04\
    \x04\x01\x02\x01\x12\x03&\x02\x1c\x1aK\x20Name\x20of\x20the\x20component\
    \x20the\x20SDK\x20is\x20interacting\x20with\x20(ie.\x20kafka-$topic-name\
    )\n\n\x0c\n\x05\x04\x01\x02\x01\x05\x12\x03&\x02\x08\n\x0c\n\x05\x04\x01\
    \x02\x01\x01\x12\x03&\t\x17\n\x0c\n\x05\x04\x01\x02\x01\x03\x12\x03&\x1a\
    \x1b\n#\n\x04\x04\x01\x02\x02\x12\x03)\x02#\x1a\x16\x20Consumer\x20or\
    \x20Producer\n\n\x0c\n\x05\x04\x01\x02\x02\x06\x12\x03)\x02\x0f\n\x0c\n\
    \x05\x04\x01\x02\x02\x01\x12\x03)\x10\x1e\n\x0c\n\x05\x04\x01\x02\x02\
    \x03\x12\x03)!\"\n0\n\x04\x04\x01\x02\x03\x12\x03,\x02\x1c\x1a#\x20Name\
    \x20for\x20the\x20consumer\x20or\x20producer\n\n\x0c\n\x05\x04\x01\x02\
    \x03\x05\x12\x03,\x02\x08\n\x0c\n\x05\x04\x01\x02\x03\x01\x12\x03,\t\x17\
    \n\x0c\n\x05\x04\x01\x02\x03\x03\x12\x03,\x1a\x1b\n\n\n\x02\x04\x02\x12\
    \x04/\04\x01\n\n\n\x03\x04\x02\x01\x12\x03/\x08\x0e\n\x0b\n\x04\x04\x02\
    \x02\0\x12\x030\x02\x12\n\x0c\n\x05\x04\x02\x02\0\x05\x12\x030\x02\x08\n\
    \x0c\n\x05\x04\x02\x02\0\x01\x12\x030\t\r\n\x0c\n\x05\x04\x02\x02\0\x03\
    \x12\x030\x10\x11\n\x0b\n\x04\x04\x02\x02\x01\x12\x031\x02!\n\x0c\n\x05\
    \x04\x02\x02\x01\x06\x12\x031\x02\x15\n\x0c\n\x05\x04\x02\x02\x01\x01\
    \x12\x031\x16\x1c\n\x0c\n\x05\x04\x02\x02\x01\x03\x12\x031\x1f\x20\n\x0b\
    \n\x04\x04\x02\x02\x02\x12\x032\x02\x13\n\x0c\n\x05\x04\x02\x02\x02\x05\
    \x12\x032\x02\x08\n\x0c\n\x05\x04\x02\x02\x02\x01\x12\x032\t\x0e\n\x0c\n\
    \x05\x04\x02\x02\x02\x03\x12\x032\x11\x12\n\x0b\n\x04\x04\x02\x02\x03\
    \x12\x033\x02\x18\n\x0c\n\x05\x04\x02\x02\x03\x06\x12\x033\x02\n\n\x0c\n\
    \x05\x04\x02\x02\x03\x01\x12\x033\x0b\x13\n\x0c\n\x05\x04\x02\x02\x03\
    \x03\x12\x033\x16\x17\n\n\n\x02\x04\x03\x12\x046\0<\x01\n\n\n\x03\x04\
    \x03\x01\x12\x036\x08\x13\n\x0b\n\x04\x04\x03\x02\0\x12\x037\x02\x1b\n\
    \x0c\n\x05\x04\x03\x02\0\x06\x12\x037\x02\x11\n\x0c\n\x05\x04\x03\x02\0\
    \x01\x12\x037\x12\x16\n\x0c\n\x05\x04\x03\x02\0\x03\x12\x037\x19\x1a\nB\
    \n\x04\x04\x03\x02\x01\x12\x038\x02\x1a\"5\x20protolint:disable:this\x20\
    FIELD_NAMES_LOWER_SNAKE_CASE\n\n\x0c\n\x05\x04\x03\x02\x01\x04\x12\x038\
    \x02\n\n\x0c\n\x05\x04\x03\x02\x01\x05\x12\x038\x0b\x11\n\x0c\n\x05\x04\
    \x03\x02\x01\x01\x12\x038\x12\x15\n\x0c\n\x05\x04\x03\x02\x01\x03\x12\
    \x038\x18\x19\n\x0b\n\x04\x04\x03\x02\x02\x12\x039\x02\x18\n\x0c\n\x05\
    \x04\x03\x02\x02\x06\x12\x039\x02\n\n\x0c\n\x05\x04\x03\x02\x02\x01\x12\
    \x039\x0b\x13\n\x0c\n\x05\x04\x03\x02\x02\x03\x12\x039\x16\x17\n\x0b\n\
    \x04\x04\x03\x02\x03\x12\x03:\x02\"\n\x0c\n\x05\x04\x03\x02\x03\x04\x12\
    \x03:\x02\n\n\x0c\n\x05\x04\x03\x02\x03\x05\x12\x03:\x0b\x11\n\x0c\n\x05\
    \x04\x03\x02\x03\x01\x12\x03:\x12\x1d\n\x0c\n\x05\x04\x03\x02\x03\x03\
    \x12\x03:\x20!\nB\n\x04\x04\x03\x02\x04\x12\x03;\x02'\"5\x20protolint:di\
    sable:this\x20FIELD_NAMES_LOWER_SNAKE_CASE\n\n\x0c\n\x05\x04\x03\x02\x04\
    \x06\x12\x03;\x02\x15\n\x0c\n\x05\x04\x03\x02\x04\x01\x12\x03;\x16\x1f\n\
    \x0c\n\x05\x04\x03\x02\x04\x03\x12\x03;\"&\n\n\n\x02\x05\x02\x12\x04>\0B\
    \x01\n\n\n\x03\x05\x02\x01\x12\x03>\x05\x15\n\x0b\n\x04\x05\x02\x02\0\
    \x12\x03?\x02\x1f\n\x0c\n\x05\x05\x02\x02\0\x01\x12\x03?\x02\x1a\n\x0c\n\
    \x05\x05\x02\x02\0\x02\x12\x03?\x1d\x1e\n\x0b\n\x04\x05\x02\x02\x01\x12\
    \x03@\x02!\n\x0c\n\x05\x05\x02\x02\x01\x01\x12\x03@\x02\x1c\n\x0c\n\x05\
    \x05\x02\x02\x01\x02\x12\x03@\x1f\x20\n\x0b\n\x04\x05\x02\x02\x02\x12\
    \x03A\x02\x1f\n\x0c\n\x05\x05\x02\x02\x02\x01\x12\x03A\x02\x1a\n\x0c\n\
    \x05\x05\x02\x02\x02\x02\x12\x03A\x1d\x1e\n\n\n\x02\x05\x03\x12\x04D\0H\
    \x01\n\n\n\x03\x05\x03\x01\x12\x03D\x05\x14\n\x0b\n\x04\x05\x03\x02\0\
    \x12\x03E\x02\x1e\n\x0c\n\x05\x05\x03\x02\0\x01\x12\x03E\x02\x19\n\x0c\n\
    \x05\x05\x03\x02\0\x02\x12\x03E\x1c\x1d\n\x0b\n\x04\x05\x03\x02\x01\x12\
    \x03F\x02\x1e\n\x0c\n\x05\x05\x03\x02\x01\x01\x12\x03F\x02\x19\n\x0c\n\
    \x05\x05\x03\x02\x01\x02\x12\x03F\x1c\x1d\n\x0b\n\x04\x05\x03\x02\x02\
    \x12\x03G\x02\x1d\n\x0c\n\x05\x05\x03\x02\x02\x01\x12\x03G\x02\x18\n\x0c\
    \n\x05\x05\x03\x02\x02\x02\x12\x03G\x1b\x1c\n\xa0\x01\n\x02\x04\x04\x12\
    \x04L\0e\x01\x1a\x93\x01\x20TailResponse\x20originates\x20in\x20the\x20S\
    DK\x20and\x20then\x20is\x20sent\x20to\x20streamdal\x20servers\x20where\n\
    \x20it\x20is\x20forwarded\x20to\x20the\x20correct\x20frontend\x20streami\
    ng\x20gRPC\x20connection\n\n\n\n\x03\x04\x04\x01\x12\x03L\x08\x14\n\x0b\
    \n\x04\x04\x04\x02\0\x12\x03M\x02\x1c\n\x0c\n\x05\x04\x04\x02\0\x06\x12\
    \x03M\x02\x12\n\x0c\n\x05\x04\x04\x02\0\x01\x12\x03M\x13\x17\n\x0c\n\x05\
    \x04\x04\x02\0\x03\x12\x03M\x1a\x1b\n\x0b\n\x04\x04\x04\x02\x01\x12\x03O\
    \x02\x1d\n\x0c\n\x05\x04\x04\x02\x01\x05\x12\x03O\x02\x08\n\x0c\n\x05\
    \x04\x04\x02\x01\x01\x12\x03O\t\x18\n\x0c\n\x05\x04\x04\x02\x01\x03\x12\
    \x03O\x1b\x1c\n\x0b\n\x04\x04\x04\x02\x02\x12\x03Q\x02\x18\n\x0c\n\x05\
    \x04\x04\x02\x02\x06\x12\x03Q\x02\n\n\x0c\n\x05\x04\x04\x02\x02\x01\x12\
    \x03Q\x0b\x13\n\x0c\n\x05\x04\x04\x02\x02\x03\x12\x03Q\x16\x17\n\x0b\n\
    \x04\x04\x04\x02\x03\x12\x03S\x02\x19\n\x0c\n\x05\x04\x04\x02\x03\x05\
    \x12\x03S\x02\x08\n\x0c\n\x05\x04\x04\x02\x03\x01\x12\x03S\t\x14\n\x0c\n\
    \x05\x04\x04\x02\x03\x03\x12\x03S\x17\x18\n\x0b\n\x04\x04\x04\x02\x04\
    \x12\x03U\x02\x18\n\x0c\n\x05\x04\x04\x02\x04\x05\x12\x03U\x02\x08\n\x0c\
    \n\x05\x04\x04\x02\x04\x01\x12\x03U\t\x13\n\x0c\n\x05\x04\x04\x02\x04\
    \x03\x12\x03U\x16\x17\n'\n\x04\x04\x04\x02\x05\x12\x03X\x02\x19\x1a\x1a\
    \x20Timestamp\x20in\x20nanoseconds\n\n\x0c\n\x05\x04\x04\x02\x05\x05\x12\
    \x03X\x02\x07\n\x0c\n\x05\x04\x04\x02\x05\x01\x12\x03X\x08\x14\n\x0c\n\
    \x05\x04\x04\x02\x05\x03\x12\x03X\x17\x18\n\x8e\x01\n\x04\x04\x04\x02\
    \x06\x12\x03\\\x02\x1a\x1a\x80\x01\x20Payload\x20data.\x20For\x20errors,\
    \x20this\x20will\x20be\x20the\x20error\x20message\n\x20For\x20payloads,\
    \x20this\x20will\x20be\x20JSON\x20of\x20the\x20payload\x20data,\x20post\
    \x20processing\n\n\x0c\n\x05\x04\x04\x02\x06\x05\x12\x03\\\x02\x07\n\x0c\
    \n\x05\x04\x04\x02\x06\x01\x12\x03\\\x08\x15\n\x0c\n\x05\x04\x04\x02\x06\
    \x03\x12\x03\\\x18\x19\nG\n\x04\x04\x04\x02\x07\x12\x03_\x02\x15\x1a:\
    \x20For\x20payloads,\x20this\x20will\x20be\x20the\x20new\x20data,\x20pos\
    t\x20processing\n\n\x0c\n\x05\x04\x04\x02\x07\x05\x12\x03_\x02\x07\n\x0c\
    \n\x05\x04\x04\x02\x07\x01\x12\x03_\x08\x10\n\x0c\n\x05\x04\x04\x02\x07\
    \x03\x12\x03_\x13\x14\nB\n\x04\x04\x04\x02\x08\x12\x03a\x02&\"5\x20proto\
    lint:disable:this\x20FIELD_NAMES_LOWER_SNAKE_CASE\n\n\x0c\n\x05\x04\x04\
    \x02\x08\x06\x12\x03a\x02\x14\n\x0c\n\x05\x04\x04\x02\x08\x01\x12\x03a\
    \x15\x1e\n\x0c\n\x05\x04\x04\x02\x08\x03\x12\x03a!%\n\x88\x01\n\x04\x04\
    \x04\x02\t\x12\x03d\x02\"\x1aD\x20Set\x20by\x20server\x20to\x20indicate\
    \x20that\x20the\x20response\x20is\x20a\x20keepalive\x20message\n\"5\x20p\
    rotolint:disable:this\x20FIELD_NAMES_LOWER_SNAKE_CASE\n\n\x0c\n\x05\x04\
    \x04\x02\t\x04\x12\x03d\x02\n\n\x0c\n\x05\x04\x04\x02\t\x05\x12\x03d\x0b\
    \x0f\n\x0c\n\x05\x04\x04\x02\t\x01\x12\x03d\x10\x1a\n\x0c\n\x05\x04\x04\
    \x02\t\x03\x12\x03d\x1d!\n\n\n\x02\x04\x05\x12\x04g\0j\x01\n\n\n\x03\x04\
    \x05\x01\x12\x03g\x08\x14\n\x0b\n\x04\x04\x05\x02\0\x12\x03h\x02\x13\n\
    \x0c\n\x05\x04\x05\x02\0\x05\x12\x03h\x02\x08\n\x0c\n\x05\x04\x05\x02\0\
    \x01\x12\x03h\t\x0e\n\x0c\n\x05\x04\x05\x02\0\x03\x12\x03h\x11\x12\n\x0b\
    \n\x04\x04\x05\x02\x01\x12\x03i\x02\x17\n\x0c\n\x05\x04\x05\x02\x01\x05\
    \x12\x03i\x02\x08\n\x0c\n\x05\x04\x05\x02\x01\x01\x12\x03i\t\x12\n\x0c\n\
    \x05\x04\x05\x02\x01\x03\x12\x03i\x15\x16\n\n\n\x02\x04\x06\x12\x04l\0r\
    \x01\n\n\n\x03\x04\x06\x01\x12\x03l\x08\x0e\n\x0b\n\x04\x04\x06\x02\0\
    \x12\x03m\x02\x18\n\x0c\n\x05\x04\x06\x02\0\x05\x12\x03m\x02\x07\n\x0c\n\
    \x05\x04\x06\x02\0\x01\x12\x03m\x08\x13\n\x0c\n\x05\x04\x06\x02\0\x03\
    \x12\x03m\x16\x17\nB\n\x04\x04\x06\x02\x01\x12\x03o\x02\x17\"5\x20protol\
    int:disable:this\x20FIELD_NAMES_LOWER_SNAKE_CASE\n\n\x0c\n\x05\x04\x06\
    \x02\x01\x05\x12\x03o\x02\x07\n\x0c\n\x05\x04\x06\x02\x01\x01\x12\x03o\
    \x08\x10\n\x0c\n\x05\x04\x06\x02\x01\x03\x12\x03o\x13\x16\nB\n\x04\x04\
    \x06\x02\x02\x12\x03q\x02&\"5\x20protolint:disable:this\x20FIELD_NAMES_L\
    OWER_SNAKE_CASE\n\n\x0c\n\x05\x04\x06\x02\x02\x06\x12\x03q\x02\x14\n\x0c\
    \n\x05\x04\x06\x02\x02\x01\x12\x03q\x15\x1e\n\x0c\n\x05\x04\x06\x02\x02\
    \x03\x12\x03q!%b\x06proto3\
";

/// `FileDescriptorProto` object which was a source for this generated file
fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
    static file_descriptor_proto_lazy: ::protobuf::rt::Lazy<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::Lazy::new();
    file_descriptor_proto_lazy.get(|| {
        ::protobuf::Message::parse_from_bytes(file_descriptor_proto_data).unwrap()
    })
}

/// `FileDescriptor` object which allows dynamic access to files
pub fn file_descriptor() -> &'static ::protobuf::reflect::FileDescriptor {
    static generated_file_descriptor_lazy: ::protobuf::rt::Lazy<::protobuf::reflect::GeneratedFileDescriptor> = ::protobuf::rt::Lazy::new();
    static file_descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::FileDescriptor> = ::protobuf::rt::Lazy::new();
    file_descriptor.get(|| {
        let generated_file_descriptor = generated_file_descriptor_lazy.get(|| {
            let mut deps = ::std::vec::Vec::with_capacity(0);
            let mut messages = ::std::vec::Vec::with_capacity(7);
            messages.push(StandardResponse::generated_message_descriptor_data());
            messages.push(Audience::generated_message_descriptor_data());
            messages.push(Metric::generated_message_descriptor_data());
            messages.push(TailRequest::generated_message_descriptor_data());
            messages.push(TailResponse::generated_message_descriptor_data());
            messages.push(AudienceRate::generated_message_descriptor_data());
            messages.push(Schema::generated_message_descriptor_data());
            let mut enums = ::std::vec::Vec::with_capacity(4);
            enums.push(ResponseCode::generated_enum_descriptor_data());
            enums.push(OperationType::generated_enum_descriptor_data());
            enums.push(TailResponseType::generated_enum_descriptor_data());
            enums.push(TailRequestType::generated_enum_descriptor_data());
            ::protobuf::reflect::GeneratedFileDescriptor::new_generated(
                file_descriptor_proto(),
                deps,
                messages,
                enums,
            )
        });
        ::protobuf::reflect::FileDescriptor::new_generated_2(generated_file_descriptor)
    })
}
