// This file is generated by rust-protobuf 3.7.2. Do not edit
// .proto file is parsed by pure
// @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(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 `mercury.proto`

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

// @@protoc_insertion_point(message:MercuryMultiGetRequest)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct MercuryMultiGetRequest {
    // message fields
    // @@protoc_insertion_point(field:MercuryMultiGetRequest.request)
    pub request: ::std::vec::Vec<MercuryRequest>,
    // special fields
    // @@protoc_insertion_point(special_field:MercuryMultiGetRequest.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

    fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
        let mut fields = ::std::vec::Vec::with_capacity(1);
        let mut oneofs = ::std::vec::Vec::with_capacity(0);
        fields.push(::protobuf::reflect::rt::v2::make_vec_simpler_accessor::<_, _>(
            "request",
            |m: &MercuryMultiGetRequest| { &m.request },
            |m: &mut MercuryMultiGetRequest| { &mut m.request },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<MercuryMultiGetRequest>(
            "MercuryMultiGetRequest",
            fields,
            oneofs,
        )
    }
}

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

    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.request.push(is.read_message()?);
                },
                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;
        for value in &self.request {
            let len = value.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<()> {
        for v in &self.request {
            ::protobuf::rt::write_message_field_with_cached_size(1, 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() -> MercuryMultiGetRequest {
        MercuryMultiGetRequest::new()
    }

    fn clear(&mut self) {
        self.request.clear();
        self.special_fields.clear();
    }

    fn default_instance() -> &'static MercuryMultiGetRequest {
        static instance: MercuryMultiGetRequest = MercuryMultiGetRequest {
            request: ::std::vec::Vec::new(),
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for MercuryMultiGetRequest {
    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("MercuryMultiGetRequest").unwrap()).clone()
    }
}

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

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

// @@protoc_insertion_point(message:MercuryMultiGetReply)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct MercuryMultiGetReply {
    // message fields
    // @@protoc_insertion_point(field:MercuryMultiGetReply.reply)
    pub reply: ::std::vec::Vec<MercuryReply>,
    // special fields
    // @@protoc_insertion_point(special_field:MercuryMultiGetReply.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

    fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
        let mut fields = ::std::vec::Vec::with_capacity(1);
        let mut oneofs = ::std::vec::Vec::with_capacity(0);
        fields.push(::protobuf::reflect::rt::v2::make_vec_simpler_accessor::<_, _>(
            "reply",
            |m: &MercuryMultiGetReply| { &m.reply },
            |m: &mut MercuryMultiGetReply| { &mut m.reply },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<MercuryMultiGetReply>(
            "MercuryMultiGetReply",
            fields,
            oneofs,
        )
    }
}

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

    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.reply.push(is.read_message()?);
                },
                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;
        for value in &self.reply {
            let len = value.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<()> {
        for v in &self.reply {
            ::protobuf::rt::write_message_field_with_cached_size(1, 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() -> MercuryMultiGetReply {
        MercuryMultiGetReply::new()
    }

    fn clear(&mut self) {
        self.reply.clear();
        self.special_fields.clear();
    }

    fn default_instance() -> &'static MercuryMultiGetReply {
        static instance: MercuryMultiGetReply = MercuryMultiGetReply {
            reply: ::std::vec::Vec::new(),
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for MercuryMultiGetReply {
    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("MercuryMultiGetReply").unwrap()).clone()
    }
}

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

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

// @@protoc_insertion_point(message:MercuryRequest)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct MercuryRequest {
    // message fields
    // @@protoc_insertion_point(field:MercuryRequest.uri)
    pub uri: ::std::option::Option<::std::string::String>,
    // @@protoc_insertion_point(field:MercuryRequest.content_type)
    pub content_type: ::std::option::Option<::std::string::String>,
    // @@protoc_insertion_point(field:MercuryRequest.body)
    pub body: ::std::option::Option<::std::vec::Vec<u8>>,
    // @@protoc_insertion_point(field:MercuryRequest.etag)
    pub etag: ::std::option::Option<::std::vec::Vec<u8>>,
    // special fields
    // @@protoc_insertion_point(special_field:MercuryRequest.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

    // optional string uri = 1;

    pub fn uri(&self) -> &str {
        match self.uri.as_ref() {
            Some(v) => v,
            None => "",
        }
    }

    pub fn clear_uri(&mut self) {
        self.uri = ::std::option::Option::None;
    }

    pub fn has_uri(&self) -> bool {
        self.uri.is_some()
    }

    // Param is passed by value, moved
    pub fn set_uri(&mut self, v: ::std::string::String) {
        self.uri = ::std::option::Option::Some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_uri(&mut self) -> &mut ::std::string::String {
        if self.uri.is_none() {
            self.uri = ::std::option::Option::Some(::std::string::String::new());
        }
        self.uri.as_mut().unwrap()
    }

    // Take field
    pub fn take_uri(&mut self) -> ::std::string::String {
        self.uri.take().unwrap_or_else(|| ::std::string::String::new())
    }

    // optional string content_type = 2;

    pub fn content_type(&self) -> &str {
        match self.content_type.as_ref() {
            Some(v) => v,
            None => "",
        }
    }

    pub fn clear_content_type(&mut self) {
        self.content_type = ::std::option::Option::None;
    }

    pub fn has_content_type(&self) -> bool {
        self.content_type.is_some()
    }

    // Param is passed by value, moved
    pub fn set_content_type(&mut self, v: ::std::string::String) {
        self.content_type = ::std::option::Option::Some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_content_type(&mut self) -> &mut ::std::string::String {
        if self.content_type.is_none() {
            self.content_type = ::std::option::Option::Some(::std::string::String::new());
        }
        self.content_type.as_mut().unwrap()
    }

    // Take field
    pub fn take_content_type(&mut self) -> ::std::string::String {
        self.content_type.take().unwrap_or_else(|| ::std::string::String::new())
    }

    // optional bytes body = 3;

    pub fn body(&self) -> &[u8] {
        match self.body.as_ref() {
            Some(v) => v,
            None => &[],
        }
    }

    pub fn clear_body(&mut self) {
        self.body = ::std::option::Option::None;
    }

    pub fn has_body(&self) -> bool {
        self.body.is_some()
    }

    // Param is passed by value, moved
    pub fn set_body(&mut self, v: ::std::vec::Vec<u8>) {
        self.body = ::std::option::Option::Some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_body(&mut self) -> &mut ::std::vec::Vec<u8> {
        if self.body.is_none() {
            self.body = ::std::option::Option::Some(::std::vec::Vec::new());
        }
        self.body.as_mut().unwrap()
    }

    // Take field
    pub fn take_body(&mut self) -> ::std::vec::Vec<u8> {
        self.body.take().unwrap_or_else(|| ::std::vec::Vec::new())
    }

    // optional bytes etag = 4;

    pub fn etag(&self) -> &[u8] {
        match self.etag.as_ref() {
            Some(v) => v,
            None => &[],
        }
    }

    pub fn clear_etag(&mut self) {
        self.etag = ::std::option::Option::None;
    }

    pub fn has_etag(&self) -> bool {
        self.etag.is_some()
    }

    // Param is passed by value, moved
    pub fn set_etag(&mut self, v: ::std::vec::Vec<u8>) {
        self.etag = ::std::option::Option::Some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_etag(&mut self) -> &mut ::std::vec::Vec<u8> {
        if self.etag.is_none() {
            self.etag = ::std::option::Option::Some(::std::vec::Vec::new());
        }
        self.etag.as_mut().unwrap()
    }

    // Take field
    pub fn take_etag(&mut self) -> ::std::vec::Vec<u8> {
        self.etag.take().unwrap_or_else(|| ::std::vec::Vec::new())
    }

    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_option_accessor::<_, _>(
            "uri",
            |m: &MercuryRequest| { &m.uri },
            |m: &mut MercuryRequest| { &mut m.uri },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "content_type",
            |m: &MercuryRequest| { &m.content_type },
            |m: &mut MercuryRequest| { &mut m.content_type },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "body",
            |m: &MercuryRequest| { &m.body },
            |m: &mut MercuryRequest| { &mut m.body },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "etag",
            |m: &MercuryRequest| { &m.etag },
            |m: &mut MercuryRequest| { &mut m.etag },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<MercuryRequest>(
            "MercuryRequest",
            fields,
            oneofs,
        )
    }
}

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

    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.uri = ::std::option::Option::Some(is.read_string()?);
                },
                18 => {
                    self.content_type = ::std::option::Option::Some(is.read_string()?);
                },
                26 => {
                    self.body = ::std::option::Option::Some(is.read_bytes()?);
                },
                34 => {
                    self.etag = ::std::option::Option::Some(is.read_bytes()?);
                },
                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 let Some(v) = self.uri.as_ref() {
            my_size += ::protobuf::rt::string_size(1, &v);
        }
        if let Some(v) = self.content_type.as_ref() {
            my_size += ::protobuf::rt::string_size(2, &v);
        }
        if let Some(v) = self.body.as_ref() {
            my_size += ::protobuf::rt::bytes_size(3, &v);
        }
        if let Some(v) = self.etag.as_ref() {
            my_size += ::protobuf::rt::bytes_size(4, &v);
        }
        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 let Some(v) = self.uri.as_ref() {
            os.write_string(1, v)?;
        }
        if let Some(v) = self.content_type.as_ref() {
            os.write_string(2, v)?;
        }
        if let Some(v) = self.body.as_ref() {
            os.write_bytes(3, v)?;
        }
        if let Some(v) = self.etag.as_ref() {
            os.write_bytes(4, 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() -> MercuryRequest {
        MercuryRequest::new()
    }

    fn clear(&mut self) {
        self.uri = ::std::option::Option::None;
        self.content_type = ::std::option::Option::None;
        self.body = ::std::option::Option::None;
        self.etag = ::std::option::Option::None;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static MercuryRequest {
        static instance: MercuryRequest = MercuryRequest {
            uri: ::std::option::Option::None,
            content_type: ::std::option::Option::None,
            body: ::std::option::Option::None,
            etag: ::std::option::Option::None,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for MercuryRequest {
    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("MercuryRequest").unwrap()).clone()
    }
}

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

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

// @@protoc_insertion_point(message:MercuryReply)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct MercuryReply {
    // message fields
    // @@protoc_insertion_point(field:MercuryReply.status_code)
    pub status_code: ::std::option::Option<i32>,
    // @@protoc_insertion_point(field:MercuryReply.status_message)
    pub status_message: ::std::option::Option<::std::string::String>,
    // @@protoc_insertion_point(field:MercuryReply.cache_policy)
    pub cache_policy: ::std::option::Option<::protobuf::EnumOrUnknown<mercury_reply::CachePolicy>>,
    // @@protoc_insertion_point(field:MercuryReply.ttl)
    pub ttl: ::std::option::Option<i32>,
    // @@protoc_insertion_point(field:MercuryReply.etag)
    pub etag: ::std::option::Option<::std::vec::Vec<u8>>,
    // @@protoc_insertion_point(field:MercuryReply.content_type)
    pub content_type: ::std::option::Option<::std::string::String>,
    // @@protoc_insertion_point(field:MercuryReply.body)
    pub body: ::std::option::Option<::std::vec::Vec<u8>>,
    // special fields
    // @@protoc_insertion_point(special_field:MercuryReply.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

    // optional sint32 status_code = 1;

    pub fn status_code(&self) -> i32 {
        self.status_code.unwrap_or(0)
    }

    pub fn clear_status_code(&mut self) {
        self.status_code = ::std::option::Option::None;
    }

    pub fn has_status_code(&self) -> bool {
        self.status_code.is_some()
    }

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

    // optional string status_message = 2;

    pub fn status_message(&self) -> &str {
        match self.status_message.as_ref() {
            Some(v) => v,
            None => "",
        }
    }

    pub fn clear_status_message(&mut self) {
        self.status_message = ::std::option::Option::None;
    }

    pub fn has_status_message(&self) -> bool {
        self.status_message.is_some()
    }

    // Param is passed by value, moved
    pub fn set_status_message(&mut self, v: ::std::string::String) {
        self.status_message = ::std::option::Option::Some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_status_message(&mut self) -> &mut ::std::string::String {
        if self.status_message.is_none() {
            self.status_message = ::std::option::Option::Some(::std::string::String::new());
        }
        self.status_message.as_mut().unwrap()
    }

    // Take field
    pub fn take_status_message(&mut self) -> ::std::string::String {
        self.status_message.take().unwrap_or_else(|| ::std::string::String::new())
    }

    // optional .MercuryReply.CachePolicy cache_policy = 3;

    pub fn cache_policy(&self) -> mercury_reply::CachePolicy {
        match self.cache_policy {
            Some(e) => e.enum_value_or(mercury_reply::CachePolicy::CACHE_NO),
            None => mercury_reply::CachePolicy::CACHE_NO,
        }
    }

    pub fn clear_cache_policy(&mut self) {
        self.cache_policy = ::std::option::Option::None;
    }

    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: mercury_reply::CachePolicy) {
        self.cache_policy = ::std::option::Option::Some(::protobuf::EnumOrUnknown::new(v));
    }

    // optional sint32 ttl = 4;

    pub fn ttl(&self) -> i32 {
        self.ttl.unwrap_or(0)
    }

    pub fn clear_ttl(&mut self) {
        self.ttl = ::std::option::Option::None;
    }

    pub fn has_ttl(&self) -> bool {
        self.ttl.is_some()
    }

    // Param is passed by value, moved
    pub fn set_ttl(&mut self, v: i32) {
        self.ttl = ::std::option::Option::Some(v);
    }

    // optional bytes etag = 5;

    pub fn etag(&self) -> &[u8] {
        match self.etag.as_ref() {
            Some(v) => v,
            None => &[],
        }
    }

    pub fn clear_etag(&mut self) {
        self.etag = ::std::option::Option::None;
    }

    pub fn has_etag(&self) -> bool {
        self.etag.is_some()
    }

    // Param is passed by value, moved
    pub fn set_etag(&mut self, v: ::std::vec::Vec<u8>) {
        self.etag = ::std::option::Option::Some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_etag(&mut self) -> &mut ::std::vec::Vec<u8> {
        if self.etag.is_none() {
            self.etag = ::std::option::Option::Some(::std::vec::Vec::new());
        }
        self.etag.as_mut().unwrap()
    }

    // Take field
    pub fn take_etag(&mut self) -> ::std::vec::Vec<u8> {
        self.etag.take().unwrap_or_else(|| ::std::vec::Vec::new())
    }

    // optional string content_type = 6;

    pub fn content_type(&self) -> &str {
        match self.content_type.as_ref() {
            Some(v) => v,
            None => "",
        }
    }

    pub fn clear_content_type(&mut self) {
        self.content_type = ::std::option::Option::None;
    }

    pub fn has_content_type(&self) -> bool {
        self.content_type.is_some()
    }

    // Param is passed by value, moved
    pub fn set_content_type(&mut self, v: ::std::string::String) {
        self.content_type = ::std::option::Option::Some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_content_type(&mut self) -> &mut ::std::string::String {
        if self.content_type.is_none() {
            self.content_type = ::std::option::Option::Some(::std::string::String::new());
        }
        self.content_type.as_mut().unwrap()
    }

    // Take field
    pub fn take_content_type(&mut self) -> ::std::string::String {
        self.content_type.take().unwrap_or_else(|| ::std::string::String::new())
    }

    // optional bytes body = 7;

    pub fn body(&self) -> &[u8] {
        match self.body.as_ref() {
            Some(v) => v,
            None => &[],
        }
    }

    pub fn clear_body(&mut self) {
        self.body = ::std::option::Option::None;
    }

    pub fn has_body(&self) -> bool {
        self.body.is_some()
    }

    // Param is passed by value, moved
    pub fn set_body(&mut self, v: ::std::vec::Vec<u8>) {
        self.body = ::std::option::Option::Some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_body(&mut self) -> &mut ::std::vec::Vec<u8> {
        if self.body.is_none() {
            self.body = ::std::option::Option::Some(::std::vec::Vec::new());
        }
        self.body.as_mut().unwrap()
    }

    // Take field
    pub fn take_body(&mut self) -> ::std::vec::Vec<u8> {
        self.body.take().unwrap_or_else(|| ::std::vec::Vec::new())
    }

    fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
        let mut fields = ::std::vec::Vec::with_capacity(7);
        let mut oneofs = ::std::vec::Vec::with_capacity(0);
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "status_code",
            |m: &MercuryReply| { &m.status_code },
            |m: &mut MercuryReply| { &mut m.status_code },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "status_message",
            |m: &MercuryReply| { &m.status_message },
            |m: &mut MercuryReply| { &mut m.status_message },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "cache_policy",
            |m: &MercuryReply| { &m.cache_policy },
            |m: &mut MercuryReply| { &mut m.cache_policy },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "ttl",
            |m: &MercuryReply| { &m.ttl },
            |m: &mut MercuryReply| { &mut m.ttl },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "etag",
            |m: &MercuryReply| { &m.etag },
            |m: &mut MercuryReply| { &mut m.etag },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "content_type",
            |m: &MercuryReply| { &m.content_type },
            |m: &mut MercuryReply| { &mut m.content_type },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "body",
            |m: &MercuryReply| { &m.body },
            |m: &mut MercuryReply| { &mut m.body },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<MercuryReply>(
            "MercuryReply",
            fields,
            oneofs,
        )
    }
}

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

    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.status_code = ::std::option::Option::Some(is.read_sint32()?);
                },
                18 => {
                    self.status_message = ::std::option::Option::Some(is.read_string()?);
                },
                24 => {
                    self.cache_policy = ::std::option::Option::Some(is.read_enum_or_unknown()?);
                },
                32 => {
                    self.ttl = ::std::option::Option::Some(is.read_sint32()?);
                },
                42 => {
                    self.etag = ::std::option::Option::Some(is.read_bytes()?);
                },
                50 => {
                    self.content_type = ::std::option::Option::Some(is.read_string()?);
                },
                58 => {
                    self.body = ::std::option::Option::Some(is.read_bytes()?);
                },
                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 let Some(v) = self.status_code {
            my_size += ::protobuf::rt::sint32_size(1, v);
        }
        if let Some(v) = self.status_message.as_ref() {
            my_size += ::protobuf::rt::string_size(2, &v);
        }
        if let Some(v) = self.cache_policy {
            my_size += ::protobuf::rt::int32_size(3, v.value());
        }
        if let Some(v) = self.ttl {
            my_size += ::protobuf::rt::sint32_size(4, v);
        }
        if let Some(v) = self.etag.as_ref() {
            my_size += ::protobuf::rt::bytes_size(5, &v);
        }
        if let Some(v) = self.content_type.as_ref() {
            my_size += ::protobuf::rt::string_size(6, &v);
        }
        if let Some(v) = self.body.as_ref() {
            my_size += ::protobuf::rt::bytes_size(7, &v);
        }
        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 let Some(v) = self.status_code {
            os.write_sint32(1, v)?;
        }
        if let Some(v) = self.status_message.as_ref() {
            os.write_string(2, v)?;
        }
        if let Some(v) = self.cache_policy {
            os.write_enum(3, ::protobuf::EnumOrUnknown::value(&v))?;
        }
        if let Some(v) = self.ttl {
            os.write_sint32(4, v)?;
        }
        if let Some(v) = self.etag.as_ref() {
            os.write_bytes(5, v)?;
        }
        if let Some(v) = self.content_type.as_ref() {
            os.write_string(6, v)?;
        }
        if let Some(v) = self.body.as_ref() {
            os.write_bytes(7, 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() -> MercuryReply {
        MercuryReply::new()
    }

    fn clear(&mut self) {
        self.status_code = ::std::option::Option::None;
        self.status_message = ::std::option::Option::None;
        self.cache_policy = ::std::option::Option::None;
        self.ttl = ::std::option::Option::None;
        self.etag = ::std::option::Option::None;
        self.content_type = ::std::option::Option::None;
        self.body = ::std::option::Option::None;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static MercuryReply {
        static instance: MercuryReply = MercuryReply {
            status_code: ::std::option::Option::None,
            status_message: ::std::option::Option::None,
            cache_policy: ::std::option::Option::None,
            ttl: ::std::option::Option::None,
            etag: ::std::option::Option::None,
            content_type: ::std::option::Option::None,
            body: ::std::option::Option::None,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for MercuryReply {
    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("MercuryReply").unwrap()).clone()
    }
}

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

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

/// Nested message and enums of message `MercuryReply`
pub mod mercury_reply {
    #[derive(Clone,Copy,PartialEq,Eq,Debug,Hash)]
    // @@protoc_insertion_point(enum:MercuryReply.CachePolicy)
    pub enum CachePolicy {
        // @@protoc_insertion_point(enum_value:MercuryReply.CachePolicy.CACHE_NO)
        CACHE_NO = 1,
        // @@protoc_insertion_point(enum_value:MercuryReply.CachePolicy.CACHE_PRIVATE)
        CACHE_PRIVATE = 2,
        // @@protoc_insertion_point(enum_value:MercuryReply.CachePolicy.CACHE_PUBLIC)
        CACHE_PUBLIC = 3,
    }

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

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

        fn from_i32(value: i32) -> ::std::option::Option<CachePolicy> {
            match value {
                1 => ::std::option::Option::Some(CachePolicy::CACHE_NO),
                2 => ::std::option::Option::Some(CachePolicy::CACHE_PRIVATE),
                3 => ::std::option::Option::Some(CachePolicy::CACHE_PUBLIC),
                _ => ::std::option::Option::None
            }
        }

        fn from_str(str: &str) -> ::std::option::Option<CachePolicy> {
            match str {
                "CACHE_NO" => ::std::option::Option::Some(CachePolicy::CACHE_NO),
                "CACHE_PRIVATE" => ::std::option::Option::Some(CachePolicy::CACHE_PRIVATE),
                "CACHE_PUBLIC" => ::std::option::Option::Some(CachePolicy::CACHE_PUBLIC),
                _ => ::std::option::Option::None
            }
        }

        const VALUES: &'static [CachePolicy] = &[
            CachePolicy::CACHE_NO,
            CachePolicy::CACHE_PRIVATE,
            CachePolicy::CACHE_PUBLIC,
        ];
    }

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

        fn descriptor(&self) -> ::protobuf::reflect::EnumValueDescriptor {
            let index = match self {
                CachePolicy::CACHE_NO => 0,
                CachePolicy::CACHE_PRIVATE => 1,
                CachePolicy::CACHE_PUBLIC => 2,
            };
            Self::enum_descriptor().value_by_index(index)
        }
    }

    // Note, `Default` is implemented although default value is not 0
    impl ::std::default::Default for CachePolicy {
        fn default() -> Self {
            CachePolicy::CACHE_NO
        }
    }

    impl CachePolicy {
        pub(in super) fn generated_enum_descriptor_data() -> ::protobuf::reflect::GeneratedEnumDescriptorData {
            ::protobuf::reflect::GeneratedEnumDescriptorData::new::<CachePolicy>("MercuryReply.CachePolicy")
        }
    }
}

// @@protoc_insertion_point(message:Header)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct Header {
    // message fields
    // @@protoc_insertion_point(field:Header.uri)
    pub uri: ::std::option::Option<::std::string::String>,
    // @@protoc_insertion_point(field:Header.content_type)
    pub content_type: ::std::option::Option<::std::string::String>,
    // @@protoc_insertion_point(field:Header.method)
    pub method: ::std::option::Option<::std::string::String>,
    // @@protoc_insertion_point(field:Header.status_code)
    pub status_code: ::std::option::Option<i32>,
    // @@protoc_insertion_point(field:Header.user_fields)
    pub user_fields: ::std::vec::Vec<UserField>,
    // special fields
    // @@protoc_insertion_point(special_field:Header.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

    // optional string uri = 1;

    pub fn uri(&self) -> &str {
        match self.uri.as_ref() {
            Some(v) => v,
            None => "",
        }
    }

    pub fn clear_uri(&mut self) {
        self.uri = ::std::option::Option::None;
    }

    pub fn has_uri(&self) -> bool {
        self.uri.is_some()
    }

    // Param is passed by value, moved
    pub fn set_uri(&mut self, v: ::std::string::String) {
        self.uri = ::std::option::Option::Some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_uri(&mut self) -> &mut ::std::string::String {
        if self.uri.is_none() {
            self.uri = ::std::option::Option::Some(::std::string::String::new());
        }
        self.uri.as_mut().unwrap()
    }

    // Take field
    pub fn take_uri(&mut self) -> ::std::string::String {
        self.uri.take().unwrap_or_else(|| ::std::string::String::new())
    }

    // optional string content_type = 2;

    pub fn content_type(&self) -> &str {
        match self.content_type.as_ref() {
            Some(v) => v,
            None => "",
        }
    }

    pub fn clear_content_type(&mut self) {
        self.content_type = ::std::option::Option::None;
    }

    pub fn has_content_type(&self) -> bool {
        self.content_type.is_some()
    }

    // Param is passed by value, moved
    pub fn set_content_type(&mut self, v: ::std::string::String) {
        self.content_type = ::std::option::Option::Some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_content_type(&mut self) -> &mut ::std::string::String {
        if self.content_type.is_none() {
            self.content_type = ::std::option::Option::Some(::std::string::String::new());
        }
        self.content_type.as_mut().unwrap()
    }

    // Take field
    pub fn take_content_type(&mut self) -> ::std::string::String {
        self.content_type.take().unwrap_or_else(|| ::std::string::String::new())
    }

    // optional string method = 3;

    pub fn method(&self) -> &str {
        match self.method.as_ref() {
            Some(v) => v,
            None => "",
        }
    }

    pub fn clear_method(&mut self) {
        self.method = ::std::option::Option::None;
    }

    pub fn has_method(&self) -> bool {
        self.method.is_some()
    }

    // Param is passed by value, moved
    pub fn set_method(&mut self, v: ::std::string::String) {
        self.method = ::std::option::Option::Some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_method(&mut self) -> &mut ::std::string::String {
        if self.method.is_none() {
            self.method = ::std::option::Option::Some(::std::string::String::new());
        }
        self.method.as_mut().unwrap()
    }

    // Take field
    pub fn take_method(&mut self) -> ::std::string::String {
        self.method.take().unwrap_or_else(|| ::std::string::String::new())
    }

    // optional sint32 status_code = 4;

    pub fn status_code(&self) -> i32 {
        self.status_code.unwrap_or(0)
    }

    pub fn clear_status_code(&mut self) {
        self.status_code = ::std::option::Option::None;
    }

    pub fn has_status_code(&self) -> bool {
        self.status_code.is_some()
    }

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

    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_option_accessor::<_, _>(
            "uri",
            |m: &Header| { &m.uri },
            |m: &mut Header| { &mut m.uri },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "content_type",
            |m: &Header| { &m.content_type },
            |m: &mut Header| { &mut m.content_type },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "method",
            |m: &Header| { &m.method },
            |m: &mut Header| { &mut m.method },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "status_code",
            |m: &Header| { &m.status_code },
            |m: &mut Header| { &mut m.status_code },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_vec_simpler_accessor::<_, _>(
            "user_fields",
            |m: &Header| { &m.user_fields },
            |m: &mut Header| { &mut m.user_fields },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<Header>(
            "Header",
            fields,
            oneofs,
        )
    }
}

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

    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.uri = ::std::option::Option::Some(is.read_string()?);
                },
                18 => {
                    self.content_type = ::std::option::Option::Some(is.read_string()?);
                },
                26 => {
                    self.method = ::std::option::Option::Some(is.read_string()?);
                },
                32 => {
                    self.status_code = ::std::option::Option::Some(is.read_sint32()?);
                },
                50 => {
                    self.user_fields.push(is.read_message()?);
                },
                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 let Some(v) = self.uri.as_ref() {
            my_size += ::protobuf::rt::string_size(1, &v);
        }
        if let Some(v) = self.content_type.as_ref() {
            my_size += ::protobuf::rt::string_size(2, &v);
        }
        if let Some(v) = self.method.as_ref() {
            my_size += ::protobuf::rt::string_size(3, &v);
        }
        if let Some(v) = self.status_code {
            my_size += ::protobuf::rt::sint32_size(4, v);
        }
        for value in &self.user_fields {
            let len = value.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 let Some(v) = self.uri.as_ref() {
            os.write_string(1, v)?;
        }
        if let Some(v) = self.content_type.as_ref() {
            os.write_string(2, v)?;
        }
        if let Some(v) = self.method.as_ref() {
            os.write_string(3, v)?;
        }
        if let Some(v) = self.status_code {
            os.write_sint32(4, v)?;
        }
        for v in &self.user_fields {
            ::protobuf::rt::write_message_field_with_cached_size(6, 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() -> Header {
        Header::new()
    }

    fn clear(&mut self) {
        self.uri = ::std::option::Option::None;
        self.content_type = ::std::option::Option::None;
        self.method = ::std::option::Option::None;
        self.status_code = ::std::option::Option::None;
        self.user_fields.clear();
        self.special_fields.clear();
    }

    fn default_instance() -> &'static Header {
        static instance: Header = Header {
            uri: ::std::option::Option::None,
            content_type: ::std::option::Option::None,
            method: ::std::option::Option::None,
            status_code: ::std::option::Option::None,
            user_fields: ::std::vec::Vec::new(),
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for Header {
    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("Header").unwrap()).clone()
    }
}

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

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

// @@protoc_insertion_point(message:UserField)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct UserField {
    // message fields
    // @@protoc_insertion_point(field:UserField.key)
    pub key: ::std::option::Option<::std::string::String>,
    // @@protoc_insertion_point(field:UserField.value)
    pub value: ::std::option::Option<::std::vec::Vec<u8>>,
    // special fields
    // @@protoc_insertion_point(special_field:UserField.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

    // optional string key = 1;

    pub fn key(&self) -> &str {
        match self.key.as_ref() {
            Some(v) => v,
            None => "",
        }
    }

    pub fn clear_key(&mut self) {
        self.key = ::std::option::Option::None;
    }

    pub fn has_key(&self) -> bool {
        self.key.is_some()
    }

    // Param is passed by value, moved
    pub fn set_key(&mut self, v: ::std::string::String) {
        self.key = ::std::option::Option::Some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_key(&mut self) -> &mut ::std::string::String {
        if self.key.is_none() {
            self.key = ::std::option::Option::Some(::std::string::String::new());
        }
        self.key.as_mut().unwrap()
    }

    // Take field
    pub fn take_key(&mut self) -> ::std::string::String {
        self.key.take().unwrap_or_else(|| ::std::string::String::new())
    }

    // optional bytes value = 2;

    pub fn value(&self) -> &[u8] {
        match self.value.as_ref() {
            Some(v) => v,
            None => &[],
        }
    }

    pub fn clear_value(&mut self) {
        self.value = ::std::option::Option::None;
    }

    pub fn has_value(&self) -> bool {
        self.value.is_some()
    }

    // Param is passed by value, moved
    pub fn set_value(&mut self, v: ::std::vec::Vec<u8>) {
        self.value = ::std::option::Option::Some(v);
    }

    // Mutable pointer to the field.
    // If field is not initialized, it is initialized with default value first.
    pub fn mut_value(&mut self) -> &mut ::std::vec::Vec<u8> {
        if self.value.is_none() {
            self.value = ::std::option::Option::Some(::std::vec::Vec::new());
        }
        self.value.as_mut().unwrap()
    }

    // Take field
    pub fn take_value(&mut self) -> ::std::vec::Vec<u8> {
        self.value.take().unwrap_or_else(|| ::std::vec::Vec::new())
    }

    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_option_accessor::<_, _>(
            "key",
            |m: &UserField| { &m.key },
            |m: &mut UserField| { &mut m.key },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "value",
            |m: &UserField| { &m.value },
            |m: &mut UserField| { &mut m.value },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<UserField>(
            "UserField",
            fields,
            oneofs,
        )
    }
}

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

    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.key = ::std::option::Option::Some(is.read_string()?);
                },
                18 => {
                    self.value = ::std::option::Option::Some(is.read_bytes()?);
                },
                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 let Some(v) = self.key.as_ref() {
            my_size += ::protobuf::rt::string_size(1, &v);
        }
        if let Some(v) = self.value.as_ref() {
            my_size += ::protobuf::rt::bytes_size(2, &v);
        }
        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 let Some(v) = self.key.as_ref() {
            os.write_string(1, v)?;
        }
        if let Some(v) = self.value.as_ref() {
            os.write_bytes(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() -> UserField {
        UserField::new()
    }

    fn clear(&mut self) {
        self.key = ::std::option::Option::None;
        self.value = ::std::option::Option::None;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static UserField {
        static instance: UserField = UserField {
            key: ::std::option::Option::None,
            value: ::std::option::Option::None,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for UserField {
    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("UserField").unwrap()).clone()
    }
}

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

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

static file_descriptor_proto_data: &'static [u8] = b"\
    \n\rmercury.proto\"C\n\x16MercuryMultiGetRequest\x12)\n\x07request\x18\
    \x01\x20\x03(\x0b2\x0f.MercuryRequestR\x07request\";\n\x14MercuryMultiGe\
    tReply\x12#\n\x05reply\x18\x01\x20\x03(\x0b2\r.MercuryReplyR\x05reply\"m\
    \n\x0eMercuryRequest\x12\x10\n\x03uri\x18\x01\x20\x01(\tR\x03uri\x12!\n\
    \x0ccontent_type\x18\x02\x20\x01(\tR\x0bcontentType\x12\x12\n\x04body\
    \x18\x03\x20\x01(\x0cR\x04body\x12\x12\n\x04etag\x18\x04\x20\x01(\x0cR\
    \x04etag\"\xb3\x02\n\x0cMercuryReply\x12\x1f\n\x0bstatus_code\x18\x01\
    \x20\x01(\x11R\nstatusCode\x12%\n\x0estatus_message\x18\x02\x20\x01(\tR\
    \rstatusMessage\x12<\n\x0ccache_policy\x18\x03\x20\x01(\x0e2\x19.Mercury\
    Reply.CachePolicyR\x0bcachePolicy\x12\x10\n\x03ttl\x18\x04\x20\x01(\x11R\
    \x03ttl\x12\x12\n\x04etag\x18\x05\x20\x01(\x0cR\x04etag\x12!\n\x0cconten\
    t_type\x18\x06\x20\x01(\tR\x0bcontentType\x12\x12\n\x04body\x18\x07\x20\
    \x01(\x0cR\x04body\"@\n\x0bCachePolicy\x12\x0c\n\x08CACHE_NO\x10\x01\x12\
    \x11\n\rCACHE_PRIVATE\x10\x02\x12\x10\n\x0cCACHE_PUBLIC\x10\x03\"\xa3\
    \x01\n\x06Header\x12\x10\n\x03uri\x18\x01\x20\x01(\tR\x03uri\x12!\n\x0cc\
    ontent_type\x18\x02\x20\x01(\tR\x0bcontentType\x12\x16\n\x06method\x18\
    \x03\x20\x01(\tR\x06method\x12\x1f\n\x0bstatus_code\x18\x04\x20\x01(\x11\
    R\nstatusCode\x12+\n\x0buser_fields\x18\x06\x20\x03(\x0b2\n.UserFieldR\n\
    userFields\"3\n\tUserField\x12\x10\n\x03key\x18\x01\x20\x01(\tR\x03key\
    \x12\x14\n\x05value\x18\x02\x20\x01(\x0cR\x05valueb\x06proto2\
";

/// `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(6);
            messages.push(MercuryMultiGetRequest::generated_message_descriptor_data());
            messages.push(MercuryMultiGetReply::generated_message_descriptor_data());
            messages.push(MercuryRequest::generated_message_descriptor_data());
            messages.push(MercuryReply::generated_message_descriptor_data());
            messages.push(Header::generated_message_descriptor_data());
            messages.push(UserField::generated_message_descriptor_data());
            let mut enums = ::std::vec::Vec::with_capacity(1);
            enums.push(mercury_reply::CachePolicy::generated_enum_descriptor_data());
            ::protobuf::reflect::GeneratedFileDescriptor::new_generated(
                file_descriptor_proto(),
                deps,
                messages,
                enums,
            )
        });
        ::protobuf::reflect::FileDescriptor::new_generated_2(generated_file_descriptor)
    })
}
