diff options
author | Jeff Vander Stoep <jeffv@google.com> | 2023-03-28 09:49:32 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-03-28 09:49:32 +0000 |
commit | 8d72ee0851d0ec15904ec1c2a86a46b15a250564 (patch) | |
tree | 1f335bdd78b8ed748166610ffd856da2f1130d58 | |
parent | 4ae91b485880d11964afa76ddc02ee7f58a7efb0 (diff) | |
parent | 1d50a14de4191a9b6863290cb3917cb96c215c1b (diff) | |
download | protobuf-8d72ee0851d0ec15904ec1c2a86a46b15a250564.tar.gz |
Introduce libprotobuf_deprecated am: 158191ed44 am: 7ed901823e am: ee940834e7 am: 1d50a14de4
Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/protobuf/+/2510795
Change-Id: Ida763f742f0ee2b109b4e8bf5f9b354b7fb8a380
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
88 files changed, 32612 insertions, 0 deletions
diff --git a/2.27.1/.cargo_vcs_info.json b/2.27.1/.cargo_vcs_info.json new file mode 100644 index 0000000..ca74a42 --- /dev/null +++ b/2.27.1/.cargo_vcs_info.json @@ -0,0 +1,6 @@ +{ + "git": { + "sha1": "ec31ce829473039ac598ca6fdcb245cbd6fa82ba" + }, + "path_in_vcs": "protobuf" +}
\ No newline at end of file diff --git a/2.27.1/Android.bp b/2.27.1/Android.bp new file mode 100644 index 0000000..6801e6f --- /dev/null +++ b/2.27.1/Android.bp @@ -0,0 +1,36 @@ +// This file is generated by cargo2android.py --config cargo2android.json. +// Do not modify this file as changes will be overridden on upgrade. + +genrule { + name: "copy_protobuf_deprecated_build_out", + srcs: ["out/*"], + cmd: "cp $(in) $(genDir)", + out: ["version.rs"], +} + +rust_library { + name: "libprotobuf_deprecated", + // has rustc warnings + host_supported: true, + crate_name: "protobuf", + cargo_env_compat: true, + cargo_pkg_version: "2.27.1", + srcs: [ + "src/lib.rs", + ":copy_protobuf_deprecated_build_out", + ], + edition: "2018", + features: ["bytes"], + rustlibs: [ + "libbytes", + ], + apex_available: [ + "//apex_available:platform", + "com.android.btservices", + "com.android.compos", + "com.android.virt", + ], + product_available: true, + vendor_available: true, + min_sdk_version: "29", +} diff --git a/2.27.1/Cargo.toml b/2.27.1/Cargo.toml new file mode 100644 index 0000000..9e4935f --- /dev/null +++ b/2.27.1/Cargo.toml @@ -0,0 +1,50 @@ +# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO +# +# When uploading crates to the registry Cargo will automatically +# "normalize" Cargo.toml files for maximal compatibility +# with all versions of Cargo and also rewrite `path` dependencies +# to registry (e.g., crates.io) dependencies. +# +# If you are reading this file be aware that the original Cargo.toml +# will likely look very different (and much more reasonable). +# See Cargo.toml.orig for the original contents. + +[package] +edition = "2018" +name = "protobuf" +version = "2.27.1" +authors = ["Stepan Koltsov <stepan.koltsov@gmail.com>"] +description = """ +Rust implementation of Google protocol buffers +""" +homepage = "https://github.com/stepancheg/rust-protobuf/" +documentation = "https://github.com/stepancheg/rust-protobuf/blob/master/README.md" +license = "MIT" +repository = "https://github.com/stepancheg/rust-protobuf/" + +[package.metadata.docs.rs] +all-features = true + +[lib] +doctest = false +bench = false + +[dependencies.bytes] +version = "1.0" +optional = true + +[dependencies.serde] +version = "1.0" +features = ["derive"] +optional = true + +[dependencies.serde_derive] +version = "1.0" +optional = true + +[features] +with-bytes = ["bytes"] +with-serde = [ + "serde", + "serde_derive", +] diff --git a/2.27.1/Cargo.toml.orig b/2.27.1/Cargo.toml.orig new file mode 100644 index 0000000..c1be2f7 --- /dev/null +++ b/2.27.1/Cargo.toml.orig @@ -0,0 +1,29 @@ +[package] + +name = "protobuf" +version = "2.27.1" +authors = ["Stepan Koltsov <stepan.koltsov@gmail.com>"] +edition = "2018" +license = "MIT" +homepage = "https://github.com/stepancheg/rust-protobuf/" +repository = "https://github.com/stepancheg/rust-protobuf/" +documentation = "https://github.com/stepancheg/rust-protobuf/blob/master/README.md" +description = """ +Rust implementation of Google protocol buffers +""" + +[lib] +doctest = false +bench = false + +[features] +with-bytes = ["bytes"] +with-serde = ["serde", "serde_derive"] + +[dependencies] +bytes = { version = "1.0", optional = true } +serde = { version = "1.0", features = ["derive"], optional = true } +serde_derive = { version = "1.0", optional = true } + +[package.metadata.docs.rs] +all-features = true diff --git a/2.27.1/LICENSE b/2.27.1/LICENSE new file mode 120000 index 0000000..85de3d4 --- /dev/null +++ b/2.27.1/LICENSE @@ -0,0 +1 @@ +LICENSE.txt
\ No newline at end of file diff --git a/2.27.1/LICENSE.txt b/2.27.1/LICENSE.txt new file mode 100644 index 0000000..acce639 --- /dev/null +++ b/2.27.1/LICENSE.txt @@ -0,0 +1,19 @@ +Copyright (c) 2019 Stepan Koltsov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file diff --git a/2.27.1/METADATA b/2.27.1/METADATA new file mode 100644 index 0000000..2bcb504 --- /dev/null +++ b/2.27.1/METADATA @@ -0,0 +1,19 @@ +name: "protobuf" +description: "Rust implementation of Google protocol buffers" +third_party { + url { + type: HOMEPAGE + value: "https://crates.io/crates/protobuf" + } + url { + type: ARCHIVE + value: "https://static.crates.io/crates/protobuf/protobuf-2.27.1.crate" + } + version: "2.27.1" + license_type: NOTICE + last_upgrade_date { + year: 2022 + month: 3 + day: 1 + } +} diff --git a/2.27.1/MODULE_LICENSE_MIT b/2.27.1/MODULE_LICENSE_MIT new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/2.27.1/MODULE_LICENSE_MIT diff --git a/2.27.1/NOTICE b/2.27.1/NOTICE new file mode 120000 index 0000000..7a694c9 --- /dev/null +++ b/2.27.1/NOTICE @@ -0,0 +1 @@ +LICENSE
\ No newline at end of file diff --git a/2.27.1/OWNERS b/2.27.1/OWNERS new file mode 100644 index 0000000..46fc303 --- /dev/null +++ b/2.27.1/OWNERS @@ -0,0 +1 @@ +include platform/prebuilts/rust:/OWNERS diff --git a/2.27.1/README.md b/2.27.1/README.md new file mode 100644 index 0000000..af32486 --- /dev/null +++ b/2.27.1/README.md @@ -0,0 +1,95 @@ +<!-- cargo-sync-readme start --> + +# Library to read and write protocol buffers data + +# Version 2 is stable + +Currently developed branch of rust-protobuf [is 3](https://docs.rs/protobuf/%3E=3.0.0-alpha). +It has the same spirit as version 2, but contains numerous improvements like: +* runtime reflection for mutability, not just for access +* protobuf text format and JSON parsing (which rely on reflection) +* dynamic message support: work with protobuf data without generating code from schema + +Stable version of rust-protobuf will be supported until version 3 released. + +[Tracking issue for version 3](https://github.com/stepancheg/rust-protobuf/issues/518). + +# How to generate rust code + +There are several ways to generate rust code from `.proto` files + +## Invoke `protoc` programmatically with protoc-rust crate (recommended) + +Have a look at readme in [protoc-rust crate](https://docs.rs/protoc-rust/=2). + +## Use pure rust protobuf parser and code generator + +Readme should be in +[protobuf-codegen-pure crate](https://docs.rs/protobuf-codegen-pure/=2). + +## Use protoc-gen-rust plugin + +Readme is [here](https://docs.rs/protobuf-codegen/=2). + +## Generated code + +Have a look at generated files (for current development version), +used internally in rust-protobuf: + +* [descriptor.rs](https://github.com/stepancheg/rust-protobuf/blob/master/protobuf/src/descriptor.rs) + for [descriptor.proto](https://github.com/stepancheg/rust-protobuf/blob/master/protoc-bin-vendored/include/google/protobuf/descriptor.proto) + (that is part of Google protobuf) + +# Copy on write + +Rust-protobuf can be used with [bytes crate](https://github.com/tokio-rs/bytes). + +To enable `Bytes` you need to: + +1. Enable `with-bytes` feature in rust-protobuf: + +```rust +[dependencies] +protobuf = { version = "~2.0", features = ["with-bytes"] } +``` + +2. Enable bytes option + +with `Customize` when codegen is invoked programmatically: + +```rust +protoc_rust::run(protoc_rust::Args { + ... + customize: Customize { + carllerche_bytes_for_bytes: Some(true), + carllerche_bytes_for_string: Some(true), + ..Default::default() + }, +}); +``` + +or in `.proto` file: + +```rust +import "rustproto.proto"; + +option (rustproto.carllerche_bytes_for_bytes_all) = true; +option (rustproto.carllerche_bytes_for_string_all) = true; +``` + +With these options enabled, fields of type `bytes` or `string` are +generated as `Bytes` or `Chars` respectively. When `CodedInputStream` is constructed +from `Bytes` object, fields of these types get subslices of original `Bytes` object, +instead of being allocated on heap. + +# Accompanying crates + +* [`protoc-rust`](https://docs.rs/protoc-rust/=2) + and [`protobuf-codegen-pure`](https://docs.rs/protobuf-codegen-pure/=2) + can be used to rust code from `.proto` crates. +* [`protobuf-codegen`](https://docs.rs/protobuf-codegen/=2) for `protoc-gen-rust` protoc plugin. +* [`protoc`](https://docs.rs/protoc/=2) crate can be used to invoke `protoc` programmatically. +* [`protoc-bin-vendored`](https://docs.rs/protoc-bin-vendored/=2) contains `protoc` command + packed into the crate. + +<!-- cargo-sync-readme end --> diff --git a/2.27.1/TEST_MAPPING b/2.27.1/TEST_MAPPING new file mode 100644 index 0000000..0225a59 --- /dev/null +++ b/2.27.1/TEST_MAPPING @@ -0,0 +1,14 @@ +// Generated by update_crate_tests.py for tests that depend on this crate. +{ + "imports": [ + { + "path": "packages/modules/Virtualization/authfs" + }, + { + "path": "packages/modules/Virtualization/microdroid_manager" + }, + { + "path": "packages/modules/Virtualization/virtualizationmanager" + } + ] +} diff --git a/2.27.1/benches/coded_input_stream.rs b/2.27.1/benches/coded_input_stream.rs new file mode 100644 index 0000000..d1795e5 --- /dev/null +++ b/2.27.1/benches/coded_input_stream.rs @@ -0,0 +1,104 @@ +// `cargo test --benches` and `#[feature(test)]` work only in nightly +#![cfg(rustc_nightly)] +#![feature(test)] + +extern crate protobuf; +extern crate test; + +use std::io; +use std::io::Read; + +use protobuf::CodedInputStream; + +use self::test::Bencher; + +fn make_bytes(len: usize) -> Vec<u8> { + let mut r = Vec::with_capacity(len); + for i in 0..len { + r.push((i % 10) as u8); + } + test::black_box(r) +} + +#[bench] +fn read_byte(b: &mut Bencher) { + let v = make_bytes(1_000); + b.iter(|| { + let mut is = CodedInputStream::from_bytes(test::black_box(&v)); + while !is.eof().expect("eof") { + test::black_box(is.read_raw_byte().expect("read")); + } + }); +} + +#[bench] +fn read_byte_no_eof(b: &mut Bencher) { + let v = make_bytes(1_000); + b.iter(|| { + let mut is = CodedInputStream::from_bytes(test::black_box(&v)); + for _ in 0..v.len() { + test::black_box(is.read_raw_byte().expect("read")); + } + assert!(is.eof().expect("eof")); + }); +} + +#[bench] +fn read_byte_from_vec(b: &mut Bencher) { + let v = make_bytes(1_000); + b.iter(|| { + let mut v = io::Cursor::new(test::black_box(&v)); + loop { + let mut buf = [0]; + let count = v.read(&mut buf).expect("read"); + if count == 0 { + break; + } + test::black_box(buf); + } + }); +} + +#[bench] +fn read_varint_12(b: &mut Bencher) { + let mut v = Vec::new(); + { + let mut v = protobuf::CodedOutputStream::vec(&mut v); + for i in 0..1000 { + // one or two byte varints + v.write_raw_varint32((i * 7919) % (1 << 14)).expect("write"); + } + v.flush().expect("flush"); + } + b.iter(|| { + let mut is = CodedInputStream::from_bytes(test::black_box(&v)); + let mut count = 0; + while !is.eof().expect("eof") { + test::black_box(is.read_raw_varint32().expect("read")); + count += 1; + } + assert_eq!(1000, count); + }) +} + +#[bench] +fn read_varint_1(b: &mut Bencher) { + let mut v = Vec::new(); + { + let mut v = protobuf::CodedOutputStream::vec(&mut v); + for i in 0..1000 { + // one or two byte varints + v.write_raw_varint32((i * 7919) % (1 << 7)).expect("write"); + } + v.flush().expect("flush"); + } + b.iter(|| { + let mut is = CodedInputStream::from_bytes(test::black_box(&v)); + let mut count = 0; + while !is.eof().expect("eof") { + test::black_box(is.read_raw_varint32().expect("read")); + count += 1; + } + assert_eq!(1000, count); + }) +} diff --git a/2.27.1/benches/coded_output_stream.rs b/2.27.1/benches/coded_output_stream.rs new file mode 100644 index 0000000..9edf95c --- /dev/null +++ b/2.27.1/benches/coded_output_stream.rs @@ -0,0 +1,50 @@ +// `cargo test --benches` and `#[feature(test)]` work only in nightly +#![cfg(rustc_nightly)] +#![feature(test)] + +extern crate protobuf; +extern crate test; + +use protobuf::CodedOutputStream; + +use self::test::Bencher; + +#[inline] +fn buffer_write_byte(os: &mut CodedOutputStream) { + for i in 0..10 { + os.write_raw_byte(test::black_box(i as u8)).unwrap(); + } + os.flush().unwrap(); +} + +#[inline] +fn buffer_write_bytes(os: &mut CodedOutputStream) { + for _ in 0..10 { + os.write_raw_bytes(test::black_box(b"1234567890")).unwrap(); + } + os.flush().unwrap(); +} + +#[bench] +fn bench_buffer(b: &mut Bencher) { + b.iter(|| { + let mut v = Vec::new(); + { + let mut os = CodedOutputStream::new(&mut v); + buffer_write_byte(&mut os); + } + v + }); +} + +#[bench] +fn bench_buffer_bytes(b: &mut Bencher) { + b.iter(|| { + let mut v = Vec::new(); + { + let mut os = CodedOutputStream::new(&mut v); + buffer_write_bytes(&mut os); + } + v + }); +} diff --git a/2.27.1/build.rs b/2.27.1/build.rs new file mode 100644 index 0000000..653ba35 --- /dev/null +++ b/2.27.1/build.rs @@ -0,0 +1,78 @@ +use std::env; +use std::fs::File; +use std::io::Read; +use std::io::Write; +use std::path::Path; +use std::path::PathBuf; +use std::process; + +// % rustc +stable --version +// rustc 1.26.0 (a77568041 2018-05-07) +// % rustc +beta --version +// rustc 1.27.0-beta.1 (03fb2f447 2018-05-09) +// % rustc +nightly --version +// rustc 1.27.0-nightly (acd3871ba 2018-05-10) +fn version_is_nightly(version: &str) -> bool { + version.contains("nightly") +} + +fn main() { + let rustc = env::var("RUSTC").expect("RUSTC unset"); + + let mut child = process::Command::new(rustc) + .args(&["--version"]) + .stdin(process::Stdio::null()) + .stdout(process::Stdio::piped()) + .spawn() + .expect("spawn rustc"); + + let mut rustc_version = String::new(); + + child + .stdout + .as_mut() + .expect("stdout") + .read_to_string(&mut rustc_version) + .expect("read_to_string"); + assert!(child.wait().expect("wait").success()); + + if version_is_nightly(&rustc_version) { + println!("cargo:rustc-cfg=rustc_nightly"); + } + + write_version(); +} + +fn out_dir() -> PathBuf { + PathBuf::from(env::var("OUT_DIR").expect("OUT_DIR")) +} + +fn version() -> String { + env::var("CARGO_PKG_VERSION").expect("CARGO_PKG_VERSION") +} + +fn write_version() { + let version = version(); + let version_ident = format!( + "VERSION_{}", + version.replace(".", "_").replace("-", "_").to_uppercase() + ); + let mut file = File::create(Path::join(&out_dir(), "version.rs")).expect("open"); + writeln!(file, "/// protobuf crate version").unwrap(); + writeln!(file, "pub const VERSION: &'static str = \"{}\";", version).unwrap(); + writeln!(file, "/// This symbol is used by codegen").unwrap(); + writeln!(file, "#[doc(hidden)]").unwrap(); + writeln!( + file, + "pub const VERSION_IDENT: &'static str = \"{}\";", + version_ident + ) + .unwrap(); + writeln!( + file, + "/// This symbol can be referenced to assert that proper version of crate is used" + ) + .unwrap(); + writeln!(file, "pub const {}: () = ();", version_ident).unwrap(); + file.flush().unwrap(); +} diff --git a/2.27.1/cargo2android.json b/2.27.1/cargo2android.json new file mode 100644 index 0000000..cafe7cd --- /dev/null +++ b/2.27.1/cargo2android.json @@ -0,0 +1,24 @@ +{ + "apex-available": [ + "//apex_available:platform", + "com.android.btservices", + "com.android.compos", + "com.android.virt" + ], + "copy-out": true, + "dependencies": true, + "device": true, + "features": "bytes", + "variants": [ + { + "suffix": "" + }, + { + "suffix": "_with_serde", + "features": "with-serde", + "device": false + } + ], + "min-sdk-version": "29", + "run": true +}
\ No newline at end of file diff --git a/2.27.1/out/version.rs b/2.27.1/out/version.rs new file mode 100644 index 0000000..18bbac5 --- /dev/null +++ b/2.27.1/out/version.rs @@ -0,0 +1,7 @@ +/// protobuf crate version +pub const VERSION: &'static str = "2.27.1"; +/// This symbol is used by codegen +#[doc(hidden)] +pub const VERSION_IDENT: &'static str = "VERSION_2_27_1"; +/// This symbol can be referenced to assert that proper version of crate is used +pub const VERSION_2_27_1: () = (); diff --git a/2.27.1/regenerate.sh b/2.27.1/regenerate.sh new file mode 100755 index 0000000..0173496 --- /dev/null +++ b/2.27.1/regenerate.sh @@ -0,0 +1,74 @@ +#!/bin/sh -ex + +cd "$(dirname "$0")" + +die() { + echo "$@" >&2 + exit 1 +} + +protoc_ver=$(protoc --version) +case "$protoc_ver" in +"libprotoc 3"*) ;; +*) + die "you need to use protobuf 3 to regenerate .rs from .proto" + ;; +esac + +cargo build --manifest-path=../protobuf-codegen/Cargo.toml +cargo build --manifest-path=../protoc-bin-vendored/Cargo.toml --bin protoc-bin-which + +PROTOC=$(cargo run --manifest-path=../protoc-bin-vendored/Cargo.toml --bin protoc-bin-which) + +where_am_i=$( + cd .. + pwd +) + +rm -rf tmp-generated +mkdir tmp-generated + +case $(uname) in +Linux) + exe_suffix="" + ;; +MSYS_NT*) + exe_suffix=".exe" + ;; +esac + +"$PROTOC" \ + --plugin=protoc-gen-rust="$where_am_i/target/debug/protoc-gen-rust$exe_suffix" \ + --rust_out tmp-generated \ + --rust_opt 'serde_derive=true inside_protobuf=true' \ + -I../proto \ + -I../protoc-bin-vendored/include \ + ../protoc-bin-vendored/include/google/protobuf/*.proto \ + ../protoc-bin-vendored/include/google/protobuf/compiler/* \ + ../proto/rustproto.proto + +mv tmp-generated/descriptor.rs tmp-generated/plugin.rs tmp-generated/rustproto.rs src/ +mv tmp-generated/*.rs src/well_known_types/ +( + cd src/well_known_types + exec >mod.rs + echo "// This file is generated. Do not edit" + echo '//! Generated code for "well known types"' + echo "//!" + echo "//! [This document](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf) describes these types." + + mod_list() { + # shellcheck disable=SC2010 + ls | grep -v mod.rs | sed -e 's,\.rs$,,' + } + + echo + mod_list | sed -e 's,^,mod ,; s,$,;,' + + echo + mod_list | while read -r mod; do + echo "pub use self::$mod::*;" + done +) + +# vim: set ts=4 sw=4 et: diff --git a/2.27.1/src/any.rs b/2.27.1/src/any.rs new file mode 100644 index 0000000..31ddd82 --- /dev/null +++ b/2.27.1/src/any.rs @@ -0,0 +1,114 @@ +use crate::parse_from_bytes; +use crate::reflect::MessageDescriptor; +use crate::well_known_types::Any; +use crate::Message; +use crate::ProtobufResult; + +impl Any { + fn type_url(type_url_prefix: &str, descriptor: &MessageDescriptor) -> String { + format!("{}/{}", type_url_prefix, descriptor.full_name()) + } + + fn get_type_name_from_type_url(type_url: &str) -> Option<&str> { + match type_url.rfind('/') { + Some(i) => Some(&type_url[i + 1..]), + None => None, + } + } + + /// Pack any message into `well_known_types::Any` value. + /// + /// # Examples + /// + /// ``` + /// # use protobuf::Message; + /// # use protobuf::ProtobufResult; + /// use protobuf::well_known_types::Any; + /// + /// # fn the_test<MyMessage: Message>(message: &MyMessage) -> ProtobufResult<()> { + /// let message: &MyMessage = message; + /// let any = Any::pack(message)?; + /// assert!(any.is::<MyMessage>()); + /// # Ok(()) + /// # } + /// ``` + pub fn pack<M: Message>(message: &M) -> ProtobufResult<Any> { + Any::pack_dyn(message) + } + + /// Pack any message into `well_known_types::Any` value. + /// + /// # Examples + /// + /// ``` + /// use protobuf::Message; + /// # use protobuf::ProtobufResult; + /// use protobuf::well_known_types::Any; + /// + /// # fn the_test(message: &dyn Message) -> ProtobufResult<()> { + /// let message: &dyn Message = message; + /// let any = Any::pack_dyn(message)?; + /// assert!(any.is_dyn(message.descriptor())); + /// # Ok(()) + /// # } + /// ``` + pub fn pack_dyn(message: &dyn Message) -> ProtobufResult<Any> { + Any::pack_with_type_url_prefix(message, "type.googleapis.com") + } + + fn pack_with_type_url_prefix( + message: &dyn Message, + type_url_prefix: &str, + ) -> ProtobufResult<Any> { + Ok(Any { + type_url: Any::type_url(type_url_prefix, message.descriptor()), + value: message.write_to_bytes()?, + ..Default::default() + }) + } + + /// Check if `Any` contains a message of given type. + pub fn is<M: Message>(&self) -> bool { + self.is_dyn(M::descriptor_static()) + } + + /// Check if `Any` contains a message of given type. + pub fn is_dyn(&self, descriptor: &MessageDescriptor) -> bool { + match Any::get_type_name_from_type_url(&self.type_url) { + Some(type_name) => type_name == descriptor.full_name(), + None => false, + } + } + + /// Extract a message from this `Any`. + /// + /// # Returns + /// + /// * `Ok(None)` when message type mismatch + /// * `Err` when parse failed + pub fn unpack<M: Message>(&self) -> ProtobufResult<Option<M>> { + if !self.is::<M>() { + return Ok(None); + } + Ok(Some(parse_from_bytes(&self.value)?)) + } + + /// Extract a message from this `Any`. + /// + /// # Returns + /// + /// * `Ok(None)` when message type mismatch + /// * `Err` when parse failed + pub fn unpack_dyn( + &self, + descriptor: &MessageDescriptor, + ) -> ProtobufResult<Option<Box<dyn Message>>> { + if !self.is_dyn(descriptor) { + return Ok(None); + } + let mut message = descriptor.new_instance(); + message.merge_from_bytes(&self.value)?; + message.check_initialized()?; + Ok(Some(message)) + } +} diff --git a/2.27.1/src/buf_read_iter.rs b/2.27.1/src/buf_read_iter.rs new file mode 100644 index 0000000..ff1fce2 --- /dev/null +++ b/2.27.1/src/buf_read_iter.rs @@ -0,0 +1,523 @@ +use std::cmp; +use std::io::BufRead; +use std::io::BufReader; +use std::io::Read; +use std::mem; +use std::mem::MaybeUninit; +use std::u64; + +#[cfg(feature = "bytes")] +use bytes::buf::UninitSlice; +#[cfg(feature = "bytes")] +use bytes::BufMut; +#[cfg(feature = "bytes")] +use bytes::Bytes; +#[cfg(feature = "bytes")] +use bytes::BytesMut; + +use crate::buf_read_or_reader::BufReadOrReader; +use crate::coded_input_stream::READ_RAW_BYTES_MAX_ALLOC; +use crate::error::WireError; +use crate::misc::maybe_uninit_write_slice; +use crate::misc::vec_spare_capacity_mut; +use crate::ProtobufError; +use crate::ProtobufResult; + +// If an input stream is constructed with a `Read`, we create a +// `BufReader` with an internal buffer of this size. +const INPUT_STREAM_BUFFER_SIZE: usize = 4096; + +const USE_UNSAFE_FOR_SPEED: bool = true; + +const NO_LIMIT: u64 = u64::MAX; + +/// Hold all possible combinations of input source +enum InputSource<'a> { + Read(BufReadOrReader<'a>), + Slice(&'a [u8]), + #[cfg(feature = "bytes")] + Bytes(&'a Bytes), +} + +/// Dangerous implementation of `BufRead`. +/// +/// Unsafe wrapper around BufRead which assumes that `BufRead` buf is +/// not moved when `BufRead` is moved. +/// +/// This assumption is generally incorrect, however, in practice +/// `BufReadIter` is created either from `BufRead` reference (which +/// cannot be moved, because it is locked by `CodedInputStream`) or from +/// `BufReader` which does not move its buffer (we know that from +/// inspecting rust standard library). +/// +/// It is important for `CodedInputStream` performance that small reads +/// (e. g. 4 bytes reads) do not involve virtual calls or switches. +/// This is achievable with `BufReadIter`. +pub(crate) struct BufReadIter<'a> { + input_source: InputSource<'a>, + buf: &'a [u8], + pos_within_buf: usize, + limit_within_buf: usize, + pos_of_buf_start: u64, + limit: u64, +} + +impl<'a> Drop for BufReadIter<'a> { + fn drop(&mut self) { + match self.input_source { + InputSource::Read(ref mut buf_read) => buf_read.consume(self.pos_within_buf), + _ => {} + } + } +} + +impl<'ignore> BufReadIter<'ignore> { + pub(crate) fn from_read<'a>(read: &'a mut dyn Read) -> BufReadIter<'a> { + BufReadIter { + input_source: InputSource::Read(BufReadOrReader::BufReader(BufReader::with_capacity( + INPUT_STREAM_BUFFER_SIZE, + read, + ))), + buf: &[], + pos_within_buf: 0, + limit_within_buf: 0, + pos_of_buf_start: 0, + limit: NO_LIMIT, + } + } + + pub(crate) fn from_buf_read<'a>(buf_read: &'a mut dyn BufRead) -> BufReadIter<'a> { + BufReadIter { + input_source: InputSource::Read(BufReadOrReader::BufRead(buf_read)), + buf: &[], + pos_within_buf: 0, + limit_within_buf: 0, + pos_of_buf_start: 0, + limit: NO_LIMIT, + } + } + + pub(crate) fn from_byte_slice<'a>(bytes: &'a [u8]) -> BufReadIter<'a> { + BufReadIter { + input_source: InputSource::Slice(bytes), + buf: bytes, + pos_within_buf: 0, + limit_within_buf: bytes.len(), + pos_of_buf_start: 0, + limit: NO_LIMIT, + } + } + + #[cfg(feature = "bytes")] + pub(crate) fn from_bytes<'a>(bytes: &'a Bytes) -> BufReadIter<'a> { + BufReadIter { + input_source: InputSource::Bytes(bytes), + buf: &bytes, + pos_within_buf: 0, + limit_within_buf: bytes.len(), + pos_of_buf_start: 0, + limit: NO_LIMIT, + } + } + + #[inline] + fn assertions(&self) { + debug_assert!(self.pos_within_buf <= self.limit_within_buf); + debug_assert!(self.limit_within_buf <= self.buf.len()); + debug_assert!(self.pos_of_buf_start + self.pos_within_buf as u64 <= self.limit); + } + + #[inline(always)] + pub(crate) fn pos(&self) -> u64 { + self.pos_of_buf_start + self.pos_within_buf as u64 + } + + /// Recompute `limit_within_buf` after update of `limit` + #[inline] + fn update_limit_within_buf(&mut self) { + if self.pos_of_buf_start + (self.buf.len() as u64) <= self.limit { + self.limit_within_buf = self.buf.len(); + } else { + self.limit_within_buf = (self.limit - self.pos_of_buf_start) as usize; + } + + self.assertions(); + } + + pub(crate) fn push_limit(&mut self, limit: u64) -> ProtobufResult<u64> { + let new_limit = match self.pos().checked_add(limit) { + Some(new_limit) => new_limit, + None => return Err(ProtobufError::WireError(WireError::Other)), + }; + + if new_limit > self.limit { + return Err(ProtobufError::WireError(WireError::Other)); + } + + let prev_limit = mem::replace(&mut self.limit, new_limit); + + self.update_limit_within_buf(); + + Ok(prev_limit) + } + + #[inline] + pub(crate) fn pop_limit(&mut self, limit: u64) { + assert!(limit >= self.limit); + + self.limit = limit; + + self.update_limit_within_buf(); + } + + #[inline] + pub(crate) fn remaining_in_buf(&self) -> &[u8] { + if USE_UNSAFE_FOR_SPEED { + unsafe { + &self + .buf + .get_unchecked(self.pos_within_buf..self.limit_within_buf) + } + } else { + &self.buf[self.pos_within_buf..self.limit_within_buf] + } + } + + #[inline(always)] + pub(crate) fn remaining_in_buf_len(&self) -> usize { + self.limit_within_buf - self.pos_within_buf + } + + #[inline(always)] + pub(crate) fn bytes_until_limit(&self) -> u64 { + if self.limit == NO_LIMIT { + NO_LIMIT + } else { + self.limit - (self.pos_of_buf_start + self.pos_within_buf as u64) + } + } + + #[inline(always)] + pub(crate) fn eof(&mut self) -> ProtobufResult<bool> { + if self.pos_within_buf == self.limit_within_buf { + Ok(self.fill_buf()?.is_empty()) + } else { + Ok(false) + } + } + + #[inline(always)] + pub(crate) fn read_byte(&mut self) -> ProtobufResult<u8> { + if self.pos_within_buf == self.limit_within_buf { + self.do_fill_buf()?; + if self.remaining_in_buf_len() == 0 { + return Err(ProtobufError::WireError(WireError::UnexpectedEof)); + } + } + + let r = if USE_UNSAFE_FOR_SPEED { + unsafe { *self.buf.get_unchecked(self.pos_within_buf) } + } else { + self.buf[self.pos_within_buf] + }; + self.pos_within_buf += 1; + Ok(r) + } + + /// Read at most `max` bytes, append to `Vec`. + /// + /// Returns 0 when EOF or limit reached. + fn read_to_vec(&mut self, vec: &mut Vec<u8>, max: usize) -> ProtobufResult<usize> { + let len = { + let rem = self.fill_buf()?; + + let len = cmp::min(rem.len(), max); + vec.extend_from_slice(&rem[..len]); + len + }; + self.pos_within_buf += len; + Ok(len) + } + + #[cfg(feature = "bytes")] + pub(crate) fn read_exact_bytes(&mut self, len: usize) -> ProtobufResult<Bytes> { + if let InputSource::Bytes(bytes) = self.input_source { + let end = match self.pos_within_buf.checked_add(len) { + Some(end) => end, + None => return Err(ProtobufError::WireError(WireError::UnexpectedEof)), + }; + + if end > self.limit_within_buf { + return Err(ProtobufError::WireError(WireError::UnexpectedEof)); + } + + let r = bytes.slice(self.pos_within_buf..end); + self.pos_within_buf += len; + Ok(r) + } else { + if len >= READ_RAW_BYTES_MAX_ALLOC { + // We cannot trust `len` because protobuf message could be malformed. + // Reading should not result in OOM when allocating a buffer. + let mut v = Vec::new(); + self.read_exact_to_vec(len, &mut v)?; + Ok(Bytes::from(v)) + } else { + let mut r = BytesMut::with_capacity(len); + unsafe { + let buf = Self::uninit_slice_as_mut_slice(&mut r.chunk_mut()[..len]); + self.read_exact(buf)?; + r.advance_mut(len); + } + Ok(r.freeze()) + } + } + } + + #[cfg(feature = "bytes")] + unsafe fn uninit_slice_as_mut_slice(slice: &mut UninitSlice) -> &mut [MaybeUninit<u8>] { + use std::slice; + slice::from_raw_parts_mut(slice.as_mut_ptr() as *mut MaybeUninit<u8>, slice.len()) + } + + /// Returns 0 when EOF or limit reached. + pub(crate) fn read(&mut self, buf: &mut [u8]) -> ProtobufResult<usize> { + self.fill_buf()?; + + let rem = &self.buf[self.pos_within_buf..self.limit_within_buf]; + + let len = cmp::min(rem.len(), buf.len()); + buf[..len].copy_from_slice(&rem[..len]); + self.pos_within_buf += len; + Ok(len) + } + + fn read_exact_slow(&mut self, buf: &mut [MaybeUninit<u8>]) -> ProtobufResult<()> { + if self.bytes_until_limit() < buf.len() as u64 { + return Err(ProtobufError::WireError(WireError::UnexpectedEof)); + } + + let consume = self.pos_within_buf; + self.pos_of_buf_start += self.pos_within_buf as u64; + self.pos_within_buf = 0; + self.buf = &[]; + self.limit_within_buf = 0; + + match self.input_source { + InputSource::Read(ref mut buf_read) => { + buf_read.consume(consume); + buf_read.read_exact_uninit(buf)?; + } + _ => { + return Err(ProtobufError::WireError(WireError::UnexpectedEof)); + } + } + + self.pos_of_buf_start += buf.len() as u64; + + self.assertions(); + + Ok(()) + } + + #[inline] + pub(crate) fn read_exact(&mut self, buf: &mut [MaybeUninit<u8>]) -> ProtobufResult<()> { + if self.remaining_in_buf_len() >= buf.len() { + let buf_len = buf.len(); + maybe_uninit_write_slice( + buf, + &self.buf[self.pos_within_buf..self.pos_within_buf + buf_len], + ); + self.pos_within_buf += buf_len; + return Ok(()); + } + + self.read_exact_slow(buf) + } + + /// Read exact number of bytes into `Vec`. + /// + /// `Vec` is cleared in the beginning. + pub fn read_exact_to_vec(&mut self, count: usize, target: &mut Vec<u8>) -> ProtobufResult<()> { + // TODO: also do some limits when reading from unlimited source + if count as u64 > self.bytes_until_limit() { + return Err(ProtobufError::WireError(WireError::TruncatedMessage)); + } + + target.clear(); + + if count >= READ_RAW_BYTES_MAX_ALLOC && count > target.capacity() { + // avoid calling `reserve` on buf with very large buffer: could be a malformed message + + target.reserve(READ_RAW_BYTES_MAX_ALLOC); + + while target.len() < count { + let need_to_read = count - target.len(); + if need_to_read <= target.len() { + target.reserve_exact(need_to_read); + } else { + target.reserve(1); + } + + let max = cmp::min(target.capacity() - target.len(), need_to_read); + let read = self.read_to_vec(target, max)?; + if read == 0 { + return Err(ProtobufError::WireError(WireError::TruncatedMessage)); + } + } + } else { + target.reserve_exact(count); + + unsafe { + self.read_exact(&mut vec_spare_capacity_mut(target)[..count])?; + target.set_len(count); + } + } + + debug_assert_eq!(count, target.len()); + + Ok(()) + } + + fn do_fill_buf(&mut self) -> ProtobufResult<()> { + debug_assert!(self.pos_within_buf == self.limit_within_buf); + + // Limit is reached, do not fill buf, because otherwise + // synchronous read from `CodedInputStream` may block. + if self.limit == self.pos() { + return Ok(()); + } + + let consume = self.buf.len(); + self.pos_of_buf_start += self.buf.len() as u64; + self.buf = &[]; + self.pos_within_buf = 0; + self.limit_within_buf = 0; + + match self.input_source { + InputSource::Read(ref mut buf_read) => { + buf_read.consume(consume); + self.buf = unsafe { mem::transmute(buf_read.fill_buf()?) }; + } + _ => { + return Ok(()); + } + } + + self.update_limit_within_buf(); + + Ok(()) + } + + #[inline(always)] + pub(crate) fn fill_buf(&mut self) -> ProtobufResult<&[u8]> { + if self.pos_within_buf == self.limit_within_buf { + self.do_fill_buf()?; + } + + Ok(if USE_UNSAFE_FOR_SPEED { + unsafe { + self.buf + .get_unchecked(self.pos_within_buf..self.limit_within_buf) + } + } else { + &self.buf[self.pos_within_buf..self.limit_within_buf] + }) + } + + #[inline(always)] + pub(crate) fn consume(&mut self, amt: usize) { + assert!(amt <= self.limit_within_buf - self.pos_within_buf); + self.pos_within_buf += amt; + } +} + +#[cfg(all(test, feature = "bytes"))] +mod test_bytes { + use std::io::Write; + + use super::*; + + fn make_long_string(len: usize) -> Vec<u8> { + let mut s = Vec::new(); + while s.len() < len { + let len = s.len(); + write!(&mut s, "{}", len).expect("unexpected"); + } + s.truncate(len); + s + } + + #[test] + fn read_exact_bytes_from_slice() { + let bytes = make_long_string(100); + let mut bri = BufReadIter::from_byte_slice(&bytes[..]); + assert_eq!(&bytes[..90], &bri.read_exact_bytes(90).unwrap()[..]); + assert_eq!(bytes[90], bri.read_byte().expect("read_byte")); + } + + #[test] + fn read_exact_bytes_from_bytes() { + let bytes = Bytes::from(make_long_string(100)); + let mut bri = BufReadIter::from_bytes(&bytes); + let read = bri.read_exact_bytes(90).unwrap(); + assert_eq!(&bytes[..90], &read[..]); + assert_eq!(&bytes[..90].as_ptr(), &read.as_ptr()); + assert_eq!(bytes[90], bri.read_byte().expect("read_byte")); + } +} + +#[cfg(test)] +mod test { + use std::io; + use std::io::BufRead; + use std::io::Read; + + use super::*; + + #[test] + fn eof_at_limit() { + struct Read5ThenPanic { + pos: usize, + } + + impl Read for Read5ThenPanic { + fn read(&mut self, _buf: &mut [u8]) -> io::Result<usize> { + unreachable!(); + } + } + + impl BufRead for Read5ThenPanic { + fn fill_buf(&mut self) -> io::Result<&[u8]> { + assert_eq!(0, self.pos); + static ZERO_TO_FIVE: &'static [u8] = &[0, 1, 2, 3, 4]; + Ok(ZERO_TO_FIVE) + } + + fn consume(&mut self, amt: usize) { + if amt == 0 { + // drop of BufReadIter + return; + } + + assert_eq!(0, self.pos); + assert_eq!(5, amt); + self.pos += amt; + } + } + + let mut read = Read5ThenPanic { pos: 0 }; + let mut buf_read_iter = BufReadIter::from_buf_read(&mut read); + assert_eq!(0, buf_read_iter.pos()); + let _prev_limit = buf_read_iter.push_limit(5); + buf_read_iter.read_byte().expect("read_byte"); + buf_read_iter + .read_exact(&mut [ + MaybeUninit::uninit(), + MaybeUninit::uninit(), + MaybeUninit::uninit(), + MaybeUninit::uninit(), + ]) + .expect("read_exact"); + assert!(buf_read_iter.eof().expect("eof")); + } +} diff --git a/2.27.1/src/buf_read_or_reader.rs b/2.27.1/src/buf_read_or_reader.rs new file mode 100644 index 0000000..6a47c76 --- /dev/null +++ b/2.27.1/src/buf_read_or_reader.rs @@ -0,0 +1,85 @@ +//! `BufRead` pointer or `BufReader` owned. + +use std::cmp; +use std::io; +use std::io::BufRead; +use std::io::BufReader; +use std::io::Read; +use std::mem::MaybeUninit; + +use crate::misc::maybe_uninit_write_slice; + +/// Helper type to simplify `BufReadIter` implementation. +pub(crate) enum BufReadOrReader<'a> { + BufReader(BufReader<&'a mut dyn Read>), + BufRead(&'a mut dyn BufRead), +} + +impl<'a> Read for BufReadOrReader<'a> { + fn read(&mut self, buf: &mut [u8]) -> Result<usize, io::Error> { + match self { + BufReadOrReader::BufReader(r) => r.read(buf), + BufReadOrReader::BufRead(r) => r.read(buf), + } + } + + fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, io::Error> { + match self { + BufReadOrReader::BufReader(r) => r.read_to_end(buf), + BufReadOrReader::BufRead(r) => r.read_to_end(buf), + } + } + + fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), io::Error> { + match self { + BufReadOrReader::BufReader(r) => r.read_exact(buf), + BufReadOrReader::BufRead(r) => r.read_exact(buf), + } + } +} + +impl<'a> BufReadOrReader<'a> { + /// Similar to `read_exact` but reads into `MaybeUninit`. + pub(crate) fn read_exact_uninit( + &mut self, + buf: &mut [MaybeUninit<u8>], + ) -> Result<(), io::Error> { + let mut pos = 0; + while pos != buf.len() { + let fill_buf = match self { + BufReadOrReader::BufReader(r) => r.fill_buf()?, + BufReadOrReader::BufRead(r) => r.fill_buf()?, + }; + if fill_buf.is_empty() { + return Err(io::Error::new( + io::ErrorKind::UnexpectedEof, + "Unexpected end of file", + )); + } + let consume = cmp::min(fill_buf.len(), buf.len() - pos); + maybe_uninit_write_slice(&mut buf[pos..pos + consume], &fill_buf[..consume]); + match self { + BufReadOrReader::BufReader(r) => r.consume(consume), + BufReadOrReader::BufRead(r) => r.consume(consume), + } + pos += consume; + } + Ok(()) + } +} + +impl<'a> BufRead for BufReadOrReader<'a> { + fn fill_buf(&mut self) -> Result<&[u8], io::Error> { + match self { + BufReadOrReader::BufReader(r) => r.fill_buf(), + BufReadOrReader::BufRead(r) => r.fill_buf(), + } + } + + fn consume(&mut self, amt: usize) { + match self { + BufReadOrReader::BufReader(r) => r.consume(amt), + BufReadOrReader::BufRead(r) => r.consume(amt), + } + } +} diff --git a/2.27.1/src/cached_size.rs b/2.27.1/src/cached_size.rs new file mode 100644 index 0000000..350ddac --- /dev/null +++ b/2.27.1/src/cached_size.rs @@ -0,0 +1,38 @@ +use std::sync::atomic::AtomicUsize; +use std::sync::atomic::Ordering; + +/// Cached size field used in generated code. +/// It is always equal to itself to simplify generated code. +/// (Generated code can use `#[derive(Eq)]`). +#[derive(Debug, Default)] +pub struct CachedSize { + size: AtomicUsize, +} + +impl CachedSize { + /// Get cached size + pub fn get(&self) -> u32 { + self.size.load(Ordering::Relaxed) as u32 + } + + /// Set cached size + pub fn set(&self, size: u32) { + self.size.store(size as usize, Ordering::Relaxed) + } +} + +impl Clone for CachedSize { + fn clone(&self) -> CachedSize { + CachedSize { + size: AtomicUsize::new(self.size.load(Ordering::Relaxed)), + } + } +} + +impl PartialEq<CachedSize> for CachedSize { + fn eq(&self, _other: &CachedSize) -> bool { + true + } +} + +impl Eq for CachedSize {} diff --git a/2.27.1/src/chars.rs b/2.27.1/src/chars.rs new file mode 100644 index 0000000..49c02d7 --- /dev/null +++ b/2.27.1/src/chars.rs @@ -0,0 +1,107 @@ +#![cfg(feature = "bytes")] + +use std::fmt; +use std::ops::Deref; +use std::str; + +use bytes::Bytes; + +use crate::clear::Clear; + +/// Thin wrapper around `Bytes` which guarantees that bytes are valid UTF-8 string. +/// Should be API-compatible to `String`. +#[derive(Clone, PartialEq, Eq, Hash, PartialOrd, Ord)] +pub struct Chars(Bytes); + +impl Chars { + /// New empty object. + pub fn new() -> Chars { + Chars(Bytes::new()) + } + + /// Try convert from `Bytes` + pub fn from_bytes(bytes: Bytes) -> Result<Chars, str::Utf8Error> { + str::from_utf8(&bytes)?; + + Ok(Chars(bytes)) + } + + /// Len in bytes. + pub fn len(&self) -> usize { + self.0.len() + } + + /// Self-explanatory + pub fn is_empty(&self) -> bool { + self.0.is_empty() + } +} + +impl<'a> From<&'a str> for Chars { + fn from(src: &'a str) -> Chars { + Chars(Bytes::copy_from_slice(src.as_bytes())) + } +} + +impl From<String> for Chars { + fn from(src: String) -> Chars { + Chars(Bytes::from(src)) + } +} + +impl Into<String> for Chars { + fn into(self) -> String { + // This is safe because `Chars` is guaranteed to store a valid UTF-8 string + unsafe { String::from_utf8_unchecked(self.0.as_ref().to_owned()) } + } +} + +impl Default for Chars { + fn default() -> Self { + Chars::new() + } +} + +impl Deref for Chars { + type Target = str; + + fn deref(&self) -> &str { + // This is safe because `Chars` is guaranteed to store a valid UTF-8 string + unsafe { str::from_utf8_unchecked(&self.0) } + } +} + +impl Clear for Chars { + fn clear(&mut self) { + self.0.clear(); + } +} + +impl fmt::Display for Chars { + #[inline] + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + fmt::Display::fmt(&**self, f) + } +} + +impl fmt::Debug for Chars { + #[inline] + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + fmt::Debug::fmt(&**self, f) + } +} + +#[cfg(test)] +mod test { + use super::Chars; + + #[test] + fn test_display_and_debug() { + let s = "test"; + let string: String = s.into(); + let chars: Chars = s.into(); + + assert_eq!(format!("{}", string), format!("{}", chars)); + assert_eq!(format!("{:?}", string), format!("{:?}", chars)); + } +} diff --git a/2.27.1/src/clear.rs b/2.27.1/src/clear.rs new file mode 100644 index 0000000..712c492 --- /dev/null +++ b/2.27.1/src/clear.rs @@ -0,0 +1,33 @@ +#[cfg(feature = "bytes")] +use bytes::Bytes; + +/// anything that can be cleared +pub trait Clear { + /// Clear this make, make it equivalent to newly created object. + fn clear(&mut self); +} + +impl<T> Clear for Option<T> { + fn clear(&mut self) { + self.take(); + } +} + +impl Clear for String { + fn clear(&mut self) { + String::clear(self); + } +} + +impl<T> Clear for Vec<T> { + fn clear(&mut self) { + Vec::clear(self); + } +} + +#[cfg(feature = "bytes")] +impl Clear for Bytes { + fn clear(&mut self) { + Bytes::clear(self); + } +} diff --git a/2.27.1/src/coded_input_stream.rs b/2.27.1/src/coded_input_stream.rs new file mode 100644 index 0000000..a49563c --- /dev/null +++ b/2.27.1/src/coded_input_stream.rs @@ -0,0 +1,976 @@ +#![doc(hidden)] + +//! `CodedInputStream` and `CodedOutputStream` implementations + +use std::io; +use std::io::BufRead; +use std::io::Read; +use std::mem; +use std::mem::MaybeUninit; +use std::slice; + +#[cfg(feature = "bytes")] +use bytes::Bytes; + +use crate::buf_read_iter::BufReadIter; +#[cfg(feature = "bytes")] +use crate::chars::Chars; +use crate::enums::ProtobufEnum; +use crate::error::ProtobufError; +use crate::error::ProtobufResult; +use crate::error::WireError; +use crate::message::Message; +use crate::misc::maybe_ununit_array_assume_init; +use crate::unknown::UnknownValue; +use crate::wire_format; +use crate::zigzag::decode_zig_zag_32; +use crate::zigzag::decode_zig_zag_64; + +/// Default recursion level limit. 100 is the default value of C++'s implementation. +const DEFAULT_RECURSION_LIMIT: u32 = 100; + +/// Max allocated vec when reading length-delimited from unknown input stream +pub(crate) const READ_RAW_BYTES_MAX_ALLOC: usize = 10_000_000; + +/// Buffered read with handy utilities. +pub struct CodedInputStream<'a> { + source: BufReadIter<'a>, + recursion_level: u32, + recursion_limit: u32, +} + +impl<'a> CodedInputStream<'a> { + /// Wrap a `Read`. + /// + /// Note resulting `CodedInputStream` is buffered even if `Read` is not. + pub fn new(read: &'a mut dyn Read) -> CodedInputStream<'a> { + CodedInputStream::from_buf_read_iter(BufReadIter::from_read(read)) + } + + /// Create from `BufRead`. + /// + /// `CodedInputStream` will utilize `BufRead` buffer. + pub fn from_buffered_reader(buf_read: &'a mut dyn BufRead) -> CodedInputStream<'a> { + CodedInputStream::from_buf_read_iter(BufReadIter::from_buf_read(buf_read)) + } + + /// Read from byte slice + pub fn from_bytes(bytes: &'a [u8]) -> CodedInputStream<'a> { + CodedInputStream::from_buf_read_iter(BufReadIter::from_byte_slice(bytes)) + } + + /// Read from `Bytes`. + /// + /// `CodedInputStream` operations like + /// [`read_carllerche_bytes`](crate::CodedInputStream::read_carllerche_bytes) + /// will return a shared copy of this bytes object. + #[cfg(feature = "bytes")] + pub fn from_carllerche_bytes(bytes: &'a Bytes) -> CodedInputStream<'a> { + CodedInputStream::from_buf_read_iter(BufReadIter::from_bytes(bytes)) + } + + fn from_buf_read_iter(source: BufReadIter<'a>) -> CodedInputStream<'a> { + CodedInputStream { + source: source, + recursion_level: 0, + recursion_limit: DEFAULT_RECURSION_LIMIT, + } + } + + /// Set the recursion limit. + pub fn set_recursion_limit(&mut self, limit: u32) { + self.recursion_limit = limit; + } + + #[inline] + pub(crate) fn incr_recursion(&mut self) -> ProtobufResult<()> { + if self.recursion_level >= self.recursion_limit { + return Err(ProtobufError::WireError(WireError::OverRecursionLimit)); + } + self.recursion_level += 1; + Ok(()) + } + + #[inline] + pub(crate) fn decr_recursion(&mut self) { + self.recursion_level -= 1; + } + + /// How many bytes processed + pub fn pos(&self) -> u64 { + self.source.pos() + } + + /// How many bytes until current limit + pub fn bytes_until_limit(&self) -> u64 { + self.source.bytes_until_limit() + } + + /// Read bytes into given `buf`. + #[inline] + fn read_exact_uninit(&mut self, buf: &mut [MaybeUninit<u8>]) -> ProtobufResult<()> { + self.source.read_exact(buf) + } + + /// Read bytes into given `buf`. + /// + /// Return `0` on EOF. + // TODO: overload with `Read::read` + pub fn read(&mut self, buf: &mut [u8]) -> ProtobufResult<()> { + // SAFETY: same layout + let buf = unsafe { + slice::from_raw_parts_mut(buf.as_mut_ptr() as *mut MaybeUninit<u8>, buf.len()) + }; + self.read_exact_uninit(buf) + } + + /// Read exact number of bytes as `Bytes` object. + /// + /// This operation returns a shared view if `CodedInputStream` is + /// constructed with `Bytes` parameter. + #[cfg(feature = "bytes")] + fn read_raw_callerche_bytes(&mut self, count: usize) -> ProtobufResult<Bytes> { + self.source.read_exact_bytes(count) + } + + /// Read one byte + #[inline(always)] + pub fn read_raw_byte(&mut self) -> ProtobufResult<u8> { + self.source.read_byte() + } + + /// Push new limit, return previous limit. + pub fn push_limit(&mut self, limit: u64) -> ProtobufResult<u64> { + self.source.push_limit(limit) + } + + /// Restore previous limit. + pub fn pop_limit(&mut self, old_limit: u64) { + self.source.pop_limit(old_limit); + } + + /// Are we at EOF? + #[inline(always)] + pub fn eof(&mut self) -> ProtobufResult<bool> { + self.source.eof() + } + + /// Check we are at EOF. + /// + /// Return error if we are not at EOF. + pub fn check_eof(&mut self) -> ProtobufResult<()> { + let eof = self.eof()?; + if !eof { + return Err(ProtobufError::WireError(WireError::UnexpectedEof)); + } + Ok(()) + } + + fn read_raw_varint64_slow(&mut self) -> ProtobufResult<u64> { + let mut r: u64 = 0; + let mut i = 0; + loop { + if i == 10 { + return Err(ProtobufError::WireError(WireError::IncorrectVarint)); + } + let b = self.read_raw_byte()?; + // TODO: may overflow if i == 9 + r = r | (((b & 0x7f) as u64) << (i * 7)); + i += 1; + if b < 0x80 { + return Ok(r); + } + } + } + + /// Read varint + #[inline(always)] + pub fn read_raw_varint64(&mut self) -> ProtobufResult<u64> { + 'slow: loop { + let ret; + let consume; + + loop { + let rem = self.source.remaining_in_buf(); + + if rem.len() >= 1 { + // most varints are in practice fit in 1 byte + if rem[0] < 0x80 { + ret = rem[0] as u64; + consume = 1; + } else { + // handle case of two bytes too + if rem.len() >= 2 && rem[1] < 0x80 { + ret = (rem[0] & 0x7f) as u64 | (rem[1] as u64) << 7; + consume = 2; + } else if rem.len() >= 10 { + // Read from array when buf at at least 10 bytes, + // max len for varint. + let mut r: u64 = 0; + let mut i: usize = 0; + { + let rem = rem; + loop { + if i == 10 { + return Err(ProtobufError::WireError( + WireError::IncorrectVarint, + )); + } + + let b = if true { + // skip range check + unsafe { *rem.get_unchecked(i) } + } else { + rem[i] + }; + + // TODO: may overflow if i == 9 + r = r | (((b & 0x7f) as u64) << (i * 7)); + i += 1; + if b < 0x80 { + break; + } + } + } + consume = i; + ret = r; + } else { + break 'slow; + } + } + } else { + break 'slow; + } + break; + } + + self.source.consume(consume); + return Ok(ret); + } + + self.read_raw_varint64_slow() + } + + /// Read varint + #[inline(always)] + pub fn read_raw_varint32(&mut self) -> ProtobufResult<u32> { + self.read_raw_varint64().map(|v| v as u32) + } + + /// Read little-endian 32-bit integer + pub fn read_raw_little_endian32(&mut self) -> ProtobufResult<u32> { + let mut bytes = [MaybeUninit::uninit(); 4]; + self.read_exact_uninit(&mut bytes)?; + // SAFETY: `read_exact` guarantees that the buffer is filled. + let bytes = unsafe { maybe_ununit_array_assume_init(bytes) }; + Ok(u32::from_le_bytes(bytes)) + } + + /// Read little-endian 64-bit integer + pub fn read_raw_little_endian64(&mut self) -> ProtobufResult<u64> { + let mut bytes = [MaybeUninit::uninit(); 8]; + self.read_exact_uninit(&mut bytes)?; + // SAFETY: `read_exact` guarantees that the buffer is filled. + let bytes = unsafe { maybe_ununit_array_assume_init(bytes) }; + Ok(u64::from_le_bytes(bytes)) + } + + /// Read tag + #[inline] + pub fn read_tag(&mut self) -> ProtobufResult<wire_format::Tag> { + let v = self.read_raw_varint32()?; + match wire_format::Tag::new(v) { + Some(tag) => Ok(tag), + None => Err(ProtobufError::WireError(WireError::IncorrectTag(v))), + } + } + + /// Read tag, return it is pair (field number, wire type) + #[inline] + pub fn read_tag_unpack(&mut self) -> ProtobufResult<(u32, wire_format::WireType)> { + self.read_tag().map(|t| t.unpack()) + } + + /// Read `double` + pub fn read_double(&mut self) -> ProtobufResult<f64> { + let bits = self.read_raw_little_endian64()?; + unsafe { Ok(mem::transmute::<u64, f64>(bits)) } + } + + /// Read `float` + pub fn read_float(&mut self) -> ProtobufResult<f32> { + let bits = self.read_raw_little_endian32()?; + unsafe { Ok(mem::transmute::<u32, f32>(bits)) } + } + + /// Read `int64` + pub fn read_int64(&mut self) -> ProtobufResult<i64> { + self.read_raw_varint64().map(|v| v as i64) + } + + /// Read `int32` + pub fn read_int32(&mut self) -> ProtobufResult<i32> { + self.read_raw_varint32().map(|v| v as i32) + } + + /// Read `uint64` + pub fn read_uint64(&mut self) -> ProtobufResult<u64> { + self.read_raw_varint64() + } + + /// Read `uint32` + pub fn read_uint32(&mut self) -> ProtobufResult<u32> { + self.read_raw_varint32() + } + + /// Read `sint64` + pub fn read_sint64(&mut self) -> ProtobufResult<i64> { + self.read_uint64().map(decode_zig_zag_64) + } + + /// Read `sint32` + pub fn read_sint32(&mut self) -> ProtobufResult<i32> { + self.read_uint32().map(decode_zig_zag_32) + } + + /// Read `fixed64` + pub fn read_fixed64(&mut self) -> ProtobufResult<u64> { + self.read_raw_little_endian64() + } + + /// Read `fixed32` + pub fn read_fixed32(&mut self) -> ProtobufResult<u32> { + self.read_raw_little_endian32() + } + + /// Read `sfixed64` + pub fn read_sfixed64(&mut self) -> ProtobufResult<i64> { + self.read_raw_little_endian64().map(|v| v as i64) + } + + /// Read `sfixed32` + pub fn read_sfixed32(&mut self) -> ProtobufResult<i32> { + self.read_raw_little_endian32().map(|v| v as i32) + } + + /// Read `bool` + pub fn read_bool(&mut self) -> ProtobufResult<bool> { + self.read_raw_varint32().map(|v| v != 0) + } + + /// Read `enum` as `ProtobufEnum` + pub fn read_enum<E: ProtobufEnum>(&mut self) -> ProtobufResult<E> { + let i = self.read_int32()?; + match ProtobufEnum::from_i32(i) { + Some(e) => Ok(e), + None => Err(ProtobufError::WireError(WireError::InvalidEnumValue(i))), + } + } + + /// Read `repeated` packed `double` + pub fn read_repeated_packed_double_into( + &mut self, + target: &mut Vec<f64>, + ) -> ProtobufResult<()> { + let len = self.read_raw_varint64()?; + + target.reserve((len / 4) as usize); + + let old_limit = self.push_limit(len)?; + while !self.eof()? { + target.push(self.read_double()?); + } + self.pop_limit(old_limit); + Ok(()) + } + + /// Read `repeated` packed `float` + pub fn read_repeated_packed_float_into(&mut self, target: &mut Vec<f32>) -> ProtobufResult<()> { + let len = self.read_raw_varint64()?; + + target.reserve((len / 4) as usize); + + let old_limit = self.push_limit(len)?; + while !self.eof()? { + target.push(self.read_float()?); + } + self.pop_limit(old_limit); + Ok(()) + } + + /// Read `repeated` packed `int64` + pub fn read_repeated_packed_int64_into(&mut self, target: &mut Vec<i64>) -> ProtobufResult<()> { + let len = self.read_raw_varint64()?; + let old_limit = self.push_limit(len as u64)?; + while !self.eof()? { + target.push(self.read_int64()?); + } + self.pop_limit(old_limit); + Ok(()) + } + + /// Read repeated packed `int32` + pub fn read_repeated_packed_int32_into(&mut self, target: &mut Vec<i32>) -> ProtobufResult<()> { + let len = self.read_raw_varint64()?; + let old_limit = self.push_limit(len)?; + while !self.eof()? { + target.push(self.read_int32()?); + } + self.pop_limit(old_limit); + Ok(()) + } + + /// Read repeated packed `uint64` + pub fn read_repeated_packed_uint64_into( + &mut self, + target: &mut Vec<u64>, + ) -> ProtobufResult<()> { + let len = self.read_raw_varint64()?; + let old_limit = self.push_limit(len)?; + while !self.eof()? { + target.push(self.read_uint64()?); + } + self.pop_limit(old_limit); + Ok(()) + } + + /// Read repeated packed `uint32` + pub fn read_repeated_packed_uint32_into( + &mut self, + target: &mut Vec<u32>, + ) -> ProtobufResult<()> { + let len = self.read_raw_varint64()?; + let old_limit = self.push_limit(len)?; + while !self.eof()? { + target.push(self.read_uint32()?); + } + self.pop_limit(old_limit); + Ok(()) + } + + /// Read repeated packed `sint64` + pub fn read_repeated_packed_sint64_into( + &mut self, + target: &mut Vec<i64>, + ) -> ProtobufResult<()> { + let len = self.read_raw_varint64()?; + let old_limit = self.push_limit(len)?; + while !self.eof()? { + target.push(self.read_sint64()?); + } + self.pop_limit(old_limit); + Ok(()) + } + + /// Read repeated packed `sint32` + pub fn read_repeated_packed_sint32_into( + &mut self, + target: &mut Vec<i32>, + ) -> ProtobufResult<()> { + let len = self.read_raw_varint64()?; + let old_limit = self.push_limit(len)?; + while !self.eof()? { + target.push(self.read_sint32()?); + } + self.pop_limit(old_limit); + Ok(()) + } + + /// Read repeated packed `fixed64` + pub fn read_repeated_packed_fixed64_into( + &mut self, + target: &mut Vec<u64>, + ) -> ProtobufResult<()> { + let len = self.read_raw_varint64()?; + + target.reserve((len / 8) as usize); + + let old_limit = self.push_limit(len)?; + while !self.eof()? { + target.push(self.read_fixed64()?); + } + self.pop_limit(old_limit); + Ok(()) + } + + /// Read repeated packed `fixed32` + pub fn read_repeated_packed_fixed32_into( + &mut self, + target: &mut Vec<u32>, + ) -> ProtobufResult<()> { + let len = self.read_raw_varint64()?; + + target.reserve((len / 4) as usize); + + let old_limit = self.push_limit(len)?; + while !self.eof()? { + target.push(self.read_fixed32()?); + } + self.pop_limit(old_limit); + Ok(()) + } + + /// Read repeated packed `sfixed64` + pub fn read_repeated_packed_sfixed64_into( + &mut self, + target: &mut Vec<i64>, + ) -> ProtobufResult<()> { + let len = self.read_raw_varint64()?; + + target.reserve((len / 8) as usize); + + let old_limit = self.push_limit(len)?; + while !self.eof()? { + target.push(self.read_sfixed64()?); + } + self.pop_limit(old_limit); + Ok(()) + } + + /// Read repeated packed `sfixed32` + pub fn read_repeated_packed_sfixed32_into( + &mut self, + target: &mut Vec<i32>, + ) -> ProtobufResult<()> { + let len = self.read_raw_varint64()?; + + target.reserve((len / 4) as usize); + + let old_limit = self.push_limit(len)?; + while !self.eof()? { + target.push(self.read_sfixed32()?); + } + self.pop_limit(old_limit); + Ok(()) + } + + /// Read repeated packed `bool` + pub fn read_repeated_packed_bool_into(&mut self, target: &mut Vec<bool>) -> ProtobufResult<()> { + let len = self.read_raw_varint64()?; + + // regular bool value is 1-byte size + target.reserve(len as usize); + + let old_limit = self.push_limit(len)?; + while !self.eof()? { + target.push(self.read_bool()?); + } + self.pop_limit(old_limit); + Ok(()) + } + + /// Read repeated packed `enum` into `ProtobufEnum` + pub fn read_repeated_packed_enum_into<E: ProtobufEnum>( + &mut self, + target: &mut Vec<E>, + ) -> ProtobufResult<()> { + let len = self.read_raw_varint64()?; + let old_limit = self.push_limit(len)?; + while !self.eof()? { + target.push(self.read_enum()?); + } + self.pop_limit(old_limit); + Ok(()) + } + + /// Read `UnknownValue` + pub fn read_unknown( + &mut self, + wire_type: wire_format::WireType, + ) -> ProtobufResult<UnknownValue> { + match wire_type { + wire_format::WireTypeVarint => { + self.read_raw_varint64().map(|v| UnknownValue::Varint(v)) + } + wire_format::WireTypeFixed64 => self.read_fixed64().map(|v| UnknownValue::Fixed64(v)), + wire_format::WireTypeFixed32 => self.read_fixed32().map(|v| UnknownValue::Fixed32(v)), + wire_format::WireTypeLengthDelimited => { + let len = self.read_raw_varint32()?; + self.read_raw_bytes(len) + .map(|v| UnknownValue::LengthDelimited(v)) + } + _ => Err(ProtobufError::WireError(WireError::UnexpectedWireType( + wire_type, + ))), + } + } + + /// Skip field + pub fn skip_field(&mut self, wire_type: wire_format::WireType) -> ProtobufResult<()> { + self.read_unknown(wire_type).map(|_| ()) + } + + /// Read raw bytes into the supplied vector. The vector will be resized as needed and + /// overwritten. + pub fn read_raw_bytes_into(&mut self, count: u32, target: &mut Vec<u8>) -> ProtobufResult<()> { + self.source.read_exact_to_vec(count as usize, target) + } + + /// Read exact number of bytes + pub fn read_raw_bytes(&mut self, count: u32) -> ProtobufResult<Vec<u8>> { + let mut r = Vec::new(); + self.read_raw_bytes_into(count, &mut r)?; + Ok(r) + } + + /// Skip exact number of bytes + pub fn skip_raw_bytes(&mut self, count: u32) -> ProtobufResult<()> { + // TODO: make it more efficient + self.read_raw_bytes(count).map(|_| ()) + } + + /// Read `bytes` field, length delimited + pub fn read_bytes(&mut self) -> ProtobufResult<Vec<u8>> { + let mut r = Vec::new(); + self.read_bytes_into(&mut r)?; + Ok(r) + } + + /// Read `bytes` field, length delimited + #[cfg(feature = "bytes")] + pub fn read_carllerche_bytes(&mut self) -> ProtobufResult<Bytes> { + let len = self.read_raw_varint32()?; + self.read_raw_callerche_bytes(len as usize) + } + + /// Read `string` field, length delimited + #[cfg(feature = "bytes")] + pub fn read_carllerche_chars(&mut self) -> ProtobufResult<Chars> { + let bytes = self.read_carllerche_bytes()?; + Ok(Chars::from_bytes(bytes)?) + } + + /// Read `bytes` field, length delimited + pub fn read_bytes_into(&mut self, target: &mut Vec<u8>) -> ProtobufResult<()> { + let len = self.read_raw_varint32()?; + self.read_raw_bytes_into(len, target)?; + Ok(()) + } + + /// Read `string` field, length delimited + pub fn read_string(&mut self) -> ProtobufResult<String> { + let mut r = String::new(); + self.read_string_into(&mut r)?; + Ok(r) + } + + /// Read `string` field, length delimited + pub fn read_string_into(&mut self, target: &mut String) -> ProtobufResult<()> { + target.clear(); + // take target's buffer + let mut vec = mem::replace(target, String::new()).into_bytes(); + self.read_bytes_into(&mut vec)?; + + let s = match String::from_utf8(vec) { + Ok(t) => t, + Err(_) => return Err(ProtobufError::WireError(WireError::Utf8Error)), + }; + *target = s; + Ok(()) + } + + /// Read message, do not check if message is initialized + pub fn merge_message<M: Message>(&mut self, message: &mut M) -> ProtobufResult<()> { + let len = self.read_raw_varint64()?; + let old_limit = self.push_limit(len)?; + message.merge_from(self)?; + self.pop_limit(old_limit); + Ok(()) + } + + /// Read message + pub fn read_message<M: Message>(&mut self) -> ProtobufResult<M> { + let mut r: M = Message::new(); + self.merge_message(&mut r)?; + r.check_initialized()?; + Ok(r) + } +} + +impl<'a> Read for CodedInputStream<'a> { + fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> { + self.source.read(buf).map_err(Into::into) + } +} + +impl<'a> BufRead for CodedInputStream<'a> { + fn fill_buf(&mut self) -> io::Result<&[u8]> { + self.source.fill_buf().map_err(Into::into) + } + + fn consume(&mut self, amt: usize) { + self.source.consume(amt) + } +} + +/// Helper internal utility, should not be used directly +#[doc(hidden)] +pub trait WithCodedInputStream { + fn with_coded_input_stream<T, F>(self, cb: F) -> ProtobufResult<T> + where + F: FnOnce(&mut CodedInputStream) -> ProtobufResult<T>; +} + +impl<'a> WithCodedInputStream for &'a mut (dyn Read + 'a) { + fn with_coded_input_stream<T, F>(self, cb: F) -> ProtobufResult<T> + where + F: FnOnce(&mut CodedInputStream) -> ProtobufResult<T>, + { + let mut is = CodedInputStream::new(self); + let r = cb(&mut is)?; + is.check_eof()?; + Ok(r) + } +} + +impl<'a> WithCodedInputStream for &'a mut (dyn BufRead + 'a) { + fn with_coded_input_stream<T, F>(self, cb: F) -> ProtobufResult<T> + where + F: FnOnce(&mut CodedInputStream) -> ProtobufResult<T>, + { + let mut is = CodedInputStream::from_buffered_reader(self); + let r = cb(&mut is)?; + is.check_eof()?; + Ok(r) + } +} + +impl<'a> WithCodedInputStream for &'a [u8] { + fn with_coded_input_stream<T, F>(self, cb: F) -> ProtobufResult<T> + where + F: FnOnce(&mut CodedInputStream) -> ProtobufResult<T>, + { + let mut is = CodedInputStream::from_bytes(self); + let r = cb(&mut is)?; + is.check_eof()?; + Ok(r) + } +} + +#[cfg(feature = "bytes")] +impl<'a> WithCodedInputStream for &'a Bytes { + fn with_coded_input_stream<T, F>(self, cb: F) -> ProtobufResult<T> + where + F: FnOnce(&mut CodedInputStream) -> ProtobufResult<T>, + { + let mut is = CodedInputStream::from_carllerche_bytes(self); + let r = cb(&mut is)?; + is.check_eof()?; + Ok(r) + } +} + +#[cfg(test)] +mod test { + + use std::fmt::Debug; + use std::io; + use std::io::BufRead; + use std::io::Read; + + use super::CodedInputStream; + use super::READ_RAW_BYTES_MAX_ALLOC; + use crate::error::ProtobufError; + use crate::error::ProtobufResult; + use crate::hex::decode_hex; + + fn test_read_partial<F>(hex: &str, mut callback: F) + where + F: FnMut(&mut CodedInputStream), + { + let d = decode_hex(hex); + let mut reader = io::Cursor::new(d); + let mut is = CodedInputStream::from_buffered_reader(&mut reader as &mut dyn BufRead); + assert_eq!(0, is.pos()); + callback(&mut is); + } + + fn test_read<F>(hex: &str, mut callback: F) + where + F: FnMut(&mut CodedInputStream), + { + let len = decode_hex(hex).len(); + test_read_partial(hex, |reader| { + callback(reader); + assert!(reader.eof().expect("eof")); + assert_eq!(len as u64, reader.pos()); + }); + } + + fn test_read_v<F, V>(hex: &str, v: V, mut callback: F) + where + F: FnMut(&mut CodedInputStream) -> ProtobufResult<V>, + V: PartialEq + Debug, + { + test_read(hex, |reader| { + assert_eq!(v, callback(reader).unwrap()); + }); + } + + #[test] + fn test_input_stream_read_raw_byte() { + test_read("17", |is| { + assert_eq!(23, is.read_raw_byte().unwrap()); + }); + } + + #[test] + fn test_input_stream_read_raw_varint() { + test_read_v("07", 7, |reader| reader.read_raw_varint32()); + test_read_v("07", 7, |reader| reader.read_raw_varint64()); + + test_read_v("96 01", 150, |reader| reader.read_raw_varint32()); + test_read_v("96 01", 150, |reader| reader.read_raw_varint64()); + + test_read_v( + "ff ff ff ff ff ff ff ff ff 01", + 0xffffffffffffffff, + |reader| reader.read_raw_varint64(), + ); + + test_read_v("ff ff ff ff 0f", 0xffffffff, |reader| { + reader.read_raw_varint32() + }); + test_read_v("ff ff ff ff 0f", 0xffffffff, |reader| { + reader.read_raw_varint64() + }); + } + + #[test] + fn test_input_stream_read_raw_vaint_malformed() { + // varint cannot have length > 10 + test_read_partial("ff ff ff ff ff ff ff ff ff ff 01", |reader| { + let result = reader.read_raw_varint64(); + match result { + // TODO: make an enum variant + Err(ProtobufError::WireError(..)) => (), + _ => panic!(), + } + }); + test_read_partial("ff ff ff ff ff ff ff ff ff ff 01", |reader| { + let result = reader.read_raw_varint32(); + match result { + // TODO: make an enum variant + Err(ProtobufError::WireError(..)) => (), + _ => panic!(), + } + }); + } + + #[test] + fn test_input_stream_read_raw_varint_unexpected_eof() { + test_read_partial("96 97", |reader| { + let result = reader.read_raw_varint32(); + match result { + Err(ProtobufError::WireError(..)) => (), + _ => panic!(), + } + }); + } + + #[test] + fn test_input_stream_read_raw_varint_pos() { + test_read_partial("95 01 98", |reader| { + assert_eq!(149, reader.read_raw_varint32().unwrap()); + assert_eq!(2, reader.pos()); + }); + } + + #[test] + fn test_input_stream_read_int32() { + test_read_v("02", 2, |reader| reader.read_int32()); + } + + #[test] + fn test_input_stream_read_float() { + test_read_v("95 73 13 61", 17e19, |is| is.read_float()); + } + + #[test] + fn test_input_stream_read_double() { + test_read_v("40 d5 ab 68 b3 07 3d 46", 23e29, |is| is.read_double()); + } + + #[test] + fn test_input_stream_skip_raw_bytes() { + test_read("", |reader| { + reader.skip_raw_bytes(0).unwrap(); + }); + test_read("aa bb", |reader| { + reader.skip_raw_bytes(2).unwrap(); + }); + test_read("aa bb cc dd ee ff", |reader| { + reader.skip_raw_bytes(6).unwrap(); + }); + } + + #[test] + fn test_input_stream_read_raw_bytes() { + test_read("", |reader| { + assert_eq!( + Vec::from(&b""[..]), + reader.read_raw_bytes(0).expect("read_raw_bytes") + ); + }) + } + + #[test] + fn test_input_stream_limits() { + test_read("aa bb cc", |is| { + let old_limit = is.push_limit(1).unwrap(); + assert_eq!(1, is.bytes_until_limit()); + let r1 = is.read_raw_bytes(1).unwrap(); + assert_eq!(&[0xaa as u8], &r1[..]); + is.pop_limit(old_limit); + let r2 = is.read_raw_bytes(2).unwrap(); + assert_eq!(&[0xbb as u8, 0xcc], &r2[..]); + }); + } + + #[test] + fn test_input_stream_io_read() { + test_read("aa bb cc", |is| { + let mut buf = [0; 3]; + assert_eq!(Read::read(is, &mut buf).expect("io::Read"), 3); + assert_eq!(buf, [0xaa, 0xbb, 0xcc]); + }); + } + + #[test] + fn test_input_stream_io_bufread() { + test_read("aa bb cc", |is| { + assert_eq!( + BufRead::fill_buf(is).expect("io::BufRead::fill_buf"), + &[0xaa, 0xbb, 0xcc] + ); + BufRead::consume(is, 3); + }); + } + + #[test] + fn test_input_stream_read_raw_bytes_into_huge() { + let mut v = Vec::new(); + for i in 0..READ_RAW_BYTES_MAX_ALLOC + 1000 { + v.push((i % 10) as u8); + } + + let mut slice: &[u8] = v.as_slice(); + + let mut is = CodedInputStream::new(&mut slice); + + let mut buf = Vec::new(); + + is.read_raw_bytes_into(READ_RAW_BYTES_MAX_ALLOC as u32 + 10, &mut buf) + .expect("read"); + + assert_eq!(READ_RAW_BYTES_MAX_ALLOC + 10, buf.len()); + + buf.clear(); + + is.read_raw_bytes_into(1000 - 10, &mut buf).expect("read"); + + assert_eq!(1000 - 10, buf.len()); + + assert!(is.eof().expect("eof")); + } +} diff --git a/2.27.1/src/coded_output_stream.rs b/2.27.1/src/coded_output_stream.rs new file mode 100644 index 0000000..2bbe0a3 --- /dev/null +++ b/2.27.1/src/coded_output_stream.rs @@ -0,0 +1,756 @@ +use std::io; +use std::io::Write; +use std::mem; +use std::mem::MaybeUninit; +use std::ptr; +use std::slice; + +use crate::misc::maybe_uninit_write; +use crate::misc::maybe_uninit_write_slice; +use crate::misc::vec_spare_capacity_mut; +use crate::varint; +use crate::wire_format; +use crate::zigzag::encode_zig_zag_32; +use crate::zigzag::encode_zig_zag_64; +use crate::Message; +use crate::ProtobufEnum; +use crate::ProtobufError; +use crate::ProtobufResult; +use crate::UnknownFields; +use crate::UnknownValueRef; + +/// Equal to the default buffer size of `BufWriter`, so when +/// `CodedOutputStream` wraps `BufWriter`, it often skips double buffering. +const OUTPUT_STREAM_BUFFER_SIZE: usize = 8 * 1024; + +#[doc(hidden)] +pub trait WithCodedOutputStream { + fn with_coded_output_stream<T, F>(self, cb: F) -> ProtobufResult<T> + where + F: FnOnce(&mut CodedOutputStream) -> ProtobufResult<T>; +} + +impl<'a> WithCodedOutputStream for &'a mut (dyn Write + 'a) { + fn with_coded_output_stream<T, F>(self, cb: F) -> ProtobufResult<T> + where + F: FnOnce(&mut CodedOutputStream) -> ProtobufResult<T>, + { + let mut os = CodedOutputStream::new(self); + let r = cb(&mut os)?; + os.flush()?; + Ok(r) + } +} + +impl<'a> WithCodedOutputStream for &'a mut Vec<u8> { + fn with_coded_output_stream<T, F>(mut self, cb: F) -> ProtobufResult<T> + where + F: FnOnce(&mut CodedOutputStream) -> ProtobufResult<T>, + { + let mut os = CodedOutputStream::vec(&mut self); + let r = cb(&mut os)?; + os.flush()?; + Ok(r) + } +} + +#[doc(hidden)] +pub fn with_coded_output_stream_to_bytes<F>(cb: F) -> ProtobufResult<Vec<u8>> +where + F: FnOnce(&mut CodedOutputStream) -> ProtobufResult<()>, +{ + let mut v = Vec::new(); + v.with_coded_output_stream(cb)?; + Ok(v) +} + +/// Output buffer/writer for `CodedOutputStream`. +enum OutputTarget<'a> { + Write(&'a mut dyn Write, Vec<u8>), + Vec(&'a mut Vec<u8>), + /// The buffer is passed as `&[u8]` to `CodedOutputStream` constructor + /// and immediately converted to `buffer` field of `CodedOutputStream`, + /// it is not needed to be stored here. + /// Lifetime parameter of `CodedOutputStream` guarantees the buffer is valid + /// during the lifetime of `CodedOutputStream`. + Bytes, +} + +/// Buffered write with handy utilities +pub struct CodedOutputStream<'a> { + target: OutputTarget<'a>, + // Actual buffer is owned by `OutputTarget`, + // and here we alias the buffer so access to the buffer is branchless: + // access does not require switch by actual target type: `&[], `Vec`, `Write` etc. + // We don't access the actual buffer in `OutputTarget` except when + // we initialize `buffer` field here. + buffer: *mut [MaybeUninit<u8>], + // within buffer + position: usize, +} + +impl<'a> CodedOutputStream<'a> { + /// Construct from given `Write`. + /// + /// `CodedOutputStream` is buffered even if `Write` is not + pub fn new(writer: &'a mut dyn Write) -> CodedOutputStream<'a> { + let buffer_len = OUTPUT_STREAM_BUFFER_SIZE; + + let mut buffer_storage = Vec::with_capacity(buffer_len); + + // SAFETY: we are not using the `buffer_storage` + // except for initializing the `buffer` field. + // See `buffer` field documentation. + let buffer = vec_spare_capacity_mut(&mut buffer_storage); + let buffer: *mut [MaybeUninit<u8>] = buffer; + + CodedOutputStream { + target: OutputTarget::Write(writer, buffer_storage), + buffer, + position: 0, + } + } + + /// `CodedOutputStream` which writes directly to bytes. + /// + /// Attempt to write more than bytes capacity results in error. + pub fn bytes(bytes: &'a mut [u8]) -> CodedOutputStream<'a> { + // SAFETY: it is safe to cast from &mut [u8] to &mut [MaybeUninit<u8>]. + let buffer = + ptr::slice_from_raw_parts_mut(bytes.as_mut_ptr() as *mut MaybeUninit<u8>, bytes.len()); + CodedOutputStream { + target: OutputTarget::Bytes, + buffer, + position: 0, + } + } + + /// `CodedOutputStream` which writes directly to `Vec<u8>`. + /// + /// Caller should call `flush` at the end to guarantee vec contains + /// all written data. + pub fn vec(vec: &'a mut Vec<u8>) -> CodedOutputStream<'a> { + let buffer: *mut [MaybeUninit<u8>] = &mut []; + CodedOutputStream { + target: OutputTarget::Vec(vec), + buffer, + position: 0, + } + } + + /// Check if EOF is reached. + /// + /// # Panics + /// + /// If underlying write has no EOF + pub fn check_eof(&self) { + match self.target { + OutputTarget::Bytes => { + assert_eq!(self.buffer().len() as u64, self.position as u64); + } + OutputTarget::Write(..) | OutputTarget::Vec(..) => { + panic!("must not be called with Writer or Vec"); + } + } + } + + #[inline(always)] + fn buffer(&self) -> &[MaybeUninit<u8>] { + // SAFETY: see the `buffer` field documentation about invariants. + unsafe { &*(self.buffer as *mut [MaybeUninit<u8>]) } + } + + #[inline(always)] + fn filled_buffer_impl<'s>(buffer: *mut [MaybeUninit<u8>], position: usize) -> &'s [u8] { + // SAFETY: this function is safe assuming `buffer` and `position` + // are `self.buffer` and `safe.position`: + // * `CodedOutputStream` has invariant that `position <= buffer.len()`. + // * `buffer` is filled up to `position`. + unsafe { slice::from_raw_parts_mut(buffer as *mut u8, position) } + } + + fn refresh_buffer(&mut self) -> ProtobufResult<()> { + match self.target { + OutputTarget::Write(ref mut write, _) => { + write.write_all(Self::filled_buffer_impl(self.buffer, self.position))?; + self.position = 0; + } + OutputTarget::Vec(ref mut vec) => unsafe { + let vec_len = vec.len(); + assert!(vec_len + self.position <= vec.capacity()); + vec.set_len(vec_len + self.position); + vec.reserve(1); + self.buffer = vec_spare_capacity_mut(vec); + self.position = 0; + }, + OutputTarget::Bytes => { + return Err(ProtobufError::IoError(io::Error::new( + io::ErrorKind::Other, + "given slice is too small to serialize the message", + ))); + } + } + Ok(()) + } + + /// Flush the buffer to underlying write + pub fn flush(&mut self) -> ProtobufResult<()> { + match self.target { + OutputTarget::Bytes => Ok(()), + OutputTarget::Write(..) | OutputTarget::Vec(..) => { + // TODO: must not reserve additional in Vec + self.refresh_buffer() + } + } + } + + /// Write a byte + pub fn write_raw_byte(&mut self, byte: u8) -> ProtobufResult<()> { + if self.position as usize == self.buffer().len() { + self.refresh_buffer()?; + } + unsafe { maybe_uninit_write(&mut (&mut *self.buffer)[self.position as usize], byte) }; + self.position += 1; + Ok(()) + } + + /// Write bytes + pub fn write_raw_bytes(&mut self, bytes: &[u8]) -> ProtobufResult<()> { + if bytes.len() <= self.buffer().len() - self.position { + let bottom = self.position as usize; + let top = bottom + (bytes.len() as usize); + // SAFETY: see the `buffer` field documentation about invariants. + let buffer = unsafe { &mut (&mut *self.buffer)[bottom..top] }; + maybe_uninit_write_slice(buffer, bytes); + self.position += bytes.len(); + return Ok(()); + } + + self.refresh_buffer()?; + + assert!(self.position == 0); + + if self.position + bytes.len() < self.buffer().len() { + // SAFETY: see the `buffer` field documentation about invariants. + let buffer = + unsafe { &mut (&mut *self.buffer)[self.position..self.position + bytes.len()] }; + maybe_uninit_write_slice(buffer, bytes); + self.position += bytes.len(); + return Ok(()); + } + + match self.target { + OutputTarget::Bytes => { + unreachable!(); + } + OutputTarget::Write(ref mut write, _) => { + write.write_all(bytes)?; + } + OutputTarget::Vec(ref mut vec) => { + vec.extend(bytes); + self.buffer = vec_spare_capacity_mut(vec) + } + } + Ok(()) + } + + /// Write a tag + pub fn write_tag( + &mut self, + field_number: u32, + wire_type: wire_format::WireType, + ) -> ProtobufResult<()> { + self.write_raw_varint32(wire_format::Tag::make(field_number, wire_type).value()) + } + + /// Write varint + pub fn write_raw_varint32(&mut self, value: u32) -> ProtobufResult<()> { + if self.buffer().len() - self.position >= 5 { + // fast path + let len = unsafe { + varint::encode_varint32(value, &mut (&mut *self.buffer)[self.position..]) + }; + self.position += len; + Ok(()) + } else { + // slow path + let buf = &mut [0u8; 5]; + let len = varint::encode_varint32(value, unsafe { + slice::from_raw_parts_mut(buf.as_mut_ptr() as *mut MaybeUninit<u8>, buf.len()) + }); + self.write_raw_bytes(&buf[..len]) + } + } + + /// Write varint + pub fn write_raw_varint64(&mut self, value: u64) -> ProtobufResult<()> { + if self.buffer().len() - self.position >= 10 { + // fast path + let len = unsafe { + varint::encode_varint64(value, &mut (&mut *self.buffer)[self.position..]) + }; + self.position += len; + Ok(()) + } else { + // slow path + let buf = &mut [0u8; 10]; + let len = varint::encode_varint64(value, unsafe { + slice::from_raw_parts_mut(buf.as_mut_ptr() as *mut MaybeUninit<u8>, buf.len()) + }); + self.write_raw_bytes(&buf[..len]) + } + } + + /// Write 32-bit integer little endian + pub fn write_raw_little_endian32(&mut self, value: u32) -> ProtobufResult<()> { + let bytes = unsafe { mem::transmute::<_, [u8; 4]>(value.to_le()) }; + self.write_raw_bytes(&bytes) + } + + /// Write 64-bit integer little endian + pub fn write_raw_little_endian64(&mut self, value: u64) -> ProtobufResult<()> { + let bytes = unsafe { mem::transmute::<_, [u8; 8]>(value.to_le()) }; + self.write_raw_bytes(&bytes) + } + + /// Write `float` + pub fn write_float_no_tag(&mut self, value: f32) -> ProtobufResult<()> { + let bits = unsafe { mem::transmute::<f32, u32>(value) }; + self.write_raw_little_endian32(bits) + } + + /// Write `double` + pub fn write_double_no_tag(&mut self, value: f64) -> ProtobufResult<()> { + let bits = unsafe { mem::transmute::<f64, u64>(value) }; + self.write_raw_little_endian64(bits) + } + + /// Write `float` field + pub fn write_float(&mut self, field_number: u32, value: f32) -> ProtobufResult<()> { + self.write_tag(field_number, wire_format::WireTypeFixed32)?; + self.write_float_no_tag(value)?; + Ok(()) + } + + /// Write `double` field + pub fn write_double(&mut self, field_number: u32, value: f64) -> ProtobufResult<()> { + self.write_tag(field_number, wire_format::WireTypeFixed64)?; + self.write_double_no_tag(value)?; + Ok(()) + } + + /// Write varint + pub fn write_uint64_no_tag(&mut self, value: u64) -> ProtobufResult<()> { + self.write_raw_varint64(value) + } + + /// Write varint + pub fn write_uint32_no_tag(&mut self, value: u32) -> ProtobufResult<()> { + self.write_raw_varint32(value) + } + + /// Write varint + pub fn write_int64_no_tag(&mut self, value: i64) -> ProtobufResult<()> { + self.write_raw_varint64(value as u64) + } + + /// Write varint + pub fn write_int32_no_tag(&mut self, value: i32) -> ProtobufResult<()> { + self.write_raw_varint64(value as u64) + } + + /// Write zigzag varint + pub fn write_sint64_no_tag(&mut self, value: i64) -> ProtobufResult<()> { + self.write_uint64_no_tag(encode_zig_zag_64(value)) + } + + /// Write zigzag varint + pub fn write_sint32_no_tag(&mut self, value: i32) -> ProtobufResult<()> { + self.write_uint32_no_tag(encode_zig_zag_32(value)) + } + + /// Write `fixed64` + pub fn write_fixed64_no_tag(&mut self, value: u64) -> ProtobufResult<()> { + self.write_raw_little_endian64(value) + } + + /// Write `fixed32` + pub fn write_fixed32_no_tag(&mut self, value: u32) -> ProtobufResult<()> { + self.write_raw_little_endian32(value) + } + + /// Write `sfixed64` + pub fn write_sfixed64_no_tag(&mut self, value: i64) -> ProtobufResult<()> { + self.write_raw_little_endian64(value as u64) + } + + /// Write `sfixed32` + pub fn write_sfixed32_no_tag(&mut self, value: i32) -> ProtobufResult<()> { + self.write_raw_little_endian32(value as u32) + } + + /// Write `bool` + pub fn write_bool_no_tag(&mut self, value: bool) -> ProtobufResult<()> { + self.write_raw_varint32(if value { 1 } else { 0 }) + } + + /// Write `enum` + pub fn write_enum_no_tag(&mut self, value: i32) -> ProtobufResult<()> { + self.write_int32_no_tag(value) + } + + /// Write `enum` + pub fn write_enum_obj_no_tag<E>(&mut self, value: E) -> ProtobufResult<()> + where + E: ProtobufEnum, + { + self.write_enum_no_tag(value.value()) + } + + /// Write unknown value + pub fn write_unknown_no_tag(&mut self, unknown: UnknownValueRef) -> ProtobufResult<()> { + match unknown { + UnknownValueRef::Fixed64(fixed64) => self.write_raw_little_endian64(fixed64), + UnknownValueRef::Fixed32(fixed32) => self.write_raw_little_endian32(fixed32), + UnknownValueRef::Varint(varint) => self.write_raw_varint64(varint), + UnknownValueRef::LengthDelimited(bytes) => self.write_bytes_no_tag(bytes), + } + } + + /// Write `uint64` field + pub fn write_uint64(&mut self, field_number: u32, value: u64) -> ProtobufResult<()> { + self.write_tag(field_number, wire_format::WireTypeVarint)?; + self.write_uint64_no_tag(value)?; + Ok(()) + } + + /// Write `uint32` field + pub fn write_uint32(&mut self, field_number: u32, value: u32) -> ProtobufResult<()> { + self.write_tag(field_number, wire_format::WireTypeVarint)?; + self.write_uint32_no_tag(value)?; + Ok(()) + } + + /// Write `int64` field + pub fn write_int64(&mut self, field_number: u32, value: i64) -> ProtobufResult<()> { + self.write_tag(field_number, wire_format::WireTypeVarint)?; + self.write_int64_no_tag(value)?; + Ok(()) + } + + /// Write `int32` field + pub fn write_int32(&mut self, field_number: u32, value: i32) -> ProtobufResult<()> { + self.write_tag(field_number, wire_format::WireTypeVarint)?; + self.write_int32_no_tag(value)?; + Ok(()) + } + + /// Write `sint64` field + pub fn write_sint64(&mut self, field_number: u32, value: i64) -> ProtobufResult<()> { + self.write_tag(field_number, wire_format::WireTypeVarint)?; + self.write_sint64_no_tag(value)?; + Ok(()) + } + + /// Write `sint32` field + pub fn write_sint32(&mut self, field_number: u32, value: i32) -> ProtobufResult<()> { + self.write_tag(field_number, wire_format::WireTypeVarint)?; + self.write_sint32_no_tag(value)?; + Ok(()) + } + + /// Write `fixed64` field + pub fn write_fixed64(&mut self, field_number: u32, value: u64) -> ProtobufResult<()> { + self.write_tag(field_number, wire_format::WireTypeFixed64)?; + self.write_fixed64_no_tag(value)?; + Ok(()) + } + + /// Write `fixed32` field + pub fn write_fixed32(&mut self, field_number: u32, value: u32) -> ProtobufResult<()> { + self.write_tag(field_number, wire_format::WireTypeFixed32)?; + self.write_fixed32_no_tag(value)?; + Ok(()) + } + + /// Write `sfixed64` field + pub fn write_sfixed64(&mut self, field_number: u32, value: i64) -> ProtobufResult<()> { + self.write_tag(field_number, wire_format::WireTypeFixed64)?; + self.write_sfixed64_no_tag(value)?; + Ok(()) + } + + /// Write `sfixed32` field + pub fn write_sfixed32(&mut self, field_number: u32, value: i32) -> ProtobufResult<()> { + self.write_tag(field_number, wire_format::WireTypeFixed32)?; + self.write_sfixed32_no_tag(value)?; + Ok(()) + } + + /// Write `bool` field + pub fn write_bool(&mut self, field_number: u32, value: bool) -> ProtobufResult<()> { + self.write_tag(field_number, wire_format::WireTypeVarint)?; + self.write_bool_no_tag(value)?; + Ok(()) + } + + /// Write `enum` field + pub fn write_enum(&mut self, field_number: u32, value: i32) -> ProtobufResult<()> { + self.write_tag(field_number, wire_format::WireTypeVarint)?; + self.write_enum_no_tag(value)?; + Ok(()) + } + + /// Write `enum` field + pub fn write_enum_obj<E>(&mut self, field_number: u32, value: E) -> ProtobufResult<()> + where + E: ProtobufEnum, + { + self.write_enum(field_number, value.value()) + } + + /// Write unknown field + pub fn write_unknown( + &mut self, + field_number: u32, + value: UnknownValueRef, + ) -> ProtobufResult<()> { + self.write_tag(field_number, value.wire_type())?; + self.write_unknown_no_tag(value)?; + Ok(()) + } + + /// Write unknown fields + pub fn write_unknown_fields(&mut self, fields: &UnknownFields) -> ProtobufResult<()> { + for (number, values) in fields { + for value in values { + self.write_unknown(number, value)?; + } + } + Ok(()) + } + + /// Write bytes + pub fn write_bytes_no_tag(&mut self, bytes: &[u8]) -> ProtobufResult<()> { + self.write_raw_varint32(bytes.len() as u32)?; + self.write_raw_bytes(bytes)?; + Ok(()) + } + + /// Write string + pub fn write_string_no_tag(&mut self, s: &str) -> ProtobufResult<()> { + self.write_bytes_no_tag(s.as_bytes()) + } + + /// Write message + pub fn write_message_no_tag<M: Message>(&mut self, msg: &M) -> ProtobufResult<()> { + msg.write_length_delimited_to(self) + } + + /// Write `bytes` field + pub fn write_bytes(&mut self, field_number: u32, bytes: &[u8]) -> ProtobufResult<()> { + self.write_tag(field_number, wire_format::WireTypeLengthDelimited)?; + self.write_bytes_no_tag(bytes)?; + Ok(()) + } + + /// Write `string` field + pub fn write_string(&mut self, field_number: u32, s: &str) -> ProtobufResult<()> { + self.write_tag(field_number, wire_format::WireTypeLengthDelimited)?; + self.write_string_no_tag(s)?; + Ok(()) + } + + /// Write `message` field + pub fn write_message<M: Message>(&mut self, field_number: u32, msg: &M) -> ProtobufResult<()> { + self.write_tag(field_number, wire_format::WireTypeLengthDelimited)?; + self.write_message_no_tag(msg)?; + Ok(()) + } +} + +impl<'a> Write for CodedOutputStream<'a> { + fn write(&mut self, buf: &[u8]) -> io::Result<usize> { + self.write_raw_bytes(buf)?; + Ok(buf.len()) + } + + fn flush(&mut self) -> io::Result<()> { + CodedOutputStream::flush(self).map_err(Into::into) + } +} + +#[cfg(test)] +mod test { + use std::io::Write; + use std::iter; + + use crate::coded_output_stream::CodedOutputStream; + use crate::hex::decode_hex; + use crate::hex::encode_hex; + use crate::wire_format; + use crate::ProtobufResult; + + fn test_write<F>(expected: &str, mut gen: F) + where + F: FnMut(&mut CodedOutputStream) -> ProtobufResult<()>, + { + let expected_bytes = decode_hex(expected); + + // write to Write + { + let mut v = Vec::new(); + { + let mut os = CodedOutputStream::new(&mut v as &mut dyn Write); + gen(&mut os).unwrap(); + os.flush().unwrap(); + } + assert_eq!(encode_hex(&expected_bytes), encode_hex(&v)); + } + + // write to &[u8] + { + let mut r = Vec::with_capacity(expected_bytes.len()); + r.resize(expected_bytes.len(), 0); + { + let mut os = CodedOutputStream::bytes(&mut r); + gen(&mut os).unwrap(); + os.check_eof(); + } + assert_eq!(encode_hex(&expected_bytes), encode_hex(&r)); + } + + // write to Vec<u8> + { + let mut r = Vec::new(); + r.extend(&[11, 22, 33, 44, 55, 66, 77]); + { + let mut os = CodedOutputStream::vec(&mut r); + gen(&mut os).unwrap(); + os.flush().unwrap(); + } + + r.drain(..7); + assert_eq!(encode_hex(&expected_bytes), encode_hex(&r)); + } + } + + #[test] + fn test_output_stream_write_raw_byte() { + test_write("a1", |os| os.write_raw_byte(0xa1)); + } + + #[test] + fn test_output_stream_write_tag() { + test_write("08", |os| os.write_tag(1, wire_format::WireTypeVarint)); + } + + #[test] + fn test_output_stream_write_raw_bytes() { + test_write("00 ab", |os| os.write_raw_bytes(&[0x00, 0xab])); + + let expected = iter::repeat("01 02 03 04") + .take(2048) + .collect::<Vec<_>>() + .join(" "); + test_write(&expected, |os| { + for _ in 0..2048 { + os.write_raw_bytes(&[0x01, 0x02, 0x03, 0x04])?; + } + + Ok(()) + }); + } + + #[test] + fn test_output_stream_write_raw_varint32() { + test_write("96 01", |os| os.write_raw_varint32(150)); + test_write("ff ff ff ff 0f", |os| os.write_raw_varint32(0xffffffff)); + } + + #[test] + fn test_output_stream_write_raw_varint64() { + test_write("96 01", |os| os.write_raw_varint64(150)); + test_write("ff ff ff ff ff ff ff ff ff 01", |os| { + os.write_raw_varint64(0xffffffffffffffff) + }); + } + + #[test] + fn test_output_stream_write_int32_no_tag() { + test_write("ff ff ff ff ff ff ff ff ff 01", |os| { + os.write_int32_no_tag(-1) + }); + } + + #[test] + fn test_output_stream_write_int64_no_tag() { + test_write("ff ff ff ff ff ff ff ff ff 01", |os| { + os.write_int64_no_tag(-1) + }); + } + + #[test] + fn test_output_stream_write_raw_little_endian32() { + test_write("f1 e2 d3 c4", |os| os.write_raw_little_endian32(0xc4d3e2f1)); + } + + #[test] + fn test_output_stream_write_float_no_tag() { + test_write("95 73 13 61", |os| os.write_float_no_tag(17e19)); + } + + #[test] + fn test_output_stream_write_double_no_tag() { + test_write("40 d5 ab 68 b3 07 3d 46", |os| { + os.write_double_no_tag(23e29) + }); + } + + #[test] + fn test_output_stream_write_raw_little_endian64() { + test_write("f1 e2 d3 c4 b5 a6 07 f8", |os| { + os.write_raw_little_endian64(0xf807a6b5c4d3e2f1) + }); + } + + #[test] + fn test_output_stream_io_write() { + let expected = [0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77]; + + // write to Write + { + let mut v = Vec::new(); + { + let mut os = CodedOutputStream::new(&mut v as &mut dyn Write); + Write::write(&mut os, &expected).expect("io::Write::write"); + Write::flush(&mut os).expect("io::Write::flush"); + } + assert_eq!(expected, *v); + } + + // write to &[u8] + { + let mut v = Vec::with_capacity(expected.len()); + v.resize(expected.len(), 0); + { + let mut os = CodedOutputStream::bytes(&mut v); + Write::write(&mut os, &expected).expect("io::Write::write"); + Write::flush(&mut os).expect("io::Write::flush"); + os.check_eof(); + } + assert_eq!(expected, *v); + } + + // write to Vec<u8> + { + let mut v = Vec::new(); + { + let mut os = CodedOutputStream::vec(&mut v); + Write::write(&mut os, &expected).expect("io::Write::write"); + Write::flush(&mut os).expect("io::Write::flush"); + } + assert_eq!(expected, *v); + } + } +} diff --git a/2.27.1/src/compiler_plugin.rs b/2.27.1/src/compiler_plugin.rs new file mode 100644 index 0000000..122eeb3 --- /dev/null +++ b/2.27.1/src/compiler_plugin.rs @@ -0,0 +1,53 @@ +// TODO: move into separate crate +#![doc(hidden)] + +use std::io::stdin; +use std::io::stdout; +use std::str; + +use crate::descriptor::FileDescriptorProto; +use crate::plugin::*; +use crate::Message; + +pub struct GenRequest<'a> { + pub file_descriptors: &'a [FileDescriptorProto], + pub files_to_generate: &'a [String], + pub parameter: &'a str, +} + +pub struct GenResult { + pub name: String, + pub content: Vec<u8>, +} + +pub fn plugin_main<F>(gen: F) +where + F: Fn(&[FileDescriptorProto], &[String]) -> Vec<GenResult>, +{ + plugin_main_2(|r| gen(r.file_descriptors, r.files_to_generate)) +} + +pub fn plugin_main_2<F>(gen: F) +where + F: Fn(&GenRequest) -> Vec<GenResult>, +{ + let req = CodeGeneratorRequest::parse_from_reader(&mut stdin()).unwrap(); + let result = gen(&GenRequest { + file_descriptors: &req.get_proto_file(), + files_to_generate: &req.get_file_to_generate(), + parameter: req.get_parameter(), + }); + let mut resp = CodeGeneratorResponse::new(); + resp.set_file( + result + .iter() + .map(|file| { + let mut r = CodeGeneratorResponse_File::new(); + r.set_name(file.name.to_string()); + r.set_content(str::from_utf8(file.content.as_ref()).unwrap().to_string()); + r + }) + .collect(), + ); + resp.write_to_writer(&mut stdout()).unwrap(); +} diff --git a/2.27.1/src/descriptor.rs b/2.27.1/src/descriptor.rs new file mode 100644 index 0000000..7ca155d --- /dev/null +++ b/2.27.1/src/descriptor.rs @@ -0,0 +1,10858 @@ +// This file is generated by rust-protobuf 2.26.0. Do not edit +// @generated + +// https://github.com/rust-lang/rust-clippy/issues/702 +#![allow(unknown_lints)] +#![allow(clippy::all)] + +#![allow(unused_attributes)] +#![cfg_attr(rustfmt, rustfmt::skip)] + +#![allow(box_pointers)] +#![allow(dead_code)] +#![allow(missing_docs)] +#![allow(non_camel_case_types)] +#![allow(non_snake_case)] +#![allow(non_upper_case_globals)] +#![allow(trivial_casts)] +#![allow(unused_imports)] +#![allow(unused_results)] +//! Generated file from `google/protobuf/descriptor.proto` + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct FileDescriptorSet { + // message fields + pub file: crate::RepeatedField<FileDescriptorProto>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a FileDescriptorSet { + fn default() -> &'a FileDescriptorSet { + <FileDescriptorSet as crate::Message>::default_instance() + } +} + +impl FileDescriptorSet { + pub fn new() -> FileDescriptorSet { + ::std::default::Default::default() + } + + // repeated .google.protobuf.FileDescriptorProto file = 1; + + + pub fn get_file(&self) -> &[FileDescriptorProto] { + &self.file + } + pub fn clear_file(&mut self) { + self.file.clear(); + } + + // Param is passed by value, moved + pub fn set_file(&mut self, v: crate::RepeatedField<FileDescriptorProto>) { + self.file = v; + } + + // Mutable pointer to the field. + pub fn mut_file(&mut self) -> &mut crate::RepeatedField<FileDescriptorProto> { + &mut self.file + } + + // Take field + pub fn take_file(&mut self) -> crate::RepeatedField<FileDescriptorProto> { + ::std::mem::replace(&mut self.file, crate::RepeatedField::new()) + } +} + +impl crate::Message for FileDescriptorSet { + fn is_initialized(&self) -> bool { + for v in &self.file { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.file)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + for value in &self.file { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + for v in &self.file { + os.write_tag(1, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> FileDescriptorSet { + FileDescriptorSet::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<FileDescriptorProto>>( + "file", + |m: &FileDescriptorSet| { &m.file }, + |m: &mut FileDescriptorSet| { &mut m.file }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<FileDescriptorSet>( + "FileDescriptorSet", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static FileDescriptorSet { + static instance: crate::rt::LazyV2<FileDescriptorSet> = crate::rt::LazyV2::INIT; + instance.get(FileDescriptorSet::new) + } +} + +impl crate::Clear for FileDescriptorSet { + fn clear(&mut self) { + self.file.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for FileDescriptorSet { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for FileDescriptorSet { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct FileDescriptorProto { + // message fields + name: crate::SingularField<::std::string::String>, + package: crate::SingularField<::std::string::String>, + pub dependency: crate::RepeatedField<::std::string::String>, + pub public_dependency: ::std::vec::Vec<i32>, + pub weak_dependency: ::std::vec::Vec<i32>, + pub message_type: crate::RepeatedField<DescriptorProto>, + pub enum_type: crate::RepeatedField<EnumDescriptorProto>, + pub service: crate::RepeatedField<ServiceDescriptorProto>, + pub extension: crate::RepeatedField<FieldDescriptorProto>, + pub options: crate::SingularPtrField<FileOptions>, + pub source_code_info: crate::SingularPtrField<SourceCodeInfo>, + syntax: crate::SingularField<::std::string::String>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a FileDescriptorProto { + fn default() -> &'a FileDescriptorProto { + <FileDescriptorProto as crate::Message>::default_instance() + } +} + +impl FileDescriptorProto { + pub fn new() -> FileDescriptorProto { + ::std::default::Default::default() + } + + // optional string name = 1; + + + pub fn get_name(&self) -> &str { + match self.name.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_name(&mut self) { + self.name.clear(); + } + + pub fn has_name(&self) -> bool { + self.name.is_some() + } + + // Param is passed by value, moved + pub fn set_name(&mut self, v: ::std::string::String) { + self.name = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_name(&mut self) -> &mut ::std::string::String { + if self.name.is_none() { + self.name.set_default(); + } + self.name.as_mut().unwrap() + } + + // Take field + pub fn take_name(&mut self) -> ::std::string::String { + self.name.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional string package = 2; + + + pub fn get_package(&self) -> &str { + match self.package.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_package(&mut self) { + self.package.clear(); + } + + pub fn has_package(&self) -> bool { + self.package.is_some() + } + + // Param is passed by value, moved + pub fn set_package(&mut self, v: ::std::string::String) { + self.package = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_package(&mut self) -> &mut ::std::string::String { + if self.package.is_none() { + self.package.set_default(); + } + self.package.as_mut().unwrap() + } + + // Take field + pub fn take_package(&mut self) -> ::std::string::String { + self.package.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // repeated string dependency = 3; + + + pub fn get_dependency(&self) -> &[::std::string::String] { + &self.dependency + } + pub fn clear_dependency(&mut self) { + self.dependency.clear(); + } + + // Param is passed by value, moved + pub fn set_dependency(&mut self, v: crate::RepeatedField<::std::string::String>) { + self.dependency = v; + } + + // Mutable pointer to the field. + pub fn mut_dependency(&mut self) -> &mut crate::RepeatedField<::std::string::String> { + &mut self.dependency + } + + // Take field + pub fn take_dependency(&mut self) -> crate::RepeatedField<::std::string::String> { + ::std::mem::replace(&mut self.dependency, crate::RepeatedField::new()) + } + + // repeated int32 public_dependency = 10; + + + pub fn get_public_dependency(&self) -> &[i32] { + &self.public_dependency + } + pub fn clear_public_dependency(&mut self) { + self.public_dependency.clear(); + } + + // Param is passed by value, moved + pub fn set_public_dependency(&mut self, v: ::std::vec::Vec<i32>) { + self.public_dependency = v; + } + + // Mutable pointer to the field. + pub fn mut_public_dependency(&mut self) -> &mut ::std::vec::Vec<i32> { + &mut self.public_dependency + } + + // Take field + pub fn take_public_dependency(&mut self) -> ::std::vec::Vec<i32> { + ::std::mem::replace(&mut self.public_dependency, ::std::vec::Vec::new()) + } + + // repeated int32 weak_dependency = 11; + + + pub fn get_weak_dependency(&self) -> &[i32] { + &self.weak_dependency + } + pub fn clear_weak_dependency(&mut self) { + self.weak_dependency.clear(); + } + + // Param is passed by value, moved + pub fn set_weak_dependency(&mut self, v: ::std::vec::Vec<i32>) { + self.weak_dependency = v; + } + + // Mutable pointer to the field. + pub fn mut_weak_dependency(&mut self) -> &mut ::std::vec::Vec<i32> { + &mut self.weak_dependency + } + + // Take field + pub fn take_weak_dependency(&mut self) -> ::std::vec::Vec<i32> { + ::std::mem::replace(&mut self.weak_dependency, ::std::vec::Vec::new()) + } + + // repeated .google.protobuf.DescriptorProto message_type = 4; + + + pub fn get_message_type(&self) -> &[DescriptorProto] { + &self.message_type + } + pub fn clear_message_type(&mut self) { + self.message_type.clear(); + } + + // Param is passed by value, moved + pub fn set_message_type(&mut self, v: crate::RepeatedField<DescriptorProto>) { + self.message_type = v; + } + + // Mutable pointer to the field. + pub fn mut_message_type(&mut self) -> &mut crate::RepeatedField<DescriptorProto> { + &mut self.message_type + } + + // Take field + pub fn take_message_type(&mut self) -> crate::RepeatedField<DescriptorProto> { + ::std::mem::replace(&mut self.message_type, crate::RepeatedField::new()) + } + + // repeated .google.protobuf.EnumDescriptorProto enum_type = 5; + + + pub fn get_enum_type(&self) -> &[EnumDescriptorProto] { + &self.enum_type + } + pub fn clear_enum_type(&mut self) { + self.enum_type.clear(); + } + + // Param is passed by value, moved + pub fn set_enum_type(&mut self, v: crate::RepeatedField<EnumDescriptorProto>) { + self.enum_type = v; + } + + // Mutable pointer to the field. + pub fn mut_enum_type(&mut self) -> &mut crate::RepeatedField<EnumDescriptorProto> { + &mut self.enum_type + } + + // Take field + pub fn take_enum_type(&mut self) -> crate::RepeatedField<EnumDescriptorProto> { + ::std::mem::replace(&mut self.enum_type, crate::RepeatedField::new()) + } + + // repeated .google.protobuf.ServiceDescriptorProto service = 6; + + + pub fn get_service(&self) -> &[ServiceDescriptorProto] { + &self.service + } + pub fn clear_service(&mut self) { + self.service.clear(); + } + + // Param is passed by value, moved + pub fn set_service(&mut self, v: crate::RepeatedField<ServiceDescriptorProto>) { + self.service = v; + } + + // Mutable pointer to the field. + pub fn mut_service(&mut self) -> &mut crate::RepeatedField<ServiceDescriptorProto> { + &mut self.service + } + + // Take field + pub fn take_service(&mut self) -> crate::RepeatedField<ServiceDescriptorProto> { + ::std::mem::replace(&mut self.service, crate::RepeatedField::new()) + } + + // repeated .google.protobuf.FieldDescriptorProto extension = 7; + + + pub fn get_extension(&self) -> &[FieldDescriptorProto] { + &self.extension + } + pub fn clear_extension(&mut self) { + self.extension.clear(); + } + + // Param is passed by value, moved + pub fn set_extension(&mut self, v: crate::RepeatedField<FieldDescriptorProto>) { + self.extension = v; + } + + // Mutable pointer to the field. + pub fn mut_extension(&mut self) -> &mut crate::RepeatedField<FieldDescriptorProto> { + &mut self.extension + } + + // Take field + pub fn take_extension(&mut self) -> crate::RepeatedField<FieldDescriptorProto> { + ::std::mem::replace(&mut self.extension, crate::RepeatedField::new()) + } + + // optional .google.protobuf.FileOptions options = 8; + + + pub fn get_options(&self) -> &FileOptions { + self.options.as_ref().unwrap_or_else(|| <FileOptions as crate::Message>::default_instance()) + } + pub fn clear_options(&mut self) { + self.options.clear(); + } + + pub fn has_options(&self) -> bool { + self.options.is_some() + } + + // Param is passed by value, moved + pub fn set_options(&mut self, v: FileOptions) { + self.options = crate::SingularPtrField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_options(&mut self) -> &mut FileOptions { + if self.options.is_none() { + self.options.set_default(); + } + self.options.as_mut().unwrap() + } + + // Take field + pub fn take_options(&mut self) -> FileOptions { + self.options.take().unwrap_or_else(|| FileOptions::new()) + } + + // optional .google.protobuf.SourceCodeInfo source_code_info = 9; + + + pub fn get_source_code_info(&self) -> &SourceCodeInfo { + self.source_code_info.as_ref().unwrap_or_else(|| <SourceCodeInfo as crate::Message>::default_instance()) + } + pub fn clear_source_code_info(&mut self) { + self.source_code_info.clear(); + } + + pub fn has_source_code_info(&self) -> bool { + self.source_code_info.is_some() + } + + // Param is passed by value, moved + pub fn set_source_code_info(&mut self, v: SourceCodeInfo) { + self.source_code_info = crate::SingularPtrField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_source_code_info(&mut self) -> &mut SourceCodeInfo { + if self.source_code_info.is_none() { + self.source_code_info.set_default(); + } + self.source_code_info.as_mut().unwrap() + } + + // Take field + pub fn take_source_code_info(&mut self) -> SourceCodeInfo { + self.source_code_info.take().unwrap_or_else(|| SourceCodeInfo::new()) + } + + // optional string syntax = 12; + + + pub fn get_syntax(&self) -> &str { + match self.syntax.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_syntax(&mut self) { + self.syntax.clear(); + } + + pub fn has_syntax(&self) -> bool { + self.syntax.is_some() + } + + // Param is passed by value, moved + pub fn set_syntax(&mut self, v: ::std::string::String) { + self.syntax = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_syntax(&mut self) -> &mut ::std::string::String { + if self.syntax.is_none() { + self.syntax.set_default(); + } + self.syntax.as_mut().unwrap() + } + + // Take field + pub fn take_syntax(&mut self) -> ::std::string::String { + self.syntax.take().unwrap_or_else(|| ::std::string::String::new()) + } +} + +impl crate::Message for FileDescriptorProto { + fn is_initialized(&self) -> bool { + for v in &self.message_type { + if !v.is_initialized() { + return false; + } + }; + for v in &self.enum_type { + if !v.is_initialized() { + return false; + } + }; + for v in &self.service { + if !v.is_initialized() { + return false; + } + }; + for v in &self.extension { + if !v.is_initialized() { + return false; + } + }; + for v in &self.options { + if !v.is_initialized() { + return false; + } + }; + for v in &self.source_code_info { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.name)?; + }, + 2 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.package)?; + }, + 3 => { + crate::rt::read_repeated_string_into(wire_type, is, &mut self.dependency)?; + }, + 10 => { + crate::rt::read_repeated_int32_into(wire_type, is, &mut self.public_dependency)?; + }, + 11 => { + crate::rt::read_repeated_int32_into(wire_type, is, &mut self.weak_dependency)?; + }, + 4 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.message_type)?; + }, + 5 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.enum_type)?; + }, + 6 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.service)?; + }, + 7 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.extension)?; + }, + 8 => { + crate::rt::read_singular_message_into(wire_type, is, &mut self.options)?; + }, + 9 => { + crate::rt::read_singular_message_into(wire_type, is, &mut self.source_code_info)?; + }, + 12 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.syntax)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(ref v) = self.name.as_ref() { + my_size += crate::rt::string_size(1, &v); + } + if let Some(ref v) = self.package.as_ref() { + my_size += crate::rt::string_size(2, &v); + } + for value in &self.dependency { + my_size += crate::rt::string_size(3, &value); + }; + for value in &self.public_dependency { + my_size += crate::rt::value_size(10, *value, crate::wire_format::WireTypeVarint); + }; + for value in &self.weak_dependency { + my_size += crate::rt::value_size(11, *value, crate::wire_format::WireTypeVarint); + }; + for value in &self.message_type { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + for value in &self.enum_type { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + for value in &self.service { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + for value in &self.extension { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + if let Some(ref v) = self.options.as_ref() { + let len = v.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + } + if let Some(ref v) = self.source_code_info.as_ref() { + let len = v.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + } + if let Some(ref v) = self.syntax.as_ref() { + my_size += crate::rt::string_size(12, &v); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(ref v) = self.name.as_ref() { + os.write_string(1, &v)?; + } + if let Some(ref v) = self.package.as_ref() { + os.write_string(2, &v)?; + } + for v in &self.dependency { + os.write_string(3, &v)?; + }; + for v in &self.public_dependency { + os.write_int32(10, *v)?; + }; + for v in &self.weak_dependency { + os.write_int32(11, *v)?; + }; + for v in &self.message_type { + os.write_tag(4, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + for v in &self.enum_type { + os.write_tag(5, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + for v in &self.service { + os.write_tag(6, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + for v in &self.extension { + os.write_tag(7, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + if let Some(ref v) = self.options.as_ref() { + os.write_tag(8, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + } + if let Some(ref v) = self.source_code_info.as_ref() { + os.write_tag(9, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + } + if let Some(ref v) = self.syntax.as_ref() { + os.write_string(12, &v)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> FileDescriptorProto { + FileDescriptorProto::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "name", + |m: &FileDescriptorProto| { &m.name }, + |m: &mut FileDescriptorProto| { &mut m.name }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "package", + |m: &FileDescriptorProto| { &m.package }, + |m: &mut FileDescriptorProto| { &mut m.package }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeString>( + "dependency", + |m: &FileDescriptorProto| { &m.dependency }, + |m: &mut FileDescriptorProto| { &mut m.dependency }, + )); + fields.push(crate::reflect::accessor::make_vec_accessor::<_, crate::types::ProtobufTypeInt32>( + "public_dependency", + |m: &FileDescriptorProto| { &m.public_dependency }, + |m: &mut FileDescriptorProto| { &mut m.public_dependency }, + )); + fields.push(crate::reflect::accessor::make_vec_accessor::<_, crate::types::ProtobufTypeInt32>( + "weak_dependency", + |m: &FileDescriptorProto| { &m.weak_dependency }, + |m: &mut FileDescriptorProto| { &mut m.weak_dependency }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<DescriptorProto>>( + "message_type", + |m: &FileDescriptorProto| { &m.message_type }, + |m: &mut FileDescriptorProto| { &mut m.message_type }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<EnumDescriptorProto>>( + "enum_type", + |m: &FileDescriptorProto| { &m.enum_type }, + |m: &mut FileDescriptorProto| { &mut m.enum_type }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<ServiceDescriptorProto>>( + "service", + |m: &FileDescriptorProto| { &m.service }, + |m: &mut FileDescriptorProto| { &mut m.service }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<FieldDescriptorProto>>( + "extension", + |m: &FileDescriptorProto| { &m.extension }, + |m: &mut FileDescriptorProto| { &mut m.extension }, + )); + fields.push(crate::reflect::accessor::make_singular_ptr_field_accessor::<_, crate::types::ProtobufTypeMessage<FileOptions>>( + "options", + |m: &FileDescriptorProto| { &m.options }, + |m: &mut FileDescriptorProto| { &mut m.options }, + )); + fields.push(crate::reflect::accessor::make_singular_ptr_field_accessor::<_, crate::types::ProtobufTypeMessage<SourceCodeInfo>>( + "source_code_info", + |m: &FileDescriptorProto| { &m.source_code_info }, + |m: &mut FileDescriptorProto| { &mut m.source_code_info }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "syntax", + |m: &FileDescriptorProto| { &m.syntax }, + |m: &mut FileDescriptorProto| { &mut m.syntax }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<FileDescriptorProto>( + "FileDescriptorProto", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static FileDescriptorProto { + static instance: crate::rt::LazyV2<FileDescriptorProto> = crate::rt::LazyV2::INIT; + instance.get(FileDescriptorProto::new) + } +} + +impl crate::Clear for FileDescriptorProto { + fn clear(&mut self) { + self.name.clear(); + self.package.clear(); + self.dependency.clear(); + self.public_dependency.clear(); + self.weak_dependency.clear(); + self.message_type.clear(); + self.enum_type.clear(); + self.service.clear(); + self.extension.clear(); + self.options.clear(); + self.source_code_info.clear(); + self.syntax.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for FileDescriptorProto { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for FileDescriptorProto { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct DescriptorProto { + // message fields + name: crate::SingularField<::std::string::String>, + pub field: crate::RepeatedField<FieldDescriptorProto>, + pub extension: crate::RepeatedField<FieldDescriptorProto>, + pub nested_type: crate::RepeatedField<DescriptorProto>, + pub enum_type: crate::RepeatedField<EnumDescriptorProto>, + pub extension_range: crate::RepeatedField<DescriptorProto_ExtensionRange>, + pub oneof_decl: crate::RepeatedField<OneofDescriptorProto>, + pub options: crate::SingularPtrField<MessageOptions>, + pub reserved_range: crate::RepeatedField<DescriptorProto_ReservedRange>, + pub reserved_name: crate::RepeatedField<::std::string::String>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a DescriptorProto { + fn default() -> &'a DescriptorProto { + <DescriptorProto as crate::Message>::default_instance() + } +} + +impl DescriptorProto { + pub fn new() -> DescriptorProto { + ::std::default::Default::default() + } + + // optional string name = 1; + + + pub fn get_name(&self) -> &str { + match self.name.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_name(&mut self) { + self.name.clear(); + } + + pub fn has_name(&self) -> bool { + self.name.is_some() + } + + // Param is passed by value, moved + pub fn set_name(&mut self, v: ::std::string::String) { + self.name = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_name(&mut self) -> &mut ::std::string::String { + if self.name.is_none() { + self.name.set_default(); + } + self.name.as_mut().unwrap() + } + + // Take field + pub fn take_name(&mut self) -> ::std::string::String { + self.name.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // repeated .google.protobuf.FieldDescriptorProto field = 2; + + + pub fn get_field(&self) -> &[FieldDescriptorProto] { + &self.field + } + pub fn clear_field(&mut self) { + self.field.clear(); + } + + // Param is passed by value, moved + pub fn set_field(&mut self, v: crate::RepeatedField<FieldDescriptorProto>) { + self.field = v; + } + + // Mutable pointer to the field. + pub fn mut_field(&mut self) -> &mut crate::RepeatedField<FieldDescriptorProto> { + &mut self.field + } + + // Take field + pub fn take_field(&mut self) -> crate::RepeatedField<FieldDescriptorProto> { + ::std::mem::replace(&mut self.field, crate::RepeatedField::new()) + } + + // repeated .google.protobuf.FieldDescriptorProto extension = 6; + + + pub fn get_extension(&self) -> &[FieldDescriptorProto] { + &self.extension + } + pub fn clear_extension(&mut self) { + self.extension.clear(); + } + + // Param is passed by value, moved + pub fn set_extension(&mut self, v: crate::RepeatedField<FieldDescriptorProto>) { + self.extension = v; + } + + // Mutable pointer to the field. + pub fn mut_extension(&mut self) -> &mut crate::RepeatedField<FieldDescriptorProto> { + &mut self.extension + } + + // Take field + pub fn take_extension(&mut self) -> crate::RepeatedField<FieldDescriptorProto> { + ::std::mem::replace(&mut self.extension, crate::RepeatedField::new()) + } + + // repeated .google.protobuf.DescriptorProto nested_type = 3; + + + pub fn get_nested_type(&self) -> &[DescriptorProto] { + &self.nested_type + } + pub fn clear_nested_type(&mut self) { + self.nested_type.clear(); + } + + // Param is passed by value, moved + pub fn set_nested_type(&mut self, v: crate::RepeatedField<DescriptorProto>) { + self.nested_type = v; + } + + // Mutable pointer to the field. + pub fn mut_nested_type(&mut self) -> &mut crate::RepeatedField<DescriptorProto> { + &mut self.nested_type + } + + // Take field + pub fn take_nested_type(&mut self) -> crate::RepeatedField<DescriptorProto> { + ::std::mem::replace(&mut self.nested_type, crate::RepeatedField::new()) + } + + // repeated .google.protobuf.EnumDescriptorProto enum_type = 4; + + + pub fn get_enum_type(&self) -> &[EnumDescriptorProto] { + &self.enum_type + } + pub fn clear_enum_type(&mut self) { + self.enum_type.clear(); + } + + // Param is passed by value, moved + pub fn set_enum_type(&mut self, v: crate::RepeatedField<EnumDescriptorProto>) { + self.enum_type = v; + } + + // Mutable pointer to the field. + pub fn mut_enum_type(&mut self) -> &mut crate::RepeatedField<EnumDescriptorProto> { + &mut self.enum_type + } + + // Take field + pub fn take_enum_type(&mut self) -> crate::RepeatedField<EnumDescriptorProto> { + ::std::mem::replace(&mut self.enum_type, crate::RepeatedField::new()) + } + + // repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5; + + + pub fn get_extension_range(&self) -> &[DescriptorProto_ExtensionRange] { + &self.extension_range + } + pub fn clear_extension_range(&mut self) { + self.extension_range.clear(); + } + + // Param is passed by value, moved + pub fn set_extension_range(&mut self, v: crate::RepeatedField<DescriptorProto_ExtensionRange>) { + self.extension_range = v; + } + + // Mutable pointer to the field. + pub fn mut_extension_range(&mut self) -> &mut crate::RepeatedField<DescriptorProto_ExtensionRange> { + &mut self.extension_range + } + + // Take field + pub fn take_extension_range(&mut self) -> crate::RepeatedField<DescriptorProto_ExtensionRange> { + ::std::mem::replace(&mut self.extension_range, crate::RepeatedField::new()) + } + + // repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8; + + + pub fn get_oneof_decl(&self) -> &[OneofDescriptorProto] { + &self.oneof_decl + } + pub fn clear_oneof_decl(&mut self) { + self.oneof_decl.clear(); + } + + // Param is passed by value, moved + pub fn set_oneof_decl(&mut self, v: crate::RepeatedField<OneofDescriptorProto>) { + self.oneof_decl = v; + } + + // Mutable pointer to the field. + pub fn mut_oneof_decl(&mut self) -> &mut crate::RepeatedField<OneofDescriptorProto> { + &mut self.oneof_decl + } + + // Take field + pub fn take_oneof_decl(&mut self) -> crate::RepeatedField<OneofDescriptorProto> { + ::std::mem::replace(&mut self.oneof_decl, crate::RepeatedField::new()) + } + + // optional .google.protobuf.MessageOptions options = 7; + + + pub fn get_options(&self) -> &MessageOptions { + self.options.as_ref().unwrap_or_else(|| <MessageOptions as crate::Message>::default_instance()) + } + pub fn clear_options(&mut self) { + self.options.clear(); + } + + pub fn has_options(&self) -> bool { + self.options.is_some() + } + + // Param is passed by value, moved + pub fn set_options(&mut self, v: MessageOptions) { + self.options = crate::SingularPtrField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_options(&mut self) -> &mut MessageOptions { + if self.options.is_none() { + self.options.set_default(); + } + self.options.as_mut().unwrap() + } + + // Take field + pub fn take_options(&mut self) -> MessageOptions { + self.options.take().unwrap_or_else(|| MessageOptions::new()) + } + + // repeated .google.protobuf.DescriptorProto.ReservedRange reserved_range = 9; + + + pub fn get_reserved_range(&self) -> &[DescriptorProto_ReservedRange] { + &self.reserved_range + } + pub fn clear_reserved_range(&mut self) { + self.reserved_range.clear(); + } + + // Param is passed by value, moved + pub fn set_reserved_range(&mut self, v: crate::RepeatedField<DescriptorProto_ReservedRange>) { + self.reserved_range = v; + } + + // Mutable pointer to the field. + pub fn mut_reserved_range(&mut self) -> &mut crate::RepeatedField<DescriptorProto_ReservedRange> { + &mut self.reserved_range + } + + // Take field + pub fn take_reserved_range(&mut self) -> crate::RepeatedField<DescriptorProto_ReservedRange> { + ::std::mem::replace(&mut self.reserved_range, crate::RepeatedField::new()) + } + + // repeated string reserved_name = 10; + + + pub fn get_reserved_name(&self) -> &[::std::string::String] { + &self.reserved_name + } + pub fn clear_reserved_name(&mut self) { + self.reserved_name.clear(); + } + + // Param is passed by value, moved + pub fn set_reserved_name(&mut self, v: crate::RepeatedField<::std::string::String>) { + self.reserved_name = v; + } + + // Mutable pointer to the field. + pub fn mut_reserved_name(&mut self) -> &mut crate::RepeatedField<::std::string::String> { + &mut self.reserved_name + } + + // Take field + pub fn take_reserved_name(&mut self) -> crate::RepeatedField<::std::string::String> { + ::std::mem::replace(&mut self.reserved_name, crate::RepeatedField::new()) + } +} + +impl crate::Message for DescriptorProto { + fn is_initialized(&self) -> bool { + for v in &self.field { + if !v.is_initialized() { + return false; + } + }; + for v in &self.extension { + if !v.is_initialized() { + return false; + } + }; + for v in &self.nested_type { + if !v.is_initialized() { + return false; + } + }; + for v in &self.enum_type { + if !v.is_initialized() { + return false; + } + }; + for v in &self.extension_range { + if !v.is_initialized() { + return false; + } + }; + for v in &self.oneof_decl { + if !v.is_initialized() { + return false; + } + }; + for v in &self.options { + if !v.is_initialized() { + return false; + } + }; + for v in &self.reserved_range { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.name)?; + }, + 2 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.field)?; + }, + 6 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.extension)?; + }, + 3 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.nested_type)?; + }, + 4 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.enum_type)?; + }, + 5 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.extension_range)?; + }, + 8 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.oneof_decl)?; + }, + 7 => { + crate::rt::read_singular_message_into(wire_type, is, &mut self.options)?; + }, + 9 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.reserved_range)?; + }, + 10 => { + crate::rt::read_repeated_string_into(wire_type, is, &mut self.reserved_name)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(ref v) = self.name.as_ref() { + my_size += crate::rt::string_size(1, &v); + } + for value in &self.field { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + for value in &self.extension { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + for value in &self.nested_type { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + for value in &self.enum_type { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + for value in &self.extension_range { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + for value in &self.oneof_decl { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + if let Some(ref v) = self.options.as_ref() { + let len = v.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + } + for value in &self.reserved_range { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + for value in &self.reserved_name { + my_size += crate::rt::string_size(10, &value); + }; + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(ref v) = self.name.as_ref() { + os.write_string(1, &v)?; + } + for v in &self.field { + os.write_tag(2, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + for v in &self.extension { + os.write_tag(6, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + for v in &self.nested_type { + os.write_tag(3, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + for v in &self.enum_type { + os.write_tag(4, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + for v in &self.extension_range { + os.write_tag(5, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + for v in &self.oneof_decl { + os.write_tag(8, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + if let Some(ref v) = self.options.as_ref() { + os.write_tag(7, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + } + for v in &self.reserved_range { + os.write_tag(9, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + for v in &self.reserved_name { + os.write_string(10, &v)?; + }; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> DescriptorProto { + DescriptorProto::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "name", + |m: &DescriptorProto| { &m.name }, + |m: &mut DescriptorProto| { &mut m.name }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<FieldDescriptorProto>>( + "field", + |m: &DescriptorProto| { &m.field }, + |m: &mut DescriptorProto| { &mut m.field }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<FieldDescriptorProto>>( + "extension", + |m: &DescriptorProto| { &m.extension }, + |m: &mut DescriptorProto| { &mut m.extension }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<DescriptorProto>>( + "nested_type", + |m: &DescriptorProto| { &m.nested_type }, + |m: &mut DescriptorProto| { &mut m.nested_type }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<EnumDescriptorProto>>( + "enum_type", + |m: &DescriptorProto| { &m.enum_type }, + |m: &mut DescriptorProto| { &mut m.enum_type }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<DescriptorProto_ExtensionRange>>( + "extension_range", + |m: &DescriptorProto| { &m.extension_range }, + |m: &mut DescriptorProto| { &mut m.extension_range }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<OneofDescriptorProto>>( + "oneof_decl", + |m: &DescriptorProto| { &m.oneof_decl }, + |m: &mut DescriptorProto| { &mut m.oneof_decl }, + )); + fields.push(crate::reflect::accessor::make_singular_ptr_field_accessor::<_, crate::types::ProtobufTypeMessage<MessageOptions>>( + "options", + |m: &DescriptorProto| { &m.options }, + |m: &mut DescriptorProto| { &mut m.options }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<DescriptorProto_ReservedRange>>( + "reserved_range", + |m: &DescriptorProto| { &m.reserved_range }, + |m: &mut DescriptorProto| { &mut m.reserved_range }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeString>( + "reserved_name", + |m: &DescriptorProto| { &m.reserved_name }, + |m: &mut DescriptorProto| { &mut m.reserved_name }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<DescriptorProto>( + "DescriptorProto", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static DescriptorProto { + static instance: crate::rt::LazyV2<DescriptorProto> = crate::rt::LazyV2::INIT; + instance.get(DescriptorProto::new) + } +} + +impl crate::Clear for DescriptorProto { + fn clear(&mut self) { + self.name.clear(); + self.field.clear(); + self.extension.clear(); + self.nested_type.clear(); + self.enum_type.clear(); + self.extension_range.clear(); + self.oneof_decl.clear(); + self.options.clear(); + self.reserved_range.clear(); + self.reserved_name.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for DescriptorProto { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for DescriptorProto { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct DescriptorProto_ExtensionRange { + // message fields + start: ::std::option::Option<i32>, + end: ::std::option::Option<i32>, + pub options: crate::SingularPtrField<ExtensionRangeOptions>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a DescriptorProto_ExtensionRange { + fn default() -> &'a DescriptorProto_ExtensionRange { + <DescriptorProto_ExtensionRange as crate::Message>::default_instance() + } +} + +impl DescriptorProto_ExtensionRange { + pub fn new() -> DescriptorProto_ExtensionRange { + ::std::default::Default::default() + } + + // optional int32 start = 1; + + + pub fn get_start(&self) -> i32 { + self.start.unwrap_or(0) + } + pub fn clear_start(&mut self) { + self.start = ::std::option::Option::None; + } + + pub fn has_start(&self) -> bool { + self.start.is_some() + } + + // Param is passed by value, moved + pub fn set_start(&mut self, v: i32) { + self.start = ::std::option::Option::Some(v); + } + + // optional int32 end = 2; + + + pub fn get_end(&self) -> i32 { + self.end.unwrap_or(0) + } + pub fn clear_end(&mut self) { + self.end = ::std::option::Option::None; + } + + pub fn has_end(&self) -> bool { + self.end.is_some() + } + + // Param is passed by value, moved + pub fn set_end(&mut self, v: i32) { + self.end = ::std::option::Option::Some(v); + } + + // optional .google.protobuf.ExtensionRangeOptions options = 3; + + + pub fn get_options(&self) -> &ExtensionRangeOptions { + self.options.as_ref().unwrap_or_else(|| <ExtensionRangeOptions as crate::Message>::default_instance()) + } + pub fn clear_options(&mut self) { + self.options.clear(); + } + + pub fn has_options(&self) -> bool { + self.options.is_some() + } + + // Param is passed by value, moved + pub fn set_options(&mut self, v: ExtensionRangeOptions) { + self.options = crate::SingularPtrField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_options(&mut self) -> &mut ExtensionRangeOptions { + if self.options.is_none() { + self.options.set_default(); + } + self.options.as_mut().unwrap() + } + + // Take field + pub fn take_options(&mut self) -> ExtensionRangeOptions { + self.options.take().unwrap_or_else(|| ExtensionRangeOptions::new()) + } +} + +impl crate::Message for DescriptorProto_ExtensionRange { + fn is_initialized(&self) -> bool { + for v in &self.options { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int32()?; + self.start = ::std::option::Option::Some(tmp); + }, + 2 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int32()?; + self.end = ::std::option::Option::Some(tmp); + }, + 3 => { + crate::rt::read_singular_message_into(wire_type, is, &mut self.options)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(v) = self.start { + my_size += crate::rt::value_size(1, v, crate::wire_format::WireTypeVarint); + } + if let Some(v) = self.end { + my_size += crate::rt::value_size(2, v, crate::wire_format::WireTypeVarint); + } + if let Some(ref v) = self.options.as_ref() { + let len = v.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(v) = self.start { + os.write_int32(1, v)?; + } + if let Some(v) = self.end { + os.write_int32(2, v)?; + } + if let Some(ref v) = self.options.as_ref() { + os.write_tag(3, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> DescriptorProto_ExtensionRange { + DescriptorProto_ExtensionRange::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeInt32>( + "start", + |m: &DescriptorProto_ExtensionRange| { &m.start }, + |m: &mut DescriptorProto_ExtensionRange| { &mut m.start }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeInt32>( + "end", + |m: &DescriptorProto_ExtensionRange| { &m.end }, + |m: &mut DescriptorProto_ExtensionRange| { &mut m.end }, + )); + fields.push(crate::reflect::accessor::make_singular_ptr_field_accessor::<_, crate::types::ProtobufTypeMessage<ExtensionRangeOptions>>( + "options", + |m: &DescriptorProto_ExtensionRange| { &m.options }, + |m: &mut DescriptorProto_ExtensionRange| { &mut m.options }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<DescriptorProto_ExtensionRange>( + "DescriptorProto.ExtensionRange", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static DescriptorProto_ExtensionRange { + static instance: crate::rt::LazyV2<DescriptorProto_ExtensionRange> = crate::rt::LazyV2::INIT; + instance.get(DescriptorProto_ExtensionRange::new) + } +} + +impl crate::Clear for DescriptorProto_ExtensionRange { + fn clear(&mut self) { + self.start = ::std::option::Option::None; + self.end = ::std::option::Option::None; + self.options.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for DescriptorProto_ExtensionRange { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for DescriptorProto_ExtensionRange { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct DescriptorProto_ReservedRange { + // message fields + start: ::std::option::Option<i32>, + end: ::std::option::Option<i32>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a DescriptorProto_ReservedRange { + fn default() -> &'a DescriptorProto_ReservedRange { + <DescriptorProto_ReservedRange as crate::Message>::default_instance() + } +} + +impl DescriptorProto_ReservedRange { + pub fn new() -> DescriptorProto_ReservedRange { + ::std::default::Default::default() + } + + // optional int32 start = 1; + + + pub fn get_start(&self) -> i32 { + self.start.unwrap_or(0) + } + pub fn clear_start(&mut self) { + self.start = ::std::option::Option::None; + } + + pub fn has_start(&self) -> bool { + self.start.is_some() + } + + // Param is passed by value, moved + pub fn set_start(&mut self, v: i32) { + self.start = ::std::option::Option::Some(v); + } + + // optional int32 end = 2; + + + pub fn get_end(&self) -> i32 { + self.end.unwrap_or(0) + } + pub fn clear_end(&mut self) { + self.end = ::std::option::Option::None; + } + + pub fn has_end(&self) -> bool { + self.end.is_some() + } + + // Param is passed by value, moved + pub fn set_end(&mut self, v: i32) { + self.end = ::std::option::Option::Some(v); + } +} + +impl crate::Message for DescriptorProto_ReservedRange { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int32()?; + self.start = ::std::option::Option::Some(tmp); + }, + 2 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int32()?; + self.end = ::std::option::Option::Some(tmp); + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(v) = self.start { + my_size += crate::rt::value_size(1, v, crate::wire_format::WireTypeVarint); + } + if let Some(v) = self.end { + my_size += crate::rt::value_size(2, v, crate::wire_format::WireTypeVarint); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(v) = self.start { + os.write_int32(1, v)?; + } + if let Some(v) = self.end { + os.write_int32(2, v)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> DescriptorProto_ReservedRange { + DescriptorProto_ReservedRange::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeInt32>( + "start", + |m: &DescriptorProto_ReservedRange| { &m.start }, + |m: &mut DescriptorProto_ReservedRange| { &mut m.start }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeInt32>( + "end", + |m: &DescriptorProto_ReservedRange| { &m.end }, + |m: &mut DescriptorProto_ReservedRange| { &mut m.end }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<DescriptorProto_ReservedRange>( + "DescriptorProto.ReservedRange", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static DescriptorProto_ReservedRange { + static instance: crate::rt::LazyV2<DescriptorProto_ReservedRange> = crate::rt::LazyV2::INIT; + instance.get(DescriptorProto_ReservedRange::new) + } +} + +impl crate::Clear for DescriptorProto_ReservedRange { + fn clear(&mut self) { + self.start = ::std::option::Option::None; + self.end = ::std::option::Option::None; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for DescriptorProto_ReservedRange { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for DescriptorProto_ReservedRange { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct ExtensionRangeOptions { + // message fields + pub uninterpreted_option: crate::RepeatedField<UninterpretedOption>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a ExtensionRangeOptions { + fn default() -> &'a ExtensionRangeOptions { + <ExtensionRangeOptions as crate::Message>::default_instance() + } +} + +impl ExtensionRangeOptions { + pub fn new() -> ExtensionRangeOptions { + ::std::default::Default::default() + } + + // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + + + pub fn get_uninterpreted_option(&self) -> &[UninterpretedOption] { + &self.uninterpreted_option + } + pub fn clear_uninterpreted_option(&mut self) { + self.uninterpreted_option.clear(); + } + + // Param is passed by value, moved + pub fn set_uninterpreted_option(&mut self, v: crate::RepeatedField<UninterpretedOption>) { + self.uninterpreted_option = v; + } + + // Mutable pointer to the field. + pub fn mut_uninterpreted_option(&mut self) -> &mut crate::RepeatedField<UninterpretedOption> { + &mut self.uninterpreted_option + } + + // Take field + pub fn take_uninterpreted_option(&mut self) -> crate::RepeatedField<UninterpretedOption> { + ::std::mem::replace(&mut self.uninterpreted_option, crate::RepeatedField::new()) + } +} + +impl crate::Message for ExtensionRangeOptions { + fn is_initialized(&self) -> bool { + for v in &self.uninterpreted_option { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 999 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.uninterpreted_option)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + for value in &self.uninterpreted_option { + let len = value.compute_size(); + my_size += 2 + crate::rt::compute_raw_varint32_size(len) + len; + }; + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + for v in &self.uninterpreted_option { + os.write_tag(999, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> ExtensionRangeOptions { + ExtensionRangeOptions::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<UninterpretedOption>>( + "uninterpreted_option", + |m: &ExtensionRangeOptions| { &m.uninterpreted_option }, + |m: &mut ExtensionRangeOptions| { &mut m.uninterpreted_option }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<ExtensionRangeOptions>( + "ExtensionRangeOptions", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static ExtensionRangeOptions { + static instance: crate::rt::LazyV2<ExtensionRangeOptions> = crate::rt::LazyV2::INIT; + instance.get(ExtensionRangeOptions::new) + } +} + +impl crate::Clear for ExtensionRangeOptions { + fn clear(&mut self) { + self.uninterpreted_option.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for ExtensionRangeOptions { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for ExtensionRangeOptions { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct FieldDescriptorProto { + // message fields + name: crate::SingularField<::std::string::String>, + number: ::std::option::Option<i32>, + label: ::std::option::Option<FieldDescriptorProto_Label>, + field_type: ::std::option::Option<FieldDescriptorProto_Type>, + type_name: crate::SingularField<::std::string::String>, + extendee: crate::SingularField<::std::string::String>, + default_value: crate::SingularField<::std::string::String>, + oneof_index: ::std::option::Option<i32>, + json_name: crate::SingularField<::std::string::String>, + pub options: crate::SingularPtrField<FieldOptions>, + proto3_optional: ::std::option::Option<bool>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a FieldDescriptorProto { + fn default() -> &'a FieldDescriptorProto { + <FieldDescriptorProto as crate::Message>::default_instance() + } +} + +impl FieldDescriptorProto { + pub fn new() -> FieldDescriptorProto { + ::std::default::Default::default() + } + + // optional string name = 1; + + + pub fn get_name(&self) -> &str { + match self.name.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_name(&mut self) { + self.name.clear(); + } + + pub fn has_name(&self) -> bool { + self.name.is_some() + } + + // Param is passed by value, moved + pub fn set_name(&mut self, v: ::std::string::String) { + self.name = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_name(&mut self) -> &mut ::std::string::String { + if self.name.is_none() { + self.name.set_default(); + } + self.name.as_mut().unwrap() + } + + // Take field + pub fn take_name(&mut self) -> ::std::string::String { + self.name.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional int32 number = 3; + + + pub fn get_number(&self) -> i32 { + self.number.unwrap_or(0) + } + pub fn clear_number(&mut self) { + self.number = ::std::option::Option::None; + } + + pub fn has_number(&self) -> bool { + self.number.is_some() + } + + // Param is passed by value, moved + pub fn set_number(&mut self, v: i32) { + self.number = ::std::option::Option::Some(v); + } + + // optional .google.protobuf.FieldDescriptorProto.Label label = 4; + + + pub fn get_label(&self) -> FieldDescriptorProto_Label { + self.label.unwrap_or(FieldDescriptorProto_Label::LABEL_OPTIONAL) + } + pub fn clear_label(&mut self) { + self.label = ::std::option::Option::None; + } + + pub fn has_label(&self) -> bool { + self.label.is_some() + } + + // Param is passed by value, moved + pub fn set_label(&mut self, v: FieldDescriptorProto_Label) { + self.label = ::std::option::Option::Some(v); + } + + // optional .google.protobuf.FieldDescriptorProto.Type type = 5; + + + pub fn get_field_type(&self) -> FieldDescriptorProto_Type { + self.field_type.unwrap_or(FieldDescriptorProto_Type::TYPE_DOUBLE) + } + pub fn clear_field_type(&mut self) { + self.field_type = ::std::option::Option::None; + } + + pub fn has_field_type(&self) -> bool { + self.field_type.is_some() + } + + // Param is passed by value, moved + pub fn set_field_type(&mut self, v: FieldDescriptorProto_Type) { + self.field_type = ::std::option::Option::Some(v); + } + + // optional string type_name = 6; + + + pub fn get_type_name(&self) -> &str { + match self.type_name.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_type_name(&mut self) { + self.type_name.clear(); + } + + pub fn has_type_name(&self) -> bool { + self.type_name.is_some() + } + + // Param is passed by value, moved + pub fn set_type_name(&mut self, v: ::std::string::String) { + self.type_name = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_type_name(&mut self) -> &mut ::std::string::String { + if self.type_name.is_none() { + self.type_name.set_default(); + } + self.type_name.as_mut().unwrap() + } + + // Take field + pub fn take_type_name(&mut self) -> ::std::string::String { + self.type_name.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional string extendee = 2; + + + pub fn get_extendee(&self) -> &str { + match self.extendee.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_extendee(&mut self) { + self.extendee.clear(); + } + + pub fn has_extendee(&self) -> bool { + self.extendee.is_some() + } + + // Param is passed by value, moved + pub fn set_extendee(&mut self, v: ::std::string::String) { + self.extendee = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_extendee(&mut self) -> &mut ::std::string::String { + if self.extendee.is_none() { + self.extendee.set_default(); + } + self.extendee.as_mut().unwrap() + } + + // Take field + pub fn take_extendee(&mut self) -> ::std::string::String { + self.extendee.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional string default_value = 7; + + + pub fn get_default_value(&self) -> &str { + match self.default_value.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_default_value(&mut self) { + self.default_value.clear(); + } + + pub fn has_default_value(&self) -> bool { + self.default_value.is_some() + } + + // Param is passed by value, moved + pub fn set_default_value(&mut self, v: ::std::string::String) { + self.default_value = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_default_value(&mut self) -> &mut ::std::string::String { + if self.default_value.is_none() { + self.default_value.set_default(); + } + self.default_value.as_mut().unwrap() + } + + // Take field + pub fn take_default_value(&mut self) -> ::std::string::String { + self.default_value.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional int32 oneof_index = 9; + + + pub fn get_oneof_index(&self) -> i32 { + self.oneof_index.unwrap_or(0) + } + pub fn clear_oneof_index(&mut self) { + self.oneof_index = ::std::option::Option::None; + } + + pub fn has_oneof_index(&self) -> bool { + self.oneof_index.is_some() + } + + // Param is passed by value, moved + pub fn set_oneof_index(&mut self, v: i32) { + self.oneof_index = ::std::option::Option::Some(v); + } + + // optional string json_name = 10; + + + pub fn get_json_name(&self) -> &str { + match self.json_name.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_json_name(&mut self) { + self.json_name.clear(); + } + + pub fn has_json_name(&self) -> bool { + self.json_name.is_some() + } + + // Param is passed by value, moved + pub fn set_json_name(&mut self, v: ::std::string::String) { + self.json_name = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_json_name(&mut self) -> &mut ::std::string::String { + if self.json_name.is_none() { + self.json_name.set_default(); + } + self.json_name.as_mut().unwrap() + } + + // Take field + pub fn take_json_name(&mut self) -> ::std::string::String { + self.json_name.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional .google.protobuf.FieldOptions options = 8; + + + pub fn get_options(&self) -> &FieldOptions { + self.options.as_ref().unwrap_or_else(|| <FieldOptions as crate::Message>::default_instance()) + } + pub fn clear_options(&mut self) { + self.options.clear(); + } + + pub fn has_options(&self) -> bool { + self.options.is_some() + } + + // Param is passed by value, moved + pub fn set_options(&mut self, v: FieldOptions) { + self.options = crate::SingularPtrField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_options(&mut self) -> &mut FieldOptions { + if self.options.is_none() { + self.options.set_default(); + } + self.options.as_mut().unwrap() + } + + // Take field + pub fn take_options(&mut self) -> FieldOptions { + self.options.take().unwrap_or_else(|| FieldOptions::new()) + } + + // optional bool proto3_optional = 17; + + + pub fn get_proto3_optional(&self) -> bool { + self.proto3_optional.unwrap_or(false) + } + pub fn clear_proto3_optional(&mut self) { + self.proto3_optional = ::std::option::Option::None; + } + + pub fn has_proto3_optional(&self) -> bool { + self.proto3_optional.is_some() + } + + // Param is passed by value, moved + pub fn set_proto3_optional(&mut self, v: bool) { + self.proto3_optional = ::std::option::Option::Some(v); + } +} + +impl crate::Message for FieldDescriptorProto { + fn is_initialized(&self) -> bool { + for v in &self.options { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.name)?; + }, + 3 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int32()?; + self.number = ::std::option::Option::Some(tmp); + }, + 4 => { + crate::rt::read_proto2_enum_with_unknown_fields_into(wire_type, is, &mut self.label, 4, &mut self.unknown_fields)? + }, + 5 => { + crate::rt::read_proto2_enum_with_unknown_fields_into(wire_type, is, &mut self.field_type, 5, &mut self.unknown_fields)? + }, + 6 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.type_name)?; + }, + 2 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.extendee)?; + }, + 7 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.default_value)?; + }, + 9 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int32()?; + self.oneof_index = ::std::option::Option::Some(tmp); + }, + 10 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.json_name)?; + }, + 8 => { + crate::rt::read_singular_message_into(wire_type, is, &mut self.options)?; + }, + 17 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.proto3_optional = ::std::option::Option::Some(tmp); + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(ref v) = self.name.as_ref() { + my_size += crate::rt::string_size(1, &v); + } + if let Some(v) = self.number { + my_size += crate::rt::value_size(3, v, crate::wire_format::WireTypeVarint); + } + if let Some(v) = self.label { + my_size += crate::rt::enum_size(4, v); + } + if let Some(v) = self.field_type { + my_size += crate::rt::enum_size(5, v); + } + if let Some(ref v) = self.type_name.as_ref() { + my_size += crate::rt::string_size(6, &v); + } + if let Some(ref v) = self.extendee.as_ref() { + my_size += crate::rt::string_size(2, &v); + } + if let Some(ref v) = self.default_value.as_ref() { + my_size += crate::rt::string_size(7, &v); + } + if let Some(v) = self.oneof_index { + my_size += crate::rt::value_size(9, v, crate::wire_format::WireTypeVarint); + } + if let Some(ref v) = self.json_name.as_ref() { + my_size += crate::rt::string_size(10, &v); + } + if let Some(ref v) = self.options.as_ref() { + let len = v.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + } + if let Some(v) = self.proto3_optional { + my_size += 3; + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(ref v) = self.name.as_ref() { + os.write_string(1, &v)?; + } + if let Some(v) = self.number { + os.write_int32(3, v)?; + } + if let Some(v) = self.label { + os.write_enum(4, crate::ProtobufEnum::value(&v))?; + } + if let Some(v) = self.field_type { + os.write_enum(5, crate::ProtobufEnum::value(&v))?; + } + if let Some(ref v) = self.type_name.as_ref() { + os.write_string(6, &v)?; + } + if let Some(ref v) = self.extendee.as_ref() { + os.write_string(2, &v)?; + } + if let Some(ref v) = self.default_value.as_ref() { + os.write_string(7, &v)?; + } + if let Some(v) = self.oneof_index { + os.write_int32(9, v)?; + } + if let Some(ref v) = self.json_name.as_ref() { + os.write_string(10, &v)?; + } + if let Some(ref v) = self.options.as_ref() { + os.write_tag(8, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + } + if let Some(v) = self.proto3_optional { + os.write_bool(17, v)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> FieldDescriptorProto { + FieldDescriptorProto::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "name", + |m: &FieldDescriptorProto| { &m.name }, + |m: &mut FieldDescriptorProto| { &mut m.name }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeInt32>( + "number", + |m: &FieldDescriptorProto| { &m.number }, + |m: &mut FieldDescriptorProto| { &mut m.number }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeEnum<FieldDescriptorProto_Label>>( + "label", + |m: &FieldDescriptorProto| { &m.label }, + |m: &mut FieldDescriptorProto| { &mut m.label }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeEnum<FieldDescriptorProto_Type>>( + "type", + |m: &FieldDescriptorProto| { &m.field_type }, + |m: &mut FieldDescriptorProto| { &mut m.field_type }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "type_name", + |m: &FieldDescriptorProto| { &m.type_name }, + |m: &mut FieldDescriptorProto| { &mut m.type_name }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "extendee", + |m: &FieldDescriptorProto| { &m.extendee }, + |m: &mut FieldDescriptorProto| { &mut m.extendee }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "default_value", + |m: &FieldDescriptorProto| { &m.default_value }, + |m: &mut FieldDescriptorProto| { &mut m.default_value }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeInt32>( + "oneof_index", + |m: &FieldDescriptorProto| { &m.oneof_index }, + |m: &mut FieldDescriptorProto| { &mut m.oneof_index }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "json_name", + |m: &FieldDescriptorProto| { &m.json_name }, + |m: &mut FieldDescriptorProto| { &mut m.json_name }, + )); + fields.push(crate::reflect::accessor::make_singular_ptr_field_accessor::<_, crate::types::ProtobufTypeMessage<FieldOptions>>( + "options", + |m: &FieldDescriptorProto| { &m.options }, + |m: &mut FieldDescriptorProto| { &mut m.options }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "proto3_optional", + |m: &FieldDescriptorProto| { &m.proto3_optional }, + |m: &mut FieldDescriptorProto| { &mut m.proto3_optional }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<FieldDescriptorProto>( + "FieldDescriptorProto", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static FieldDescriptorProto { + static instance: crate::rt::LazyV2<FieldDescriptorProto> = crate::rt::LazyV2::INIT; + instance.get(FieldDescriptorProto::new) + } +} + +impl crate::Clear for FieldDescriptorProto { + fn clear(&mut self) { + self.name.clear(); + self.number = ::std::option::Option::None; + self.label = ::std::option::Option::None; + self.field_type = ::std::option::Option::None; + self.type_name.clear(); + self.extendee.clear(); + self.default_value.clear(); + self.oneof_index = ::std::option::Option::None; + self.json_name.clear(); + self.options.clear(); + self.proto3_optional = ::std::option::Option::None; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for FieldDescriptorProto { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for FieldDescriptorProto { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(Clone,PartialEq,Eq,Debug,Hash)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub enum FieldDescriptorProto_Type { + TYPE_DOUBLE = 1, + TYPE_FLOAT = 2, + TYPE_INT64 = 3, + TYPE_UINT64 = 4, + TYPE_INT32 = 5, + TYPE_FIXED64 = 6, + TYPE_FIXED32 = 7, + TYPE_BOOL = 8, + TYPE_STRING = 9, + TYPE_GROUP = 10, + TYPE_MESSAGE = 11, + TYPE_BYTES = 12, + TYPE_UINT32 = 13, + TYPE_ENUM = 14, + TYPE_SFIXED32 = 15, + TYPE_SFIXED64 = 16, + TYPE_SINT32 = 17, + TYPE_SINT64 = 18, +} + +impl crate::ProtobufEnum for FieldDescriptorProto_Type { + fn value(&self) -> i32 { + *self as i32 + } + + fn from_i32(value: i32) -> ::std::option::Option<FieldDescriptorProto_Type> { + match value { + 1 => ::std::option::Option::Some(FieldDescriptorProto_Type::TYPE_DOUBLE), + 2 => ::std::option::Option::Some(FieldDescriptorProto_Type::TYPE_FLOAT), + 3 => ::std::option::Option::Some(FieldDescriptorProto_Type::TYPE_INT64), + 4 => ::std::option::Option::Some(FieldDescriptorProto_Type::TYPE_UINT64), + 5 => ::std::option::Option::Some(FieldDescriptorProto_Type::TYPE_INT32), + 6 => ::std::option::Option::Some(FieldDescriptorProto_Type::TYPE_FIXED64), + 7 => ::std::option::Option::Some(FieldDescriptorProto_Type::TYPE_FIXED32), + 8 => ::std::option::Option::Some(FieldDescriptorProto_Type::TYPE_BOOL), + 9 => ::std::option::Option::Some(FieldDescriptorProto_Type::TYPE_STRING), + 10 => ::std::option::Option::Some(FieldDescriptorProto_Type::TYPE_GROUP), + 11 => ::std::option::Option::Some(FieldDescriptorProto_Type::TYPE_MESSAGE), + 12 => ::std::option::Option::Some(FieldDescriptorProto_Type::TYPE_BYTES), + 13 => ::std::option::Option::Some(FieldDescriptorProto_Type::TYPE_UINT32), + 14 => ::std::option::Option::Some(FieldDescriptorProto_Type::TYPE_ENUM), + 15 => ::std::option::Option::Some(FieldDescriptorProto_Type::TYPE_SFIXED32), + 16 => ::std::option::Option::Some(FieldDescriptorProto_Type::TYPE_SFIXED64), + 17 => ::std::option::Option::Some(FieldDescriptorProto_Type::TYPE_SINT32), + 18 => ::std::option::Option::Some(FieldDescriptorProto_Type::TYPE_SINT64), + _ => ::std::option::Option::None + } + } + + fn values() -> &'static [Self] { + static values: &'static [FieldDescriptorProto_Type] = &[ + FieldDescriptorProto_Type::TYPE_DOUBLE, + FieldDescriptorProto_Type::TYPE_FLOAT, + FieldDescriptorProto_Type::TYPE_INT64, + FieldDescriptorProto_Type::TYPE_UINT64, + FieldDescriptorProto_Type::TYPE_INT32, + FieldDescriptorProto_Type::TYPE_FIXED64, + FieldDescriptorProto_Type::TYPE_FIXED32, + FieldDescriptorProto_Type::TYPE_BOOL, + FieldDescriptorProto_Type::TYPE_STRING, + FieldDescriptorProto_Type::TYPE_GROUP, + FieldDescriptorProto_Type::TYPE_MESSAGE, + FieldDescriptorProto_Type::TYPE_BYTES, + FieldDescriptorProto_Type::TYPE_UINT32, + FieldDescriptorProto_Type::TYPE_ENUM, + FieldDescriptorProto_Type::TYPE_SFIXED32, + FieldDescriptorProto_Type::TYPE_SFIXED64, + FieldDescriptorProto_Type::TYPE_SINT32, + FieldDescriptorProto_Type::TYPE_SINT64, + ]; + values + } + + fn enum_descriptor_static() -> &'static crate::reflect::EnumDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::EnumDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + crate::reflect::EnumDescriptor::new_pb_name::<FieldDescriptorProto_Type>("FieldDescriptorProto.Type", file_descriptor_proto()) + }) + } +} + +impl ::std::marker::Copy for FieldDescriptorProto_Type { +} + +// Note, `Default` is implemented although default value is not 0 +impl ::std::default::Default for FieldDescriptorProto_Type { + fn default() -> Self { + FieldDescriptorProto_Type::TYPE_DOUBLE + } +} + +impl crate::reflect::ProtobufValue for FieldDescriptorProto_Type { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Enum(crate::ProtobufEnum::descriptor(self)) + } +} + +#[derive(Clone,PartialEq,Eq,Debug,Hash)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub enum FieldDescriptorProto_Label { + LABEL_OPTIONAL = 1, + LABEL_REQUIRED = 2, + LABEL_REPEATED = 3, +} + +impl crate::ProtobufEnum for FieldDescriptorProto_Label { + fn value(&self) -> i32 { + *self as i32 + } + + fn from_i32(value: i32) -> ::std::option::Option<FieldDescriptorProto_Label> { + match value { + 1 => ::std::option::Option::Some(FieldDescriptorProto_Label::LABEL_OPTIONAL), + 2 => ::std::option::Option::Some(FieldDescriptorProto_Label::LABEL_REQUIRED), + 3 => ::std::option::Option::Some(FieldDescriptorProto_Label::LABEL_REPEATED), + _ => ::std::option::Option::None + } + } + + fn values() -> &'static [Self] { + static values: &'static [FieldDescriptorProto_Label] = &[ + FieldDescriptorProto_Label::LABEL_OPTIONAL, + FieldDescriptorProto_Label::LABEL_REQUIRED, + FieldDescriptorProto_Label::LABEL_REPEATED, + ]; + values + } + + fn enum_descriptor_static() -> &'static crate::reflect::EnumDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::EnumDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + crate::reflect::EnumDescriptor::new_pb_name::<FieldDescriptorProto_Label>("FieldDescriptorProto.Label", file_descriptor_proto()) + }) + } +} + +impl ::std::marker::Copy for FieldDescriptorProto_Label { +} + +// Note, `Default` is implemented although default value is not 0 +impl ::std::default::Default for FieldDescriptorProto_Label { + fn default() -> Self { + FieldDescriptorProto_Label::LABEL_OPTIONAL + } +} + +impl crate::reflect::ProtobufValue for FieldDescriptorProto_Label { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Enum(crate::ProtobufEnum::descriptor(self)) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct OneofDescriptorProto { + // message fields + name: crate::SingularField<::std::string::String>, + pub options: crate::SingularPtrField<OneofOptions>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a OneofDescriptorProto { + fn default() -> &'a OneofDescriptorProto { + <OneofDescriptorProto as crate::Message>::default_instance() + } +} + +impl OneofDescriptorProto { + pub fn new() -> OneofDescriptorProto { + ::std::default::Default::default() + } + + // optional string name = 1; + + + pub fn get_name(&self) -> &str { + match self.name.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_name(&mut self) { + self.name.clear(); + } + + pub fn has_name(&self) -> bool { + self.name.is_some() + } + + // Param is passed by value, moved + pub fn set_name(&mut self, v: ::std::string::String) { + self.name = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_name(&mut self) -> &mut ::std::string::String { + if self.name.is_none() { + self.name.set_default(); + } + self.name.as_mut().unwrap() + } + + // Take field + pub fn take_name(&mut self) -> ::std::string::String { + self.name.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional .google.protobuf.OneofOptions options = 2; + + + pub fn get_options(&self) -> &OneofOptions { + self.options.as_ref().unwrap_or_else(|| <OneofOptions as crate::Message>::default_instance()) + } + pub fn clear_options(&mut self) { + self.options.clear(); + } + + pub fn has_options(&self) -> bool { + self.options.is_some() + } + + // Param is passed by value, moved + pub fn set_options(&mut self, v: OneofOptions) { + self.options = crate::SingularPtrField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_options(&mut self) -> &mut OneofOptions { + if self.options.is_none() { + self.options.set_default(); + } + self.options.as_mut().unwrap() + } + + // Take field + pub fn take_options(&mut self) -> OneofOptions { + self.options.take().unwrap_or_else(|| OneofOptions::new()) + } +} + +impl crate::Message for OneofDescriptorProto { + fn is_initialized(&self) -> bool { + for v in &self.options { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.name)?; + }, + 2 => { + crate::rt::read_singular_message_into(wire_type, is, &mut self.options)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(ref v) = self.name.as_ref() { + my_size += crate::rt::string_size(1, &v); + } + if let Some(ref v) = self.options.as_ref() { + let len = v.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(ref v) = self.name.as_ref() { + os.write_string(1, &v)?; + } + if let Some(ref v) = self.options.as_ref() { + os.write_tag(2, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> OneofDescriptorProto { + OneofDescriptorProto::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "name", + |m: &OneofDescriptorProto| { &m.name }, + |m: &mut OneofDescriptorProto| { &mut m.name }, + )); + fields.push(crate::reflect::accessor::make_singular_ptr_field_accessor::<_, crate::types::ProtobufTypeMessage<OneofOptions>>( + "options", + |m: &OneofDescriptorProto| { &m.options }, + |m: &mut OneofDescriptorProto| { &mut m.options }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<OneofDescriptorProto>( + "OneofDescriptorProto", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static OneofDescriptorProto { + static instance: crate::rt::LazyV2<OneofDescriptorProto> = crate::rt::LazyV2::INIT; + instance.get(OneofDescriptorProto::new) + } +} + +impl crate::Clear for OneofDescriptorProto { + fn clear(&mut self) { + self.name.clear(); + self.options.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for OneofDescriptorProto { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for OneofDescriptorProto { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct EnumDescriptorProto { + // message fields + name: crate::SingularField<::std::string::String>, + pub value: crate::RepeatedField<EnumValueDescriptorProto>, + pub options: crate::SingularPtrField<EnumOptions>, + pub reserved_range: crate::RepeatedField<EnumDescriptorProto_EnumReservedRange>, + pub reserved_name: crate::RepeatedField<::std::string::String>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a EnumDescriptorProto { + fn default() -> &'a EnumDescriptorProto { + <EnumDescriptorProto as crate::Message>::default_instance() + } +} + +impl EnumDescriptorProto { + pub fn new() -> EnumDescriptorProto { + ::std::default::Default::default() + } + + // optional string name = 1; + + + pub fn get_name(&self) -> &str { + match self.name.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_name(&mut self) { + self.name.clear(); + } + + pub fn has_name(&self) -> bool { + self.name.is_some() + } + + // Param is passed by value, moved + pub fn set_name(&mut self, v: ::std::string::String) { + self.name = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_name(&mut self) -> &mut ::std::string::String { + if self.name.is_none() { + self.name.set_default(); + } + self.name.as_mut().unwrap() + } + + // Take field + pub fn take_name(&mut self) -> ::std::string::String { + self.name.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // repeated .google.protobuf.EnumValueDescriptorProto value = 2; + + + pub fn get_value(&self) -> &[EnumValueDescriptorProto] { + &self.value + } + pub fn clear_value(&mut self) { + self.value.clear(); + } + + // Param is passed by value, moved + pub fn set_value(&mut self, v: crate::RepeatedField<EnumValueDescriptorProto>) { + self.value = v; + } + + // Mutable pointer to the field. + pub fn mut_value(&mut self) -> &mut crate::RepeatedField<EnumValueDescriptorProto> { + &mut self.value + } + + // Take field + pub fn take_value(&mut self) -> crate::RepeatedField<EnumValueDescriptorProto> { + ::std::mem::replace(&mut self.value, crate::RepeatedField::new()) + } + + // optional .google.protobuf.EnumOptions options = 3; + + + pub fn get_options(&self) -> &EnumOptions { + self.options.as_ref().unwrap_or_else(|| <EnumOptions as crate::Message>::default_instance()) + } + pub fn clear_options(&mut self) { + self.options.clear(); + } + + pub fn has_options(&self) -> bool { + self.options.is_some() + } + + // Param is passed by value, moved + pub fn set_options(&mut self, v: EnumOptions) { + self.options = crate::SingularPtrField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_options(&mut self) -> &mut EnumOptions { + if self.options.is_none() { + self.options.set_default(); + } + self.options.as_mut().unwrap() + } + + // Take field + pub fn take_options(&mut self) -> EnumOptions { + self.options.take().unwrap_or_else(|| EnumOptions::new()) + } + + // repeated .google.protobuf.EnumDescriptorProto.EnumReservedRange reserved_range = 4; + + + pub fn get_reserved_range(&self) -> &[EnumDescriptorProto_EnumReservedRange] { + &self.reserved_range + } + pub fn clear_reserved_range(&mut self) { + self.reserved_range.clear(); + } + + // Param is passed by value, moved + pub fn set_reserved_range(&mut self, v: crate::RepeatedField<EnumDescriptorProto_EnumReservedRange>) { + self.reserved_range = v; + } + + // Mutable pointer to the field. + pub fn mut_reserved_range(&mut self) -> &mut crate::RepeatedField<EnumDescriptorProto_EnumReservedRange> { + &mut self.reserved_range + } + + // Take field + pub fn take_reserved_range(&mut self) -> crate::RepeatedField<EnumDescriptorProto_EnumReservedRange> { + ::std::mem::replace(&mut self.reserved_range, crate::RepeatedField::new()) + } + + // repeated string reserved_name = 5; + + + pub fn get_reserved_name(&self) -> &[::std::string::String] { + &self.reserved_name + } + pub fn clear_reserved_name(&mut self) { + self.reserved_name.clear(); + } + + // Param is passed by value, moved + pub fn set_reserved_name(&mut self, v: crate::RepeatedField<::std::string::String>) { + self.reserved_name = v; + } + + // Mutable pointer to the field. + pub fn mut_reserved_name(&mut self) -> &mut crate::RepeatedField<::std::string::String> { + &mut self.reserved_name + } + + // Take field + pub fn take_reserved_name(&mut self) -> crate::RepeatedField<::std::string::String> { + ::std::mem::replace(&mut self.reserved_name, crate::RepeatedField::new()) + } +} + +impl crate::Message for EnumDescriptorProto { + fn is_initialized(&self) -> bool { + for v in &self.value { + if !v.is_initialized() { + return false; + } + }; + for v in &self.options { + if !v.is_initialized() { + return false; + } + }; + for v in &self.reserved_range { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.name)?; + }, + 2 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.value)?; + }, + 3 => { + crate::rt::read_singular_message_into(wire_type, is, &mut self.options)?; + }, + 4 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.reserved_range)?; + }, + 5 => { + crate::rt::read_repeated_string_into(wire_type, is, &mut self.reserved_name)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(ref v) = self.name.as_ref() { + my_size += crate::rt::string_size(1, &v); + } + for value in &self.value { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + if let Some(ref v) = self.options.as_ref() { + let len = v.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + } + for value in &self.reserved_range { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + for value in &self.reserved_name { + my_size += crate::rt::string_size(5, &value); + }; + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(ref v) = self.name.as_ref() { + os.write_string(1, &v)?; + } + for v in &self.value { + os.write_tag(2, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + if let Some(ref v) = self.options.as_ref() { + os.write_tag(3, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + } + for v in &self.reserved_range { + os.write_tag(4, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + for v in &self.reserved_name { + os.write_string(5, &v)?; + }; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> EnumDescriptorProto { + EnumDescriptorProto::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "name", + |m: &EnumDescriptorProto| { &m.name }, + |m: &mut EnumDescriptorProto| { &mut m.name }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<EnumValueDescriptorProto>>( + "value", + |m: &EnumDescriptorProto| { &m.value }, + |m: &mut EnumDescriptorProto| { &mut m.value }, + )); + fields.push(crate::reflect::accessor::make_singular_ptr_field_accessor::<_, crate::types::ProtobufTypeMessage<EnumOptions>>( + "options", + |m: &EnumDescriptorProto| { &m.options }, + |m: &mut EnumDescriptorProto| { &mut m.options }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<EnumDescriptorProto_EnumReservedRange>>( + "reserved_range", + |m: &EnumDescriptorProto| { &m.reserved_range }, + |m: &mut EnumDescriptorProto| { &mut m.reserved_range }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeString>( + "reserved_name", + |m: &EnumDescriptorProto| { &m.reserved_name }, + |m: &mut EnumDescriptorProto| { &mut m.reserved_name }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<EnumDescriptorProto>( + "EnumDescriptorProto", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static EnumDescriptorProto { + static instance: crate::rt::LazyV2<EnumDescriptorProto> = crate::rt::LazyV2::INIT; + instance.get(EnumDescriptorProto::new) + } +} + +impl crate::Clear for EnumDescriptorProto { + fn clear(&mut self) { + self.name.clear(); + self.value.clear(); + self.options.clear(); + self.reserved_range.clear(); + self.reserved_name.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for EnumDescriptorProto { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for EnumDescriptorProto { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct EnumDescriptorProto_EnumReservedRange { + // message fields + start: ::std::option::Option<i32>, + end: ::std::option::Option<i32>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a EnumDescriptorProto_EnumReservedRange { + fn default() -> &'a EnumDescriptorProto_EnumReservedRange { + <EnumDescriptorProto_EnumReservedRange as crate::Message>::default_instance() + } +} + +impl EnumDescriptorProto_EnumReservedRange { + pub fn new() -> EnumDescriptorProto_EnumReservedRange { + ::std::default::Default::default() + } + + // optional int32 start = 1; + + + pub fn get_start(&self) -> i32 { + self.start.unwrap_or(0) + } + pub fn clear_start(&mut self) { + self.start = ::std::option::Option::None; + } + + pub fn has_start(&self) -> bool { + self.start.is_some() + } + + // Param is passed by value, moved + pub fn set_start(&mut self, v: i32) { + self.start = ::std::option::Option::Some(v); + } + + // optional int32 end = 2; + + + pub fn get_end(&self) -> i32 { + self.end.unwrap_or(0) + } + pub fn clear_end(&mut self) { + self.end = ::std::option::Option::None; + } + + pub fn has_end(&self) -> bool { + self.end.is_some() + } + + // Param is passed by value, moved + pub fn set_end(&mut self, v: i32) { + self.end = ::std::option::Option::Some(v); + } +} + +impl crate::Message for EnumDescriptorProto_EnumReservedRange { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int32()?; + self.start = ::std::option::Option::Some(tmp); + }, + 2 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int32()?; + self.end = ::std::option::Option::Some(tmp); + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(v) = self.start { + my_size += crate::rt::value_size(1, v, crate::wire_format::WireTypeVarint); + } + if let Some(v) = self.end { + my_size += crate::rt::value_size(2, v, crate::wire_format::WireTypeVarint); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(v) = self.start { + os.write_int32(1, v)?; + } + if let Some(v) = self.end { + os.write_int32(2, v)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> EnumDescriptorProto_EnumReservedRange { + EnumDescriptorProto_EnumReservedRange::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeInt32>( + "start", + |m: &EnumDescriptorProto_EnumReservedRange| { &m.start }, + |m: &mut EnumDescriptorProto_EnumReservedRange| { &mut m.start }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeInt32>( + "end", + |m: &EnumDescriptorProto_EnumReservedRange| { &m.end }, + |m: &mut EnumDescriptorProto_EnumReservedRange| { &mut m.end }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<EnumDescriptorProto_EnumReservedRange>( + "EnumDescriptorProto.EnumReservedRange", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static EnumDescriptorProto_EnumReservedRange { + static instance: crate::rt::LazyV2<EnumDescriptorProto_EnumReservedRange> = crate::rt::LazyV2::INIT; + instance.get(EnumDescriptorProto_EnumReservedRange::new) + } +} + +impl crate::Clear for EnumDescriptorProto_EnumReservedRange { + fn clear(&mut self) { + self.start = ::std::option::Option::None; + self.end = ::std::option::Option::None; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for EnumDescriptorProto_EnumReservedRange { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for EnumDescriptorProto_EnumReservedRange { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct EnumValueDescriptorProto { + // message fields + name: crate::SingularField<::std::string::String>, + number: ::std::option::Option<i32>, + pub options: crate::SingularPtrField<EnumValueOptions>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a EnumValueDescriptorProto { + fn default() -> &'a EnumValueDescriptorProto { + <EnumValueDescriptorProto as crate::Message>::default_instance() + } +} + +impl EnumValueDescriptorProto { + pub fn new() -> EnumValueDescriptorProto { + ::std::default::Default::default() + } + + // optional string name = 1; + + + pub fn get_name(&self) -> &str { + match self.name.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_name(&mut self) { + self.name.clear(); + } + + pub fn has_name(&self) -> bool { + self.name.is_some() + } + + // Param is passed by value, moved + pub fn set_name(&mut self, v: ::std::string::String) { + self.name = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_name(&mut self) -> &mut ::std::string::String { + if self.name.is_none() { + self.name.set_default(); + } + self.name.as_mut().unwrap() + } + + // Take field + pub fn take_name(&mut self) -> ::std::string::String { + self.name.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional int32 number = 2; + + + pub fn get_number(&self) -> i32 { + self.number.unwrap_or(0) + } + pub fn clear_number(&mut self) { + self.number = ::std::option::Option::None; + } + + pub fn has_number(&self) -> bool { + self.number.is_some() + } + + // Param is passed by value, moved + pub fn set_number(&mut self, v: i32) { + self.number = ::std::option::Option::Some(v); + } + + // optional .google.protobuf.EnumValueOptions options = 3; + + + pub fn get_options(&self) -> &EnumValueOptions { + self.options.as_ref().unwrap_or_else(|| <EnumValueOptions as crate::Message>::default_instance()) + } + pub fn clear_options(&mut self) { + self.options.clear(); + } + + pub fn has_options(&self) -> bool { + self.options.is_some() + } + + // Param is passed by value, moved + pub fn set_options(&mut self, v: EnumValueOptions) { + self.options = crate::SingularPtrField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_options(&mut self) -> &mut EnumValueOptions { + if self.options.is_none() { + self.options.set_default(); + } + self.options.as_mut().unwrap() + } + + // Take field + pub fn take_options(&mut self) -> EnumValueOptions { + self.options.take().unwrap_or_else(|| EnumValueOptions::new()) + } +} + +impl crate::Message for EnumValueDescriptorProto { + fn is_initialized(&self) -> bool { + for v in &self.options { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.name)?; + }, + 2 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int32()?; + self.number = ::std::option::Option::Some(tmp); + }, + 3 => { + crate::rt::read_singular_message_into(wire_type, is, &mut self.options)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(ref v) = self.name.as_ref() { + my_size += crate::rt::string_size(1, &v); + } + if let Some(v) = self.number { + my_size += crate::rt::value_size(2, v, crate::wire_format::WireTypeVarint); + } + if let Some(ref v) = self.options.as_ref() { + let len = v.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(ref v) = self.name.as_ref() { + os.write_string(1, &v)?; + } + if let Some(v) = self.number { + os.write_int32(2, v)?; + } + if let Some(ref v) = self.options.as_ref() { + os.write_tag(3, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> EnumValueDescriptorProto { + EnumValueDescriptorProto::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "name", + |m: &EnumValueDescriptorProto| { &m.name }, + |m: &mut EnumValueDescriptorProto| { &mut m.name }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeInt32>( + "number", + |m: &EnumValueDescriptorProto| { &m.number }, + |m: &mut EnumValueDescriptorProto| { &mut m.number }, + )); + fields.push(crate::reflect::accessor::make_singular_ptr_field_accessor::<_, crate::types::ProtobufTypeMessage<EnumValueOptions>>( + "options", + |m: &EnumValueDescriptorProto| { &m.options }, + |m: &mut EnumValueDescriptorProto| { &mut m.options }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<EnumValueDescriptorProto>( + "EnumValueDescriptorProto", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static EnumValueDescriptorProto { + static instance: crate::rt::LazyV2<EnumValueDescriptorProto> = crate::rt::LazyV2::INIT; + instance.get(EnumValueDescriptorProto::new) + } +} + +impl crate::Clear for EnumValueDescriptorProto { + fn clear(&mut self) { + self.name.clear(); + self.number = ::std::option::Option::None; + self.options.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for EnumValueDescriptorProto { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for EnumValueDescriptorProto { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct ServiceDescriptorProto { + // message fields + name: crate::SingularField<::std::string::String>, + pub method: crate::RepeatedField<MethodDescriptorProto>, + pub options: crate::SingularPtrField<ServiceOptions>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a ServiceDescriptorProto { + fn default() -> &'a ServiceDescriptorProto { + <ServiceDescriptorProto as crate::Message>::default_instance() + } +} + +impl ServiceDescriptorProto { + pub fn new() -> ServiceDescriptorProto { + ::std::default::Default::default() + } + + // optional string name = 1; + + + pub fn get_name(&self) -> &str { + match self.name.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_name(&mut self) { + self.name.clear(); + } + + pub fn has_name(&self) -> bool { + self.name.is_some() + } + + // Param is passed by value, moved + pub fn set_name(&mut self, v: ::std::string::String) { + self.name = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_name(&mut self) -> &mut ::std::string::String { + if self.name.is_none() { + self.name.set_default(); + } + self.name.as_mut().unwrap() + } + + // Take field + pub fn take_name(&mut self) -> ::std::string::String { + self.name.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // repeated .google.protobuf.MethodDescriptorProto method = 2; + + + pub fn get_method(&self) -> &[MethodDescriptorProto] { + &self.method + } + pub fn clear_method(&mut self) { + self.method.clear(); + } + + // Param is passed by value, moved + pub fn set_method(&mut self, v: crate::RepeatedField<MethodDescriptorProto>) { + self.method = v; + } + + // Mutable pointer to the field. + pub fn mut_method(&mut self) -> &mut crate::RepeatedField<MethodDescriptorProto> { + &mut self.method + } + + // Take field + pub fn take_method(&mut self) -> crate::RepeatedField<MethodDescriptorProto> { + ::std::mem::replace(&mut self.method, crate::RepeatedField::new()) + } + + // optional .google.protobuf.ServiceOptions options = 3; + + + pub fn get_options(&self) -> &ServiceOptions { + self.options.as_ref().unwrap_or_else(|| <ServiceOptions as crate::Message>::default_instance()) + } + pub fn clear_options(&mut self) { + self.options.clear(); + } + + pub fn has_options(&self) -> bool { + self.options.is_some() + } + + // Param is passed by value, moved + pub fn set_options(&mut self, v: ServiceOptions) { + self.options = crate::SingularPtrField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_options(&mut self) -> &mut ServiceOptions { + if self.options.is_none() { + self.options.set_default(); + } + self.options.as_mut().unwrap() + } + + // Take field + pub fn take_options(&mut self) -> ServiceOptions { + self.options.take().unwrap_or_else(|| ServiceOptions::new()) + } +} + +impl crate::Message for ServiceDescriptorProto { + fn is_initialized(&self) -> bool { + for v in &self.method { + if !v.is_initialized() { + return false; + } + }; + for v in &self.options { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.name)?; + }, + 2 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.method)?; + }, + 3 => { + crate::rt::read_singular_message_into(wire_type, is, &mut self.options)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(ref v) = self.name.as_ref() { + my_size += crate::rt::string_size(1, &v); + } + for value in &self.method { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + if let Some(ref v) = self.options.as_ref() { + let len = v.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(ref v) = self.name.as_ref() { + os.write_string(1, &v)?; + } + for v in &self.method { + os.write_tag(2, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + if let Some(ref v) = self.options.as_ref() { + os.write_tag(3, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> ServiceDescriptorProto { + ServiceDescriptorProto::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "name", + |m: &ServiceDescriptorProto| { &m.name }, + |m: &mut ServiceDescriptorProto| { &mut m.name }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<MethodDescriptorProto>>( + "method", + |m: &ServiceDescriptorProto| { &m.method }, + |m: &mut ServiceDescriptorProto| { &mut m.method }, + )); + fields.push(crate::reflect::accessor::make_singular_ptr_field_accessor::<_, crate::types::ProtobufTypeMessage<ServiceOptions>>( + "options", + |m: &ServiceDescriptorProto| { &m.options }, + |m: &mut ServiceDescriptorProto| { &mut m.options }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<ServiceDescriptorProto>( + "ServiceDescriptorProto", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static ServiceDescriptorProto { + static instance: crate::rt::LazyV2<ServiceDescriptorProto> = crate::rt::LazyV2::INIT; + instance.get(ServiceDescriptorProto::new) + } +} + +impl crate::Clear for ServiceDescriptorProto { + fn clear(&mut self) { + self.name.clear(); + self.method.clear(); + self.options.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for ServiceDescriptorProto { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for ServiceDescriptorProto { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct MethodDescriptorProto { + // message fields + name: crate::SingularField<::std::string::String>, + input_type: crate::SingularField<::std::string::String>, + output_type: crate::SingularField<::std::string::String>, + pub options: crate::SingularPtrField<MethodOptions>, + client_streaming: ::std::option::Option<bool>, + server_streaming: ::std::option::Option<bool>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a MethodDescriptorProto { + fn default() -> &'a MethodDescriptorProto { + <MethodDescriptorProto as crate::Message>::default_instance() + } +} + +impl MethodDescriptorProto { + pub fn new() -> MethodDescriptorProto { + ::std::default::Default::default() + } + + // optional string name = 1; + + + pub fn get_name(&self) -> &str { + match self.name.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_name(&mut self) { + self.name.clear(); + } + + pub fn has_name(&self) -> bool { + self.name.is_some() + } + + // Param is passed by value, moved + pub fn set_name(&mut self, v: ::std::string::String) { + self.name = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_name(&mut self) -> &mut ::std::string::String { + if self.name.is_none() { + self.name.set_default(); + } + self.name.as_mut().unwrap() + } + + // Take field + pub fn take_name(&mut self) -> ::std::string::String { + self.name.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional string input_type = 2; + + + pub fn get_input_type(&self) -> &str { + match self.input_type.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_input_type(&mut self) { + self.input_type.clear(); + } + + pub fn has_input_type(&self) -> bool { + self.input_type.is_some() + } + + // Param is passed by value, moved + pub fn set_input_type(&mut self, v: ::std::string::String) { + self.input_type = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_input_type(&mut self) -> &mut ::std::string::String { + if self.input_type.is_none() { + self.input_type.set_default(); + } + self.input_type.as_mut().unwrap() + } + + // Take field + pub fn take_input_type(&mut self) -> ::std::string::String { + self.input_type.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional string output_type = 3; + + + pub fn get_output_type(&self) -> &str { + match self.output_type.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_output_type(&mut self) { + self.output_type.clear(); + } + + pub fn has_output_type(&self) -> bool { + self.output_type.is_some() + } + + // Param is passed by value, moved + pub fn set_output_type(&mut self, v: ::std::string::String) { + self.output_type = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_output_type(&mut self) -> &mut ::std::string::String { + if self.output_type.is_none() { + self.output_type.set_default(); + } + self.output_type.as_mut().unwrap() + } + + // Take field + pub fn take_output_type(&mut self) -> ::std::string::String { + self.output_type.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional .google.protobuf.MethodOptions options = 4; + + + pub fn get_options(&self) -> &MethodOptions { + self.options.as_ref().unwrap_or_else(|| <MethodOptions as crate::Message>::default_instance()) + } + pub fn clear_options(&mut self) { + self.options.clear(); + } + + pub fn has_options(&self) -> bool { + self.options.is_some() + } + + // Param is passed by value, moved + pub fn set_options(&mut self, v: MethodOptions) { + self.options = crate::SingularPtrField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_options(&mut self) -> &mut MethodOptions { + if self.options.is_none() { + self.options.set_default(); + } + self.options.as_mut().unwrap() + } + + // Take field + pub fn take_options(&mut self) -> MethodOptions { + self.options.take().unwrap_or_else(|| MethodOptions::new()) + } + + // optional bool client_streaming = 5; + + + pub fn get_client_streaming(&self) -> bool { + self.client_streaming.unwrap_or(false) + } + pub fn clear_client_streaming(&mut self) { + self.client_streaming = ::std::option::Option::None; + } + + pub fn has_client_streaming(&self) -> bool { + self.client_streaming.is_some() + } + + // Param is passed by value, moved + pub fn set_client_streaming(&mut self, v: bool) { + self.client_streaming = ::std::option::Option::Some(v); + } + + // optional bool server_streaming = 6; + + + pub fn get_server_streaming(&self) -> bool { + self.server_streaming.unwrap_or(false) + } + pub fn clear_server_streaming(&mut self) { + self.server_streaming = ::std::option::Option::None; + } + + pub fn has_server_streaming(&self) -> bool { + self.server_streaming.is_some() + } + + // Param is passed by value, moved + pub fn set_server_streaming(&mut self, v: bool) { + self.server_streaming = ::std::option::Option::Some(v); + } +} + +impl crate::Message for MethodDescriptorProto { + fn is_initialized(&self) -> bool { + for v in &self.options { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.name)?; + }, + 2 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.input_type)?; + }, + 3 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.output_type)?; + }, + 4 => { + crate::rt::read_singular_message_into(wire_type, is, &mut self.options)?; + }, + 5 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.client_streaming = ::std::option::Option::Some(tmp); + }, + 6 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.server_streaming = ::std::option::Option::Some(tmp); + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(ref v) = self.name.as_ref() { + my_size += crate::rt::string_size(1, &v); + } + if let Some(ref v) = self.input_type.as_ref() { + my_size += crate::rt::string_size(2, &v); + } + if let Some(ref v) = self.output_type.as_ref() { + my_size += crate::rt::string_size(3, &v); + } + if let Some(ref v) = self.options.as_ref() { + let len = v.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + } + if let Some(v) = self.client_streaming { + my_size += 2; + } + if let Some(v) = self.server_streaming { + my_size += 2; + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(ref v) = self.name.as_ref() { + os.write_string(1, &v)?; + } + if let Some(ref v) = self.input_type.as_ref() { + os.write_string(2, &v)?; + } + if let Some(ref v) = self.output_type.as_ref() { + os.write_string(3, &v)?; + } + if let Some(ref v) = self.options.as_ref() { + os.write_tag(4, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + } + if let Some(v) = self.client_streaming { + os.write_bool(5, v)?; + } + if let Some(v) = self.server_streaming { + os.write_bool(6, v)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> MethodDescriptorProto { + MethodDescriptorProto::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "name", + |m: &MethodDescriptorProto| { &m.name }, + |m: &mut MethodDescriptorProto| { &mut m.name }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "input_type", + |m: &MethodDescriptorProto| { &m.input_type }, + |m: &mut MethodDescriptorProto| { &mut m.input_type }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "output_type", + |m: &MethodDescriptorProto| { &m.output_type }, + |m: &mut MethodDescriptorProto| { &mut m.output_type }, + )); + fields.push(crate::reflect::accessor::make_singular_ptr_field_accessor::<_, crate::types::ProtobufTypeMessage<MethodOptions>>( + "options", + |m: &MethodDescriptorProto| { &m.options }, + |m: &mut MethodDescriptorProto| { &mut m.options }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "client_streaming", + |m: &MethodDescriptorProto| { &m.client_streaming }, + |m: &mut MethodDescriptorProto| { &mut m.client_streaming }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "server_streaming", + |m: &MethodDescriptorProto| { &m.server_streaming }, + |m: &mut MethodDescriptorProto| { &mut m.server_streaming }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<MethodDescriptorProto>( + "MethodDescriptorProto", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static MethodDescriptorProto { + static instance: crate::rt::LazyV2<MethodDescriptorProto> = crate::rt::LazyV2::INIT; + instance.get(MethodDescriptorProto::new) + } +} + +impl crate::Clear for MethodDescriptorProto { + fn clear(&mut self) { + self.name.clear(); + self.input_type.clear(); + self.output_type.clear(); + self.options.clear(); + self.client_streaming = ::std::option::Option::None; + self.server_streaming = ::std::option::Option::None; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for MethodDescriptorProto { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for MethodDescriptorProto { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct FileOptions { + // message fields + java_package: crate::SingularField<::std::string::String>, + java_outer_classname: crate::SingularField<::std::string::String>, + java_multiple_files: ::std::option::Option<bool>, + java_generate_equals_and_hash: ::std::option::Option<bool>, + java_string_check_utf8: ::std::option::Option<bool>, + optimize_for: ::std::option::Option<FileOptions_OptimizeMode>, + go_package: crate::SingularField<::std::string::String>, + cc_generic_services: ::std::option::Option<bool>, + java_generic_services: ::std::option::Option<bool>, + py_generic_services: ::std::option::Option<bool>, + php_generic_services: ::std::option::Option<bool>, + deprecated: ::std::option::Option<bool>, + cc_enable_arenas: ::std::option::Option<bool>, + objc_class_prefix: crate::SingularField<::std::string::String>, + csharp_namespace: crate::SingularField<::std::string::String>, + swift_prefix: crate::SingularField<::std::string::String>, + php_class_prefix: crate::SingularField<::std::string::String>, + php_namespace: crate::SingularField<::std::string::String>, + php_metadata_namespace: crate::SingularField<::std::string::String>, + ruby_package: crate::SingularField<::std::string::String>, + pub uninterpreted_option: crate::RepeatedField<UninterpretedOption>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a FileOptions { + fn default() -> &'a FileOptions { + <FileOptions as crate::Message>::default_instance() + } +} + +impl FileOptions { + pub fn new() -> FileOptions { + ::std::default::Default::default() + } + + // optional string java_package = 1; + + + pub fn get_java_package(&self) -> &str { + match self.java_package.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_java_package(&mut self) { + self.java_package.clear(); + } + + pub fn has_java_package(&self) -> bool { + self.java_package.is_some() + } + + // Param is passed by value, moved + pub fn set_java_package(&mut self, v: ::std::string::String) { + self.java_package = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_java_package(&mut self) -> &mut ::std::string::String { + if self.java_package.is_none() { + self.java_package.set_default(); + } + self.java_package.as_mut().unwrap() + } + + // Take field + pub fn take_java_package(&mut self) -> ::std::string::String { + self.java_package.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional string java_outer_classname = 8; + + + pub fn get_java_outer_classname(&self) -> &str { + match self.java_outer_classname.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_java_outer_classname(&mut self) { + self.java_outer_classname.clear(); + } + + pub fn has_java_outer_classname(&self) -> bool { + self.java_outer_classname.is_some() + } + + // Param is passed by value, moved + pub fn set_java_outer_classname(&mut self, v: ::std::string::String) { + self.java_outer_classname = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_java_outer_classname(&mut self) -> &mut ::std::string::String { + if self.java_outer_classname.is_none() { + self.java_outer_classname.set_default(); + } + self.java_outer_classname.as_mut().unwrap() + } + + // Take field + pub fn take_java_outer_classname(&mut self) -> ::std::string::String { + self.java_outer_classname.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional bool java_multiple_files = 10; + + + pub fn get_java_multiple_files(&self) -> bool { + self.java_multiple_files.unwrap_or(false) + } + pub fn clear_java_multiple_files(&mut self) { + self.java_multiple_files = ::std::option::Option::None; + } + + pub fn has_java_multiple_files(&self) -> bool { + self.java_multiple_files.is_some() + } + + // Param is passed by value, moved + pub fn set_java_multiple_files(&mut self, v: bool) { + self.java_multiple_files = ::std::option::Option::Some(v); + } + + // optional bool java_generate_equals_and_hash = 20; + + + pub fn get_java_generate_equals_and_hash(&self) -> bool { + self.java_generate_equals_and_hash.unwrap_or(false) + } + pub fn clear_java_generate_equals_and_hash(&mut self) { + self.java_generate_equals_and_hash = ::std::option::Option::None; + } + + pub fn has_java_generate_equals_and_hash(&self) -> bool { + self.java_generate_equals_and_hash.is_some() + } + + // Param is passed by value, moved + pub fn set_java_generate_equals_and_hash(&mut self, v: bool) { + self.java_generate_equals_and_hash = ::std::option::Option::Some(v); + } + + // optional bool java_string_check_utf8 = 27; + + + pub fn get_java_string_check_utf8(&self) -> bool { + self.java_string_check_utf8.unwrap_or(false) + } + pub fn clear_java_string_check_utf8(&mut self) { + self.java_string_check_utf8 = ::std::option::Option::None; + } + + pub fn has_java_string_check_utf8(&self) -> bool { + self.java_string_check_utf8.is_some() + } + + // Param is passed by value, moved + pub fn set_java_string_check_utf8(&mut self, v: bool) { + self.java_string_check_utf8 = ::std::option::Option::Some(v); + } + + // optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9; + + + pub fn get_optimize_for(&self) -> FileOptions_OptimizeMode { + self.optimize_for.unwrap_or(FileOptions_OptimizeMode::SPEED) + } + pub fn clear_optimize_for(&mut self) { + self.optimize_for = ::std::option::Option::None; + } + + pub fn has_optimize_for(&self) -> bool { + self.optimize_for.is_some() + } + + // Param is passed by value, moved + pub fn set_optimize_for(&mut self, v: FileOptions_OptimizeMode) { + self.optimize_for = ::std::option::Option::Some(v); + } + + // optional string go_package = 11; + + + pub fn get_go_package(&self) -> &str { + match self.go_package.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_go_package(&mut self) { + self.go_package.clear(); + } + + pub fn has_go_package(&self) -> bool { + self.go_package.is_some() + } + + // Param is passed by value, moved + pub fn set_go_package(&mut self, v: ::std::string::String) { + self.go_package = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_go_package(&mut self) -> &mut ::std::string::String { + if self.go_package.is_none() { + self.go_package.set_default(); + } + self.go_package.as_mut().unwrap() + } + + // Take field + pub fn take_go_package(&mut self) -> ::std::string::String { + self.go_package.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional bool cc_generic_services = 16; + + + pub fn get_cc_generic_services(&self) -> bool { + self.cc_generic_services.unwrap_or(false) + } + pub fn clear_cc_generic_services(&mut self) { + self.cc_generic_services = ::std::option::Option::None; + } + + pub fn has_cc_generic_services(&self) -> bool { + self.cc_generic_services.is_some() + } + + // Param is passed by value, moved + pub fn set_cc_generic_services(&mut self, v: bool) { + self.cc_generic_services = ::std::option::Option::Some(v); + } + + // optional bool java_generic_services = 17; + + + pub fn get_java_generic_services(&self) -> bool { + self.java_generic_services.unwrap_or(false) + } + pub fn clear_java_generic_services(&mut self) { + self.java_generic_services = ::std::option::Option::None; + } + + pub fn has_java_generic_services(&self) -> bool { + self.java_generic_services.is_some() + } + + // Param is passed by value, moved + pub fn set_java_generic_services(&mut self, v: bool) { + self.java_generic_services = ::std::option::Option::Some(v); + } + + // optional bool py_generic_services = 18; + + + pub fn get_py_generic_services(&self) -> bool { + self.py_generic_services.unwrap_or(false) + } + pub fn clear_py_generic_services(&mut self) { + self.py_generic_services = ::std::option::Option::None; + } + + pub fn has_py_generic_services(&self) -> bool { + self.py_generic_services.is_some() + } + + // Param is passed by value, moved + pub fn set_py_generic_services(&mut self, v: bool) { + self.py_generic_services = ::std::option::Option::Some(v); + } + + // optional bool php_generic_services = 42; + + + pub fn get_php_generic_services(&self) -> bool { + self.php_generic_services.unwrap_or(false) + } + pub fn clear_php_generic_services(&mut self) { + self.php_generic_services = ::std::option::Option::None; + } + + pub fn has_php_generic_services(&self) -> bool { + self.php_generic_services.is_some() + } + + // Param is passed by value, moved + pub fn set_php_generic_services(&mut self, v: bool) { + self.php_generic_services = ::std::option::Option::Some(v); + } + + // optional bool deprecated = 23; + + + pub fn get_deprecated(&self) -> bool { + self.deprecated.unwrap_or(false) + } + pub fn clear_deprecated(&mut self) { + self.deprecated = ::std::option::Option::None; + } + + pub fn has_deprecated(&self) -> bool { + self.deprecated.is_some() + } + + // Param is passed by value, moved + pub fn set_deprecated(&mut self, v: bool) { + self.deprecated = ::std::option::Option::Some(v); + } + + // optional bool cc_enable_arenas = 31; + + + pub fn get_cc_enable_arenas(&self) -> bool { + self.cc_enable_arenas.unwrap_or(true) + } + pub fn clear_cc_enable_arenas(&mut self) { + self.cc_enable_arenas = ::std::option::Option::None; + } + + pub fn has_cc_enable_arenas(&self) -> bool { + self.cc_enable_arenas.is_some() + } + + // Param is passed by value, moved + pub fn set_cc_enable_arenas(&mut self, v: bool) { + self.cc_enable_arenas = ::std::option::Option::Some(v); + } + + // optional string objc_class_prefix = 36; + + + pub fn get_objc_class_prefix(&self) -> &str { + match self.objc_class_prefix.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_objc_class_prefix(&mut self) { + self.objc_class_prefix.clear(); + } + + pub fn has_objc_class_prefix(&self) -> bool { + self.objc_class_prefix.is_some() + } + + // Param is passed by value, moved + pub fn set_objc_class_prefix(&mut self, v: ::std::string::String) { + self.objc_class_prefix = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_objc_class_prefix(&mut self) -> &mut ::std::string::String { + if self.objc_class_prefix.is_none() { + self.objc_class_prefix.set_default(); + } + self.objc_class_prefix.as_mut().unwrap() + } + + // Take field + pub fn take_objc_class_prefix(&mut self) -> ::std::string::String { + self.objc_class_prefix.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional string csharp_namespace = 37; + + + pub fn get_csharp_namespace(&self) -> &str { + match self.csharp_namespace.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_csharp_namespace(&mut self) { + self.csharp_namespace.clear(); + } + + pub fn has_csharp_namespace(&self) -> bool { + self.csharp_namespace.is_some() + } + + // Param is passed by value, moved + pub fn set_csharp_namespace(&mut self, v: ::std::string::String) { + self.csharp_namespace = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_csharp_namespace(&mut self) -> &mut ::std::string::String { + if self.csharp_namespace.is_none() { + self.csharp_namespace.set_default(); + } + self.csharp_namespace.as_mut().unwrap() + } + + // Take field + pub fn take_csharp_namespace(&mut self) -> ::std::string::String { + self.csharp_namespace.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional string swift_prefix = 39; + + + pub fn get_swift_prefix(&self) -> &str { + match self.swift_prefix.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_swift_prefix(&mut self) { + self.swift_prefix.clear(); + } + + pub fn has_swift_prefix(&self) -> bool { + self.swift_prefix.is_some() + } + + // Param is passed by value, moved + pub fn set_swift_prefix(&mut self, v: ::std::string::String) { + self.swift_prefix = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_swift_prefix(&mut self) -> &mut ::std::string::String { + if self.swift_prefix.is_none() { + self.swift_prefix.set_default(); + } + self.swift_prefix.as_mut().unwrap() + } + + // Take field + pub fn take_swift_prefix(&mut self) -> ::std::string::String { + self.swift_prefix.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional string php_class_prefix = 40; + + + pub fn get_php_class_prefix(&self) -> &str { + match self.php_class_prefix.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_php_class_prefix(&mut self) { + self.php_class_prefix.clear(); + } + + pub fn has_php_class_prefix(&self) -> bool { + self.php_class_prefix.is_some() + } + + // Param is passed by value, moved + pub fn set_php_class_prefix(&mut self, v: ::std::string::String) { + self.php_class_prefix = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_php_class_prefix(&mut self) -> &mut ::std::string::String { + if self.php_class_prefix.is_none() { + self.php_class_prefix.set_default(); + } + self.php_class_prefix.as_mut().unwrap() + } + + // Take field + pub fn take_php_class_prefix(&mut self) -> ::std::string::String { + self.php_class_prefix.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional string php_namespace = 41; + + + pub fn get_php_namespace(&self) -> &str { + match self.php_namespace.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_php_namespace(&mut self) { + self.php_namespace.clear(); + } + + pub fn has_php_namespace(&self) -> bool { + self.php_namespace.is_some() + } + + // Param is passed by value, moved + pub fn set_php_namespace(&mut self, v: ::std::string::String) { + self.php_namespace = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_php_namespace(&mut self) -> &mut ::std::string::String { + if self.php_namespace.is_none() { + self.php_namespace.set_default(); + } + self.php_namespace.as_mut().unwrap() + } + + // Take field + pub fn take_php_namespace(&mut self) -> ::std::string::String { + self.php_namespace.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional string php_metadata_namespace = 44; + + + pub fn get_php_metadata_namespace(&self) -> &str { + match self.php_metadata_namespace.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_php_metadata_namespace(&mut self) { + self.php_metadata_namespace.clear(); + } + + pub fn has_php_metadata_namespace(&self) -> bool { + self.php_metadata_namespace.is_some() + } + + // Param is passed by value, moved + pub fn set_php_metadata_namespace(&mut self, v: ::std::string::String) { + self.php_metadata_namespace = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_php_metadata_namespace(&mut self) -> &mut ::std::string::String { + if self.php_metadata_namespace.is_none() { + self.php_metadata_namespace.set_default(); + } + self.php_metadata_namespace.as_mut().unwrap() + } + + // Take field + pub fn take_php_metadata_namespace(&mut self) -> ::std::string::String { + self.php_metadata_namespace.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional string ruby_package = 45; + + + pub fn get_ruby_package(&self) -> &str { + match self.ruby_package.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_ruby_package(&mut self) { + self.ruby_package.clear(); + } + + pub fn has_ruby_package(&self) -> bool { + self.ruby_package.is_some() + } + + // Param is passed by value, moved + pub fn set_ruby_package(&mut self, v: ::std::string::String) { + self.ruby_package = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_ruby_package(&mut self) -> &mut ::std::string::String { + if self.ruby_package.is_none() { + self.ruby_package.set_default(); + } + self.ruby_package.as_mut().unwrap() + } + + // Take field + pub fn take_ruby_package(&mut self) -> ::std::string::String { + self.ruby_package.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + + + pub fn get_uninterpreted_option(&self) -> &[UninterpretedOption] { + &self.uninterpreted_option + } + pub fn clear_uninterpreted_option(&mut self) { + self.uninterpreted_option.clear(); + } + + // Param is passed by value, moved + pub fn set_uninterpreted_option(&mut self, v: crate::RepeatedField<UninterpretedOption>) { + self.uninterpreted_option = v; + } + + // Mutable pointer to the field. + pub fn mut_uninterpreted_option(&mut self) -> &mut crate::RepeatedField<UninterpretedOption> { + &mut self.uninterpreted_option + } + + // Take field + pub fn take_uninterpreted_option(&mut self) -> crate::RepeatedField<UninterpretedOption> { + ::std::mem::replace(&mut self.uninterpreted_option, crate::RepeatedField::new()) + } +} + +impl crate::Message for FileOptions { + fn is_initialized(&self) -> bool { + for v in &self.uninterpreted_option { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.java_package)?; + }, + 8 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.java_outer_classname)?; + }, + 10 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.java_multiple_files = ::std::option::Option::Some(tmp); + }, + 20 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.java_generate_equals_and_hash = ::std::option::Option::Some(tmp); + }, + 27 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.java_string_check_utf8 = ::std::option::Option::Some(tmp); + }, + 9 => { + crate::rt::read_proto2_enum_with_unknown_fields_into(wire_type, is, &mut self.optimize_for, 9, &mut self.unknown_fields)? + }, + 11 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.go_package)?; + }, + 16 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.cc_generic_services = ::std::option::Option::Some(tmp); + }, + 17 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.java_generic_services = ::std::option::Option::Some(tmp); + }, + 18 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.py_generic_services = ::std::option::Option::Some(tmp); + }, + 42 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.php_generic_services = ::std::option::Option::Some(tmp); + }, + 23 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.deprecated = ::std::option::Option::Some(tmp); + }, + 31 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.cc_enable_arenas = ::std::option::Option::Some(tmp); + }, + 36 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.objc_class_prefix)?; + }, + 37 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.csharp_namespace)?; + }, + 39 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.swift_prefix)?; + }, + 40 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.php_class_prefix)?; + }, + 41 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.php_namespace)?; + }, + 44 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.php_metadata_namespace)?; + }, + 45 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.ruby_package)?; + }, + 999 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.uninterpreted_option)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(ref v) = self.java_package.as_ref() { + my_size += crate::rt::string_size(1, &v); + } + if let Some(ref v) = self.java_outer_classname.as_ref() { + my_size += crate::rt::string_size(8, &v); + } + if let Some(v) = self.java_multiple_files { + my_size += 2; + } + if let Some(v) = self.java_generate_equals_and_hash { + my_size += 3; + } + if let Some(v) = self.java_string_check_utf8 { + my_size += 3; + } + if let Some(v) = self.optimize_for { + my_size += crate::rt::enum_size(9, v); + } + if let Some(ref v) = self.go_package.as_ref() { + my_size += crate::rt::string_size(11, &v); + } + if let Some(v) = self.cc_generic_services { + my_size += 3; + } + if let Some(v) = self.java_generic_services { + my_size += 3; + } + if let Some(v) = self.py_generic_services { + my_size += 3; + } + if let Some(v) = self.php_generic_services { + my_size += 3; + } + if let Some(v) = self.deprecated { + my_size += 3; + } + if let Some(v) = self.cc_enable_arenas { + my_size += 3; + } + if let Some(ref v) = self.objc_class_prefix.as_ref() { + my_size += crate::rt::string_size(36, &v); + } + if let Some(ref v) = self.csharp_namespace.as_ref() { + my_size += crate::rt::string_size(37, &v); + } + if let Some(ref v) = self.swift_prefix.as_ref() { + my_size += crate::rt::string_size(39, &v); + } + if let Some(ref v) = self.php_class_prefix.as_ref() { + my_size += crate::rt::string_size(40, &v); + } + if let Some(ref v) = self.php_namespace.as_ref() { + my_size += crate::rt::string_size(41, &v); + } + if let Some(ref v) = self.php_metadata_namespace.as_ref() { + my_size += crate::rt::string_size(44, &v); + } + if let Some(ref v) = self.ruby_package.as_ref() { + my_size += crate::rt::string_size(45, &v); + } + for value in &self.uninterpreted_option { + let len = value.compute_size(); + my_size += 2 + crate::rt::compute_raw_varint32_size(len) + len; + }; + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(ref v) = self.java_package.as_ref() { + os.write_string(1, &v)?; + } + if let Some(ref v) = self.java_outer_classname.as_ref() { + os.write_string(8, &v)?; + } + if let Some(v) = self.java_multiple_files { + os.write_bool(10, v)?; + } + if let Some(v) = self.java_generate_equals_and_hash { + os.write_bool(20, v)?; + } + if let Some(v) = self.java_string_check_utf8 { + os.write_bool(27, v)?; + } + if let Some(v) = self.optimize_for { + os.write_enum(9, crate::ProtobufEnum::value(&v))?; + } + if let Some(ref v) = self.go_package.as_ref() { + os.write_string(11, &v)?; + } + if let Some(v) = self.cc_generic_services { + os.write_bool(16, v)?; + } + if let Some(v) = self.java_generic_services { + os.write_bool(17, v)?; + } + if let Some(v) = self.py_generic_services { + os.write_bool(18, v)?; + } + if let Some(v) = self.php_generic_services { + os.write_bool(42, v)?; + } + if let Some(v) = self.deprecated { + os.write_bool(23, v)?; + } + if let Some(v) = self.cc_enable_arenas { + os.write_bool(31, v)?; + } + if let Some(ref v) = self.objc_class_prefix.as_ref() { + os.write_string(36, &v)?; + } + if let Some(ref v) = self.csharp_namespace.as_ref() { + os.write_string(37, &v)?; + } + if let Some(ref v) = self.swift_prefix.as_ref() { + os.write_string(39, &v)?; + } + if let Some(ref v) = self.php_class_prefix.as_ref() { + os.write_string(40, &v)?; + } + if let Some(ref v) = self.php_namespace.as_ref() { + os.write_string(41, &v)?; + } + if let Some(ref v) = self.php_metadata_namespace.as_ref() { + os.write_string(44, &v)?; + } + if let Some(ref v) = self.ruby_package.as_ref() { + os.write_string(45, &v)?; + } + for v in &self.uninterpreted_option { + os.write_tag(999, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> FileOptions { + FileOptions::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "java_package", + |m: &FileOptions| { &m.java_package }, + |m: &mut FileOptions| { &mut m.java_package }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "java_outer_classname", + |m: &FileOptions| { &m.java_outer_classname }, + |m: &mut FileOptions| { &mut m.java_outer_classname }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "java_multiple_files", + |m: &FileOptions| { &m.java_multiple_files }, + |m: &mut FileOptions| { &mut m.java_multiple_files }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "java_generate_equals_and_hash", + |m: &FileOptions| { &m.java_generate_equals_and_hash }, + |m: &mut FileOptions| { &mut m.java_generate_equals_and_hash }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "java_string_check_utf8", + |m: &FileOptions| { &m.java_string_check_utf8 }, + |m: &mut FileOptions| { &mut m.java_string_check_utf8 }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeEnum<FileOptions_OptimizeMode>>( + "optimize_for", + |m: &FileOptions| { &m.optimize_for }, + |m: &mut FileOptions| { &mut m.optimize_for }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "go_package", + |m: &FileOptions| { &m.go_package }, + |m: &mut FileOptions| { &mut m.go_package }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "cc_generic_services", + |m: &FileOptions| { &m.cc_generic_services }, + |m: &mut FileOptions| { &mut m.cc_generic_services }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "java_generic_services", + |m: &FileOptions| { &m.java_generic_services }, + |m: &mut FileOptions| { &mut m.java_generic_services }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "py_generic_services", + |m: &FileOptions| { &m.py_generic_services }, + |m: &mut FileOptions| { &mut m.py_generic_services }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "php_generic_services", + |m: &FileOptions| { &m.php_generic_services }, + |m: &mut FileOptions| { &mut m.php_generic_services }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "deprecated", + |m: &FileOptions| { &m.deprecated }, + |m: &mut FileOptions| { &mut m.deprecated }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "cc_enable_arenas", + |m: &FileOptions| { &m.cc_enable_arenas }, + |m: &mut FileOptions| { &mut m.cc_enable_arenas }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "objc_class_prefix", + |m: &FileOptions| { &m.objc_class_prefix }, + |m: &mut FileOptions| { &mut m.objc_class_prefix }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "csharp_namespace", + |m: &FileOptions| { &m.csharp_namespace }, + |m: &mut FileOptions| { &mut m.csharp_namespace }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "swift_prefix", + |m: &FileOptions| { &m.swift_prefix }, + |m: &mut FileOptions| { &mut m.swift_prefix }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "php_class_prefix", + |m: &FileOptions| { &m.php_class_prefix }, + |m: &mut FileOptions| { &mut m.php_class_prefix }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "php_namespace", + |m: &FileOptions| { &m.php_namespace }, + |m: &mut FileOptions| { &mut m.php_namespace }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "php_metadata_namespace", + |m: &FileOptions| { &m.php_metadata_namespace }, + |m: &mut FileOptions| { &mut m.php_metadata_namespace }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "ruby_package", + |m: &FileOptions| { &m.ruby_package }, + |m: &mut FileOptions| { &mut m.ruby_package }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<UninterpretedOption>>( + "uninterpreted_option", + |m: &FileOptions| { &m.uninterpreted_option }, + |m: &mut FileOptions| { &mut m.uninterpreted_option }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<FileOptions>( + "FileOptions", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static FileOptions { + static instance: crate::rt::LazyV2<FileOptions> = crate::rt::LazyV2::INIT; + instance.get(FileOptions::new) + } +} + +impl crate::Clear for FileOptions { + fn clear(&mut self) { + self.java_package.clear(); + self.java_outer_classname.clear(); + self.java_multiple_files = ::std::option::Option::None; + self.java_generate_equals_and_hash = ::std::option::Option::None; + self.java_string_check_utf8 = ::std::option::Option::None; + self.optimize_for = ::std::option::Option::None; + self.go_package.clear(); + self.cc_generic_services = ::std::option::Option::None; + self.java_generic_services = ::std::option::Option::None; + self.py_generic_services = ::std::option::Option::None; + self.php_generic_services = ::std::option::Option::None; + self.deprecated = ::std::option::Option::None; + self.cc_enable_arenas = ::std::option::Option::None; + self.objc_class_prefix.clear(); + self.csharp_namespace.clear(); + self.swift_prefix.clear(); + self.php_class_prefix.clear(); + self.php_namespace.clear(); + self.php_metadata_namespace.clear(); + self.ruby_package.clear(); + self.uninterpreted_option.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for FileOptions { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for FileOptions { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(Clone,PartialEq,Eq,Debug,Hash)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub enum FileOptions_OptimizeMode { + SPEED = 1, + CODE_SIZE = 2, + LITE_RUNTIME = 3, +} + +impl crate::ProtobufEnum for FileOptions_OptimizeMode { + fn value(&self) -> i32 { + *self as i32 + } + + fn from_i32(value: i32) -> ::std::option::Option<FileOptions_OptimizeMode> { + match value { + 1 => ::std::option::Option::Some(FileOptions_OptimizeMode::SPEED), + 2 => ::std::option::Option::Some(FileOptions_OptimizeMode::CODE_SIZE), + 3 => ::std::option::Option::Some(FileOptions_OptimizeMode::LITE_RUNTIME), + _ => ::std::option::Option::None + } + } + + fn values() -> &'static [Self] { + static values: &'static [FileOptions_OptimizeMode] = &[ + FileOptions_OptimizeMode::SPEED, + FileOptions_OptimizeMode::CODE_SIZE, + FileOptions_OptimizeMode::LITE_RUNTIME, + ]; + values + } + + fn enum_descriptor_static() -> &'static crate::reflect::EnumDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::EnumDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + crate::reflect::EnumDescriptor::new_pb_name::<FileOptions_OptimizeMode>("FileOptions.OptimizeMode", file_descriptor_proto()) + }) + } +} + +impl ::std::marker::Copy for FileOptions_OptimizeMode { +} + +// Note, `Default` is implemented although default value is not 0 +impl ::std::default::Default for FileOptions_OptimizeMode { + fn default() -> Self { + FileOptions_OptimizeMode::SPEED + } +} + +impl crate::reflect::ProtobufValue for FileOptions_OptimizeMode { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Enum(crate::ProtobufEnum::descriptor(self)) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct MessageOptions { + // message fields + message_set_wire_format: ::std::option::Option<bool>, + no_standard_descriptor_accessor: ::std::option::Option<bool>, + deprecated: ::std::option::Option<bool>, + map_entry: ::std::option::Option<bool>, + pub uninterpreted_option: crate::RepeatedField<UninterpretedOption>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a MessageOptions { + fn default() -> &'a MessageOptions { + <MessageOptions as crate::Message>::default_instance() + } +} + +impl MessageOptions { + pub fn new() -> MessageOptions { + ::std::default::Default::default() + } + + // optional bool message_set_wire_format = 1; + + + pub fn get_message_set_wire_format(&self) -> bool { + self.message_set_wire_format.unwrap_or(false) + } + pub fn clear_message_set_wire_format(&mut self) { + self.message_set_wire_format = ::std::option::Option::None; + } + + pub fn has_message_set_wire_format(&self) -> bool { + self.message_set_wire_format.is_some() + } + + // Param is passed by value, moved + pub fn set_message_set_wire_format(&mut self, v: bool) { + self.message_set_wire_format = ::std::option::Option::Some(v); + } + + // optional bool no_standard_descriptor_accessor = 2; + + + pub fn get_no_standard_descriptor_accessor(&self) -> bool { + self.no_standard_descriptor_accessor.unwrap_or(false) + } + pub fn clear_no_standard_descriptor_accessor(&mut self) { + self.no_standard_descriptor_accessor = ::std::option::Option::None; + } + + pub fn has_no_standard_descriptor_accessor(&self) -> bool { + self.no_standard_descriptor_accessor.is_some() + } + + // Param is passed by value, moved + pub fn set_no_standard_descriptor_accessor(&mut self, v: bool) { + self.no_standard_descriptor_accessor = ::std::option::Option::Some(v); + } + + // optional bool deprecated = 3; + + + pub fn get_deprecated(&self) -> bool { + self.deprecated.unwrap_or(false) + } + pub fn clear_deprecated(&mut self) { + self.deprecated = ::std::option::Option::None; + } + + pub fn has_deprecated(&self) -> bool { + self.deprecated.is_some() + } + + // Param is passed by value, moved + pub fn set_deprecated(&mut self, v: bool) { + self.deprecated = ::std::option::Option::Some(v); + } + + // optional bool map_entry = 7; + + + pub fn get_map_entry(&self) -> bool { + self.map_entry.unwrap_or(false) + } + pub fn clear_map_entry(&mut self) { + self.map_entry = ::std::option::Option::None; + } + + pub fn has_map_entry(&self) -> bool { + self.map_entry.is_some() + } + + // Param is passed by value, moved + pub fn set_map_entry(&mut self, v: bool) { + self.map_entry = ::std::option::Option::Some(v); + } + + // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + + + pub fn get_uninterpreted_option(&self) -> &[UninterpretedOption] { + &self.uninterpreted_option + } + pub fn clear_uninterpreted_option(&mut self) { + self.uninterpreted_option.clear(); + } + + // Param is passed by value, moved + pub fn set_uninterpreted_option(&mut self, v: crate::RepeatedField<UninterpretedOption>) { + self.uninterpreted_option = v; + } + + // Mutable pointer to the field. + pub fn mut_uninterpreted_option(&mut self) -> &mut crate::RepeatedField<UninterpretedOption> { + &mut self.uninterpreted_option + } + + // Take field + pub fn take_uninterpreted_option(&mut self) -> crate::RepeatedField<UninterpretedOption> { + ::std::mem::replace(&mut self.uninterpreted_option, crate::RepeatedField::new()) + } +} + +impl crate::Message for MessageOptions { + fn is_initialized(&self) -> bool { + for v in &self.uninterpreted_option { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.message_set_wire_format = ::std::option::Option::Some(tmp); + }, + 2 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.no_standard_descriptor_accessor = ::std::option::Option::Some(tmp); + }, + 3 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.deprecated = ::std::option::Option::Some(tmp); + }, + 7 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.map_entry = ::std::option::Option::Some(tmp); + }, + 999 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.uninterpreted_option)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(v) = self.message_set_wire_format { + my_size += 2; + } + if let Some(v) = self.no_standard_descriptor_accessor { + my_size += 2; + } + if let Some(v) = self.deprecated { + my_size += 2; + } + if let Some(v) = self.map_entry { + my_size += 2; + } + for value in &self.uninterpreted_option { + let len = value.compute_size(); + my_size += 2 + crate::rt::compute_raw_varint32_size(len) + len; + }; + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(v) = self.message_set_wire_format { + os.write_bool(1, v)?; + } + if let Some(v) = self.no_standard_descriptor_accessor { + os.write_bool(2, v)?; + } + if let Some(v) = self.deprecated { + os.write_bool(3, v)?; + } + if let Some(v) = self.map_entry { + os.write_bool(7, v)?; + } + for v in &self.uninterpreted_option { + os.write_tag(999, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> MessageOptions { + MessageOptions::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "message_set_wire_format", + |m: &MessageOptions| { &m.message_set_wire_format }, + |m: &mut MessageOptions| { &mut m.message_set_wire_format }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "no_standard_descriptor_accessor", + |m: &MessageOptions| { &m.no_standard_descriptor_accessor }, + |m: &mut MessageOptions| { &mut m.no_standard_descriptor_accessor }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "deprecated", + |m: &MessageOptions| { &m.deprecated }, + |m: &mut MessageOptions| { &mut m.deprecated }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "map_entry", + |m: &MessageOptions| { &m.map_entry }, + |m: &mut MessageOptions| { &mut m.map_entry }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<UninterpretedOption>>( + "uninterpreted_option", + |m: &MessageOptions| { &m.uninterpreted_option }, + |m: &mut MessageOptions| { &mut m.uninterpreted_option }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<MessageOptions>( + "MessageOptions", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static MessageOptions { + static instance: crate::rt::LazyV2<MessageOptions> = crate::rt::LazyV2::INIT; + instance.get(MessageOptions::new) + } +} + +impl crate::Clear for MessageOptions { + fn clear(&mut self) { + self.message_set_wire_format = ::std::option::Option::None; + self.no_standard_descriptor_accessor = ::std::option::Option::None; + self.deprecated = ::std::option::Option::None; + self.map_entry = ::std::option::Option::None; + self.uninterpreted_option.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for MessageOptions { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for MessageOptions { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct FieldOptions { + // message fields + ctype: ::std::option::Option<FieldOptions_CType>, + packed: ::std::option::Option<bool>, + jstype: ::std::option::Option<FieldOptions_JSType>, + lazy: ::std::option::Option<bool>, + deprecated: ::std::option::Option<bool>, + weak: ::std::option::Option<bool>, + pub uninterpreted_option: crate::RepeatedField<UninterpretedOption>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a FieldOptions { + fn default() -> &'a FieldOptions { + <FieldOptions as crate::Message>::default_instance() + } +} + +impl FieldOptions { + pub fn new() -> FieldOptions { + ::std::default::Default::default() + } + + // optional .google.protobuf.FieldOptions.CType ctype = 1; + + + pub fn get_ctype(&self) -> FieldOptions_CType { + self.ctype.unwrap_or(FieldOptions_CType::STRING) + } + pub fn clear_ctype(&mut self) { + self.ctype = ::std::option::Option::None; + } + + pub fn has_ctype(&self) -> bool { + self.ctype.is_some() + } + + // Param is passed by value, moved + pub fn set_ctype(&mut self, v: FieldOptions_CType) { + self.ctype = ::std::option::Option::Some(v); + } + + // optional bool packed = 2; + + + pub fn get_packed(&self) -> bool { + self.packed.unwrap_or(false) + } + pub fn clear_packed(&mut self) { + self.packed = ::std::option::Option::None; + } + + pub fn has_packed(&self) -> bool { + self.packed.is_some() + } + + // Param is passed by value, moved + pub fn set_packed(&mut self, v: bool) { + self.packed = ::std::option::Option::Some(v); + } + + // optional .google.protobuf.FieldOptions.JSType jstype = 6; + + + pub fn get_jstype(&self) -> FieldOptions_JSType { + self.jstype.unwrap_or(FieldOptions_JSType::JS_NORMAL) + } + pub fn clear_jstype(&mut self) { + self.jstype = ::std::option::Option::None; + } + + pub fn has_jstype(&self) -> bool { + self.jstype.is_some() + } + + // Param is passed by value, moved + pub fn set_jstype(&mut self, v: FieldOptions_JSType) { + self.jstype = ::std::option::Option::Some(v); + } + + // optional bool lazy = 5; + + + pub fn get_lazy(&self) -> bool { + self.lazy.unwrap_or(false) + } + pub fn clear_lazy(&mut self) { + self.lazy = ::std::option::Option::None; + } + + pub fn has_lazy(&self) -> bool { + self.lazy.is_some() + } + + // Param is passed by value, moved + pub fn set_lazy(&mut self, v: bool) { + self.lazy = ::std::option::Option::Some(v); + } + + // optional bool deprecated = 3; + + + pub fn get_deprecated(&self) -> bool { + self.deprecated.unwrap_or(false) + } + pub fn clear_deprecated(&mut self) { + self.deprecated = ::std::option::Option::None; + } + + pub fn has_deprecated(&self) -> bool { + self.deprecated.is_some() + } + + // Param is passed by value, moved + pub fn set_deprecated(&mut self, v: bool) { + self.deprecated = ::std::option::Option::Some(v); + } + + // optional bool weak = 10; + + + pub fn get_weak(&self) -> bool { + self.weak.unwrap_or(false) + } + pub fn clear_weak(&mut self) { + self.weak = ::std::option::Option::None; + } + + pub fn has_weak(&self) -> bool { + self.weak.is_some() + } + + // Param is passed by value, moved + pub fn set_weak(&mut self, v: bool) { + self.weak = ::std::option::Option::Some(v); + } + + // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + + + pub fn get_uninterpreted_option(&self) -> &[UninterpretedOption] { + &self.uninterpreted_option + } + pub fn clear_uninterpreted_option(&mut self) { + self.uninterpreted_option.clear(); + } + + // Param is passed by value, moved + pub fn set_uninterpreted_option(&mut self, v: crate::RepeatedField<UninterpretedOption>) { + self.uninterpreted_option = v; + } + + // Mutable pointer to the field. + pub fn mut_uninterpreted_option(&mut self) -> &mut crate::RepeatedField<UninterpretedOption> { + &mut self.uninterpreted_option + } + + // Take field + pub fn take_uninterpreted_option(&mut self) -> crate::RepeatedField<UninterpretedOption> { + ::std::mem::replace(&mut self.uninterpreted_option, crate::RepeatedField::new()) + } +} + +impl crate::Message for FieldOptions { + fn is_initialized(&self) -> bool { + for v in &self.uninterpreted_option { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_proto2_enum_with_unknown_fields_into(wire_type, is, &mut self.ctype, 1, &mut self.unknown_fields)? + }, + 2 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.packed = ::std::option::Option::Some(tmp); + }, + 6 => { + crate::rt::read_proto2_enum_with_unknown_fields_into(wire_type, is, &mut self.jstype, 6, &mut self.unknown_fields)? + }, + 5 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.lazy = ::std::option::Option::Some(tmp); + }, + 3 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.deprecated = ::std::option::Option::Some(tmp); + }, + 10 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.weak = ::std::option::Option::Some(tmp); + }, + 999 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.uninterpreted_option)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(v) = self.ctype { + my_size += crate::rt::enum_size(1, v); + } + if let Some(v) = self.packed { + my_size += 2; + } + if let Some(v) = self.jstype { + my_size += crate::rt::enum_size(6, v); + } + if let Some(v) = self.lazy { + my_size += 2; + } + if let Some(v) = self.deprecated { + my_size += 2; + } + if let Some(v) = self.weak { + my_size += 2; + } + for value in &self.uninterpreted_option { + let len = value.compute_size(); + my_size += 2 + crate::rt::compute_raw_varint32_size(len) + len; + }; + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(v) = self.ctype { + os.write_enum(1, crate::ProtobufEnum::value(&v))?; + } + if let Some(v) = self.packed { + os.write_bool(2, v)?; + } + if let Some(v) = self.jstype { + os.write_enum(6, crate::ProtobufEnum::value(&v))?; + } + if let Some(v) = self.lazy { + os.write_bool(5, v)?; + } + if let Some(v) = self.deprecated { + os.write_bool(3, v)?; + } + if let Some(v) = self.weak { + os.write_bool(10, v)?; + } + for v in &self.uninterpreted_option { + os.write_tag(999, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> FieldOptions { + FieldOptions::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeEnum<FieldOptions_CType>>( + "ctype", + |m: &FieldOptions| { &m.ctype }, + |m: &mut FieldOptions| { &mut m.ctype }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "packed", + |m: &FieldOptions| { &m.packed }, + |m: &mut FieldOptions| { &mut m.packed }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeEnum<FieldOptions_JSType>>( + "jstype", + |m: &FieldOptions| { &m.jstype }, + |m: &mut FieldOptions| { &mut m.jstype }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "lazy", + |m: &FieldOptions| { &m.lazy }, + |m: &mut FieldOptions| { &mut m.lazy }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "deprecated", + |m: &FieldOptions| { &m.deprecated }, + |m: &mut FieldOptions| { &mut m.deprecated }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "weak", + |m: &FieldOptions| { &m.weak }, + |m: &mut FieldOptions| { &mut m.weak }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<UninterpretedOption>>( + "uninterpreted_option", + |m: &FieldOptions| { &m.uninterpreted_option }, + |m: &mut FieldOptions| { &mut m.uninterpreted_option }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<FieldOptions>( + "FieldOptions", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static FieldOptions { + static instance: crate::rt::LazyV2<FieldOptions> = crate::rt::LazyV2::INIT; + instance.get(FieldOptions::new) + } +} + +impl crate::Clear for FieldOptions { + fn clear(&mut self) { + self.ctype = ::std::option::Option::None; + self.packed = ::std::option::Option::None; + self.jstype = ::std::option::Option::None; + self.lazy = ::std::option::Option::None; + self.deprecated = ::std::option::Option::None; + self.weak = ::std::option::Option::None; + self.uninterpreted_option.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for FieldOptions { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for FieldOptions { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(Clone,PartialEq,Eq,Debug,Hash)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub enum FieldOptions_CType { + STRING = 0, + CORD = 1, + STRING_PIECE = 2, +} + +impl crate::ProtobufEnum for FieldOptions_CType { + fn value(&self) -> i32 { + *self as i32 + } + + fn from_i32(value: i32) -> ::std::option::Option<FieldOptions_CType> { + match value { + 0 => ::std::option::Option::Some(FieldOptions_CType::STRING), + 1 => ::std::option::Option::Some(FieldOptions_CType::CORD), + 2 => ::std::option::Option::Some(FieldOptions_CType::STRING_PIECE), + _ => ::std::option::Option::None + } + } + + fn values() -> &'static [Self] { + static values: &'static [FieldOptions_CType] = &[ + FieldOptions_CType::STRING, + FieldOptions_CType::CORD, + FieldOptions_CType::STRING_PIECE, + ]; + values + } + + fn enum_descriptor_static() -> &'static crate::reflect::EnumDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::EnumDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + crate::reflect::EnumDescriptor::new_pb_name::<FieldOptions_CType>("FieldOptions.CType", file_descriptor_proto()) + }) + } +} + +impl ::std::marker::Copy for FieldOptions_CType { +} + +impl ::std::default::Default for FieldOptions_CType { + fn default() -> Self { + FieldOptions_CType::STRING + } +} + +impl crate::reflect::ProtobufValue for FieldOptions_CType { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Enum(crate::ProtobufEnum::descriptor(self)) + } +} + +#[derive(Clone,PartialEq,Eq,Debug,Hash)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub enum FieldOptions_JSType { + JS_NORMAL = 0, + JS_STRING = 1, + JS_NUMBER = 2, +} + +impl crate::ProtobufEnum for FieldOptions_JSType { + fn value(&self) -> i32 { + *self as i32 + } + + fn from_i32(value: i32) -> ::std::option::Option<FieldOptions_JSType> { + match value { + 0 => ::std::option::Option::Some(FieldOptions_JSType::JS_NORMAL), + 1 => ::std::option::Option::Some(FieldOptions_JSType::JS_STRING), + 2 => ::std::option::Option::Some(FieldOptions_JSType::JS_NUMBER), + _ => ::std::option::Option::None + } + } + + fn values() -> &'static [Self] { + static values: &'static [FieldOptions_JSType] = &[ + FieldOptions_JSType::JS_NORMAL, + FieldOptions_JSType::JS_STRING, + FieldOptions_JSType::JS_NUMBER, + ]; + values + } + + fn enum_descriptor_static() -> &'static crate::reflect::EnumDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::EnumDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + crate::reflect::EnumDescriptor::new_pb_name::<FieldOptions_JSType>("FieldOptions.JSType", file_descriptor_proto()) + }) + } +} + +impl ::std::marker::Copy for FieldOptions_JSType { +} + +impl ::std::default::Default for FieldOptions_JSType { + fn default() -> Self { + FieldOptions_JSType::JS_NORMAL + } +} + +impl crate::reflect::ProtobufValue for FieldOptions_JSType { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Enum(crate::ProtobufEnum::descriptor(self)) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct OneofOptions { + // message fields + pub uninterpreted_option: crate::RepeatedField<UninterpretedOption>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a OneofOptions { + fn default() -> &'a OneofOptions { + <OneofOptions as crate::Message>::default_instance() + } +} + +impl OneofOptions { + pub fn new() -> OneofOptions { + ::std::default::Default::default() + } + + // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + + + pub fn get_uninterpreted_option(&self) -> &[UninterpretedOption] { + &self.uninterpreted_option + } + pub fn clear_uninterpreted_option(&mut self) { + self.uninterpreted_option.clear(); + } + + // Param is passed by value, moved + pub fn set_uninterpreted_option(&mut self, v: crate::RepeatedField<UninterpretedOption>) { + self.uninterpreted_option = v; + } + + // Mutable pointer to the field. + pub fn mut_uninterpreted_option(&mut self) -> &mut crate::RepeatedField<UninterpretedOption> { + &mut self.uninterpreted_option + } + + // Take field + pub fn take_uninterpreted_option(&mut self) -> crate::RepeatedField<UninterpretedOption> { + ::std::mem::replace(&mut self.uninterpreted_option, crate::RepeatedField::new()) + } +} + +impl crate::Message for OneofOptions { + fn is_initialized(&self) -> bool { + for v in &self.uninterpreted_option { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 999 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.uninterpreted_option)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + for value in &self.uninterpreted_option { + let len = value.compute_size(); + my_size += 2 + crate::rt::compute_raw_varint32_size(len) + len; + }; + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + for v in &self.uninterpreted_option { + os.write_tag(999, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> OneofOptions { + OneofOptions::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<UninterpretedOption>>( + "uninterpreted_option", + |m: &OneofOptions| { &m.uninterpreted_option }, + |m: &mut OneofOptions| { &mut m.uninterpreted_option }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<OneofOptions>( + "OneofOptions", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static OneofOptions { + static instance: crate::rt::LazyV2<OneofOptions> = crate::rt::LazyV2::INIT; + instance.get(OneofOptions::new) + } +} + +impl crate::Clear for OneofOptions { + fn clear(&mut self) { + self.uninterpreted_option.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for OneofOptions { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for OneofOptions { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct EnumOptions { + // message fields + allow_alias: ::std::option::Option<bool>, + deprecated: ::std::option::Option<bool>, + pub uninterpreted_option: crate::RepeatedField<UninterpretedOption>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a EnumOptions { + fn default() -> &'a EnumOptions { + <EnumOptions as crate::Message>::default_instance() + } +} + +impl EnumOptions { + pub fn new() -> EnumOptions { + ::std::default::Default::default() + } + + // optional bool allow_alias = 2; + + + pub fn get_allow_alias(&self) -> bool { + self.allow_alias.unwrap_or(false) + } + pub fn clear_allow_alias(&mut self) { + self.allow_alias = ::std::option::Option::None; + } + + pub fn has_allow_alias(&self) -> bool { + self.allow_alias.is_some() + } + + // Param is passed by value, moved + pub fn set_allow_alias(&mut self, v: bool) { + self.allow_alias = ::std::option::Option::Some(v); + } + + // optional bool deprecated = 3; + + + pub fn get_deprecated(&self) -> bool { + self.deprecated.unwrap_or(false) + } + pub fn clear_deprecated(&mut self) { + self.deprecated = ::std::option::Option::None; + } + + pub fn has_deprecated(&self) -> bool { + self.deprecated.is_some() + } + + // Param is passed by value, moved + pub fn set_deprecated(&mut self, v: bool) { + self.deprecated = ::std::option::Option::Some(v); + } + + // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + + + pub fn get_uninterpreted_option(&self) -> &[UninterpretedOption] { + &self.uninterpreted_option + } + pub fn clear_uninterpreted_option(&mut self) { + self.uninterpreted_option.clear(); + } + + // Param is passed by value, moved + pub fn set_uninterpreted_option(&mut self, v: crate::RepeatedField<UninterpretedOption>) { + self.uninterpreted_option = v; + } + + // Mutable pointer to the field. + pub fn mut_uninterpreted_option(&mut self) -> &mut crate::RepeatedField<UninterpretedOption> { + &mut self.uninterpreted_option + } + + // Take field + pub fn take_uninterpreted_option(&mut self) -> crate::RepeatedField<UninterpretedOption> { + ::std::mem::replace(&mut self.uninterpreted_option, crate::RepeatedField::new()) + } +} + +impl crate::Message for EnumOptions { + fn is_initialized(&self) -> bool { + for v in &self.uninterpreted_option { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 2 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.allow_alias = ::std::option::Option::Some(tmp); + }, + 3 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.deprecated = ::std::option::Option::Some(tmp); + }, + 999 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.uninterpreted_option)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(v) = self.allow_alias { + my_size += 2; + } + if let Some(v) = self.deprecated { + my_size += 2; + } + for value in &self.uninterpreted_option { + let len = value.compute_size(); + my_size += 2 + crate::rt::compute_raw_varint32_size(len) + len; + }; + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(v) = self.allow_alias { + os.write_bool(2, v)?; + } + if let Some(v) = self.deprecated { + os.write_bool(3, v)?; + } + for v in &self.uninterpreted_option { + os.write_tag(999, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> EnumOptions { + EnumOptions::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "allow_alias", + |m: &EnumOptions| { &m.allow_alias }, + |m: &mut EnumOptions| { &mut m.allow_alias }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "deprecated", + |m: &EnumOptions| { &m.deprecated }, + |m: &mut EnumOptions| { &mut m.deprecated }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<UninterpretedOption>>( + "uninterpreted_option", + |m: &EnumOptions| { &m.uninterpreted_option }, + |m: &mut EnumOptions| { &mut m.uninterpreted_option }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<EnumOptions>( + "EnumOptions", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static EnumOptions { + static instance: crate::rt::LazyV2<EnumOptions> = crate::rt::LazyV2::INIT; + instance.get(EnumOptions::new) + } +} + +impl crate::Clear for EnumOptions { + fn clear(&mut self) { + self.allow_alias = ::std::option::Option::None; + self.deprecated = ::std::option::Option::None; + self.uninterpreted_option.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for EnumOptions { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for EnumOptions { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct EnumValueOptions { + // message fields + deprecated: ::std::option::Option<bool>, + pub uninterpreted_option: crate::RepeatedField<UninterpretedOption>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a EnumValueOptions { + fn default() -> &'a EnumValueOptions { + <EnumValueOptions as crate::Message>::default_instance() + } +} + +impl EnumValueOptions { + pub fn new() -> EnumValueOptions { + ::std::default::Default::default() + } + + // optional bool deprecated = 1; + + + pub fn get_deprecated(&self) -> bool { + self.deprecated.unwrap_or(false) + } + pub fn clear_deprecated(&mut self) { + self.deprecated = ::std::option::Option::None; + } + + pub fn has_deprecated(&self) -> bool { + self.deprecated.is_some() + } + + // Param is passed by value, moved + pub fn set_deprecated(&mut self, v: bool) { + self.deprecated = ::std::option::Option::Some(v); + } + + // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + + + pub fn get_uninterpreted_option(&self) -> &[UninterpretedOption] { + &self.uninterpreted_option + } + pub fn clear_uninterpreted_option(&mut self) { + self.uninterpreted_option.clear(); + } + + // Param is passed by value, moved + pub fn set_uninterpreted_option(&mut self, v: crate::RepeatedField<UninterpretedOption>) { + self.uninterpreted_option = v; + } + + // Mutable pointer to the field. + pub fn mut_uninterpreted_option(&mut self) -> &mut crate::RepeatedField<UninterpretedOption> { + &mut self.uninterpreted_option + } + + // Take field + pub fn take_uninterpreted_option(&mut self) -> crate::RepeatedField<UninterpretedOption> { + ::std::mem::replace(&mut self.uninterpreted_option, crate::RepeatedField::new()) + } +} + +impl crate::Message for EnumValueOptions { + fn is_initialized(&self) -> bool { + for v in &self.uninterpreted_option { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.deprecated = ::std::option::Option::Some(tmp); + }, + 999 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.uninterpreted_option)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(v) = self.deprecated { + my_size += 2; + } + for value in &self.uninterpreted_option { + let len = value.compute_size(); + my_size += 2 + crate::rt::compute_raw_varint32_size(len) + len; + }; + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(v) = self.deprecated { + os.write_bool(1, v)?; + } + for v in &self.uninterpreted_option { + os.write_tag(999, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> EnumValueOptions { + EnumValueOptions::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "deprecated", + |m: &EnumValueOptions| { &m.deprecated }, + |m: &mut EnumValueOptions| { &mut m.deprecated }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<UninterpretedOption>>( + "uninterpreted_option", + |m: &EnumValueOptions| { &m.uninterpreted_option }, + |m: &mut EnumValueOptions| { &mut m.uninterpreted_option }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<EnumValueOptions>( + "EnumValueOptions", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static EnumValueOptions { + static instance: crate::rt::LazyV2<EnumValueOptions> = crate::rt::LazyV2::INIT; + instance.get(EnumValueOptions::new) + } +} + +impl crate::Clear for EnumValueOptions { + fn clear(&mut self) { + self.deprecated = ::std::option::Option::None; + self.uninterpreted_option.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for EnumValueOptions { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for EnumValueOptions { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct ServiceOptions { + // message fields + deprecated: ::std::option::Option<bool>, + pub uninterpreted_option: crate::RepeatedField<UninterpretedOption>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a ServiceOptions { + fn default() -> &'a ServiceOptions { + <ServiceOptions as crate::Message>::default_instance() + } +} + +impl ServiceOptions { + pub fn new() -> ServiceOptions { + ::std::default::Default::default() + } + + // optional bool deprecated = 33; + + + pub fn get_deprecated(&self) -> bool { + self.deprecated.unwrap_or(false) + } + pub fn clear_deprecated(&mut self) { + self.deprecated = ::std::option::Option::None; + } + + pub fn has_deprecated(&self) -> bool { + self.deprecated.is_some() + } + + // Param is passed by value, moved + pub fn set_deprecated(&mut self, v: bool) { + self.deprecated = ::std::option::Option::Some(v); + } + + // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + + + pub fn get_uninterpreted_option(&self) -> &[UninterpretedOption] { + &self.uninterpreted_option + } + pub fn clear_uninterpreted_option(&mut self) { + self.uninterpreted_option.clear(); + } + + // Param is passed by value, moved + pub fn set_uninterpreted_option(&mut self, v: crate::RepeatedField<UninterpretedOption>) { + self.uninterpreted_option = v; + } + + // Mutable pointer to the field. + pub fn mut_uninterpreted_option(&mut self) -> &mut crate::RepeatedField<UninterpretedOption> { + &mut self.uninterpreted_option + } + + // Take field + pub fn take_uninterpreted_option(&mut self) -> crate::RepeatedField<UninterpretedOption> { + ::std::mem::replace(&mut self.uninterpreted_option, crate::RepeatedField::new()) + } +} + +impl crate::Message for ServiceOptions { + fn is_initialized(&self) -> bool { + for v in &self.uninterpreted_option { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 33 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.deprecated = ::std::option::Option::Some(tmp); + }, + 999 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.uninterpreted_option)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(v) = self.deprecated { + my_size += 3; + } + for value in &self.uninterpreted_option { + let len = value.compute_size(); + my_size += 2 + crate::rt::compute_raw_varint32_size(len) + len; + }; + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(v) = self.deprecated { + os.write_bool(33, v)?; + } + for v in &self.uninterpreted_option { + os.write_tag(999, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> ServiceOptions { + ServiceOptions::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "deprecated", + |m: &ServiceOptions| { &m.deprecated }, + |m: &mut ServiceOptions| { &mut m.deprecated }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<UninterpretedOption>>( + "uninterpreted_option", + |m: &ServiceOptions| { &m.uninterpreted_option }, + |m: &mut ServiceOptions| { &mut m.uninterpreted_option }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<ServiceOptions>( + "ServiceOptions", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static ServiceOptions { + static instance: crate::rt::LazyV2<ServiceOptions> = crate::rt::LazyV2::INIT; + instance.get(ServiceOptions::new) + } +} + +impl crate::Clear for ServiceOptions { + fn clear(&mut self) { + self.deprecated = ::std::option::Option::None; + self.uninterpreted_option.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for ServiceOptions { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for ServiceOptions { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct MethodOptions { + // message fields + deprecated: ::std::option::Option<bool>, + idempotency_level: ::std::option::Option<MethodOptions_IdempotencyLevel>, + pub uninterpreted_option: crate::RepeatedField<UninterpretedOption>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a MethodOptions { + fn default() -> &'a MethodOptions { + <MethodOptions as crate::Message>::default_instance() + } +} + +impl MethodOptions { + pub fn new() -> MethodOptions { + ::std::default::Default::default() + } + + // optional bool deprecated = 33; + + + pub fn get_deprecated(&self) -> bool { + self.deprecated.unwrap_or(false) + } + pub fn clear_deprecated(&mut self) { + self.deprecated = ::std::option::Option::None; + } + + pub fn has_deprecated(&self) -> bool { + self.deprecated.is_some() + } + + // Param is passed by value, moved + pub fn set_deprecated(&mut self, v: bool) { + self.deprecated = ::std::option::Option::Some(v); + } + + // optional .google.protobuf.MethodOptions.IdempotencyLevel idempotency_level = 34; + + + pub fn get_idempotency_level(&self) -> MethodOptions_IdempotencyLevel { + self.idempotency_level.unwrap_or(MethodOptions_IdempotencyLevel::IDEMPOTENCY_UNKNOWN) + } + pub fn clear_idempotency_level(&mut self) { + self.idempotency_level = ::std::option::Option::None; + } + + pub fn has_idempotency_level(&self) -> bool { + self.idempotency_level.is_some() + } + + // Param is passed by value, moved + pub fn set_idempotency_level(&mut self, v: MethodOptions_IdempotencyLevel) { + self.idempotency_level = ::std::option::Option::Some(v); + } + + // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999; + + + pub fn get_uninterpreted_option(&self) -> &[UninterpretedOption] { + &self.uninterpreted_option + } + pub fn clear_uninterpreted_option(&mut self) { + self.uninterpreted_option.clear(); + } + + // Param is passed by value, moved + pub fn set_uninterpreted_option(&mut self, v: crate::RepeatedField<UninterpretedOption>) { + self.uninterpreted_option = v; + } + + // Mutable pointer to the field. + pub fn mut_uninterpreted_option(&mut self) -> &mut crate::RepeatedField<UninterpretedOption> { + &mut self.uninterpreted_option + } + + // Take field + pub fn take_uninterpreted_option(&mut self) -> crate::RepeatedField<UninterpretedOption> { + ::std::mem::replace(&mut self.uninterpreted_option, crate::RepeatedField::new()) + } +} + +impl crate::Message for MethodOptions { + fn is_initialized(&self) -> bool { + for v in &self.uninterpreted_option { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 33 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.deprecated = ::std::option::Option::Some(tmp); + }, + 34 => { + crate::rt::read_proto2_enum_with_unknown_fields_into(wire_type, is, &mut self.idempotency_level, 34, &mut self.unknown_fields)? + }, + 999 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.uninterpreted_option)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(v) = self.deprecated { + my_size += 3; + } + if let Some(v) = self.idempotency_level { + my_size += crate::rt::enum_size(34, v); + } + for value in &self.uninterpreted_option { + let len = value.compute_size(); + my_size += 2 + crate::rt::compute_raw_varint32_size(len) + len; + }; + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(v) = self.deprecated { + os.write_bool(33, v)?; + } + if let Some(v) = self.idempotency_level { + os.write_enum(34, crate::ProtobufEnum::value(&v))?; + } + for v in &self.uninterpreted_option { + os.write_tag(999, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> MethodOptions { + MethodOptions::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "deprecated", + |m: &MethodOptions| { &m.deprecated }, + |m: &mut MethodOptions| { &mut m.deprecated }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeEnum<MethodOptions_IdempotencyLevel>>( + "idempotency_level", + |m: &MethodOptions| { &m.idempotency_level }, + |m: &mut MethodOptions| { &mut m.idempotency_level }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<UninterpretedOption>>( + "uninterpreted_option", + |m: &MethodOptions| { &m.uninterpreted_option }, + |m: &mut MethodOptions| { &mut m.uninterpreted_option }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<MethodOptions>( + "MethodOptions", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static MethodOptions { + static instance: crate::rt::LazyV2<MethodOptions> = crate::rt::LazyV2::INIT; + instance.get(MethodOptions::new) + } +} + +impl crate::Clear for MethodOptions { + fn clear(&mut self) { + self.deprecated = ::std::option::Option::None; + self.idempotency_level = ::std::option::Option::None; + self.uninterpreted_option.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for MethodOptions { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for MethodOptions { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(Clone,PartialEq,Eq,Debug,Hash)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub enum MethodOptions_IdempotencyLevel { + IDEMPOTENCY_UNKNOWN = 0, + NO_SIDE_EFFECTS = 1, + IDEMPOTENT = 2, +} + +impl crate::ProtobufEnum for MethodOptions_IdempotencyLevel { + fn value(&self) -> i32 { + *self as i32 + } + + fn from_i32(value: i32) -> ::std::option::Option<MethodOptions_IdempotencyLevel> { + match value { + 0 => ::std::option::Option::Some(MethodOptions_IdempotencyLevel::IDEMPOTENCY_UNKNOWN), + 1 => ::std::option::Option::Some(MethodOptions_IdempotencyLevel::NO_SIDE_EFFECTS), + 2 => ::std::option::Option::Some(MethodOptions_IdempotencyLevel::IDEMPOTENT), + _ => ::std::option::Option::None + } + } + + fn values() -> &'static [Self] { + static values: &'static [MethodOptions_IdempotencyLevel] = &[ + MethodOptions_IdempotencyLevel::IDEMPOTENCY_UNKNOWN, + MethodOptions_IdempotencyLevel::NO_SIDE_EFFECTS, + MethodOptions_IdempotencyLevel::IDEMPOTENT, + ]; + values + } + + fn enum_descriptor_static() -> &'static crate::reflect::EnumDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::EnumDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + crate::reflect::EnumDescriptor::new_pb_name::<MethodOptions_IdempotencyLevel>("MethodOptions.IdempotencyLevel", file_descriptor_proto()) + }) + } +} + +impl ::std::marker::Copy for MethodOptions_IdempotencyLevel { +} + +impl ::std::default::Default for MethodOptions_IdempotencyLevel { + fn default() -> Self { + MethodOptions_IdempotencyLevel::IDEMPOTENCY_UNKNOWN + } +} + +impl crate::reflect::ProtobufValue for MethodOptions_IdempotencyLevel { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Enum(crate::ProtobufEnum::descriptor(self)) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct UninterpretedOption { + // message fields + pub name: crate::RepeatedField<UninterpretedOption_NamePart>, + identifier_value: crate::SingularField<::std::string::String>, + positive_int_value: ::std::option::Option<u64>, + negative_int_value: ::std::option::Option<i64>, + double_value: ::std::option::Option<f64>, + string_value: crate::SingularField<::std::vec::Vec<u8>>, + aggregate_value: crate::SingularField<::std::string::String>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a UninterpretedOption { + fn default() -> &'a UninterpretedOption { + <UninterpretedOption as crate::Message>::default_instance() + } +} + +impl UninterpretedOption { + pub fn new() -> UninterpretedOption { + ::std::default::Default::default() + } + + // repeated .google.protobuf.UninterpretedOption.NamePart name = 2; + + + pub fn get_name(&self) -> &[UninterpretedOption_NamePart] { + &self.name + } + pub fn clear_name(&mut self) { + self.name.clear(); + } + + // Param is passed by value, moved + pub fn set_name(&mut self, v: crate::RepeatedField<UninterpretedOption_NamePart>) { + self.name = v; + } + + // Mutable pointer to the field. + pub fn mut_name(&mut self) -> &mut crate::RepeatedField<UninterpretedOption_NamePart> { + &mut self.name + } + + // Take field + pub fn take_name(&mut self) -> crate::RepeatedField<UninterpretedOption_NamePart> { + ::std::mem::replace(&mut self.name, crate::RepeatedField::new()) + } + + // optional string identifier_value = 3; + + + pub fn get_identifier_value(&self) -> &str { + match self.identifier_value.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_identifier_value(&mut self) { + self.identifier_value.clear(); + } + + pub fn has_identifier_value(&self) -> bool { + self.identifier_value.is_some() + } + + // Param is passed by value, moved + pub fn set_identifier_value(&mut self, v: ::std::string::String) { + self.identifier_value = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_identifier_value(&mut self) -> &mut ::std::string::String { + if self.identifier_value.is_none() { + self.identifier_value.set_default(); + } + self.identifier_value.as_mut().unwrap() + } + + // Take field + pub fn take_identifier_value(&mut self) -> ::std::string::String { + self.identifier_value.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional uint64 positive_int_value = 4; + + + pub fn get_positive_int_value(&self) -> u64 { + self.positive_int_value.unwrap_or(0) + } + pub fn clear_positive_int_value(&mut self) { + self.positive_int_value = ::std::option::Option::None; + } + + pub fn has_positive_int_value(&self) -> bool { + self.positive_int_value.is_some() + } + + // Param is passed by value, moved + pub fn set_positive_int_value(&mut self, v: u64) { + self.positive_int_value = ::std::option::Option::Some(v); + } + + // optional int64 negative_int_value = 5; + + + pub fn get_negative_int_value(&self) -> i64 { + self.negative_int_value.unwrap_or(0) + } + pub fn clear_negative_int_value(&mut self) { + self.negative_int_value = ::std::option::Option::None; + } + + pub fn has_negative_int_value(&self) -> bool { + self.negative_int_value.is_some() + } + + // Param is passed by value, moved + pub fn set_negative_int_value(&mut self, v: i64) { + self.negative_int_value = ::std::option::Option::Some(v); + } + + // optional double double_value = 6; + + + pub fn get_double_value(&self) -> f64 { + self.double_value.unwrap_or(0.) + } + pub fn clear_double_value(&mut self) { + self.double_value = ::std::option::Option::None; + } + + pub fn has_double_value(&self) -> bool { + self.double_value.is_some() + } + + // Param is passed by value, moved + pub fn set_double_value(&mut self, v: f64) { + self.double_value = ::std::option::Option::Some(v); + } + + // optional bytes string_value = 7; + + + pub fn get_string_value(&self) -> &[u8] { + match self.string_value.as_ref() { + Some(v) => &v, + None => &[], + } + } + pub fn clear_string_value(&mut self) { + self.string_value.clear(); + } + + pub fn has_string_value(&self) -> bool { + self.string_value.is_some() + } + + // Param is passed by value, moved + pub fn set_string_value(&mut self, v: ::std::vec::Vec<u8>) { + self.string_value = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_string_value(&mut self) -> &mut ::std::vec::Vec<u8> { + if self.string_value.is_none() { + self.string_value.set_default(); + } + self.string_value.as_mut().unwrap() + } + + // Take field + pub fn take_string_value(&mut self) -> ::std::vec::Vec<u8> { + self.string_value.take().unwrap_or_else(|| ::std::vec::Vec::new()) + } + + // optional string aggregate_value = 8; + + + pub fn get_aggregate_value(&self) -> &str { + match self.aggregate_value.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_aggregate_value(&mut self) { + self.aggregate_value.clear(); + } + + pub fn has_aggregate_value(&self) -> bool { + self.aggregate_value.is_some() + } + + // Param is passed by value, moved + pub fn set_aggregate_value(&mut self, v: ::std::string::String) { + self.aggregate_value = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_aggregate_value(&mut self) -> &mut ::std::string::String { + if self.aggregate_value.is_none() { + self.aggregate_value.set_default(); + } + self.aggregate_value.as_mut().unwrap() + } + + // Take field + pub fn take_aggregate_value(&mut self) -> ::std::string::String { + self.aggregate_value.take().unwrap_or_else(|| ::std::string::String::new()) + } +} + +impl crate::Message for UninterpretedOption { + fn is_initialized(&self) -> bool { + for v in &self.name { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 2 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.name)?; + }, + 3 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.identifier_value)?; + }, + 4 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_uint64()?; + self.positive_int_value = ::std::option::Option::Some(tmp); + }, + 5 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int64()?; + self.negative_int_value = ::std::option::Option::Some(tmp); + }, + 6 => { + if wire_type != crate::wire_format::WireTypeFixed64 { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_double()?; + self.double_value = ::std::option::Option::Some(tmp); + }, + 7 => { + crate::rt::read_singular_bytes_into(wire_type, is, &mut self.string_value)?; + }, + 8 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.aggregate_value)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + for value in &self.name { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + if let Some(ref v) = self.identifier_value.as_ref() { + my_size += crate::rt::string_size(3, &v); + } + if let Some(v) = self.positive_int_value { + my_size += crate::rt::value_size(4, v, crate::wire_format::WireTypeVarint); + } + if let Some(v) = self.negative_int_value { + my_size += crate::rt::value_size(5, v, crate::wire_format::WireTypeVarint); + } + if let Some(v) = self.double_value { + my_size += 9; + } + if let Some(ref v) = self.string_value.as_ref() { + my_size += crate::rt::bytes_size(7, &v); + } + if let Some(ref v) = self.aggregate_value.as_ref() { + my_size += crate::rt::string_size(8, &v); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + for v in &self.name { + os.write_tag(2, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + if let Some(ref v) = self.identifier_value.as_ref() { + os.write_string(3, &v)?; + } + if let Some(v) = self.positive_int_value { + os.write_uint64(4, v)?; + } + if let Some(v) = self.negative_int_value { + os.write_int64(5, v)?; + } + if let Some(v) = self.double_value { + os.write_double(6, v)?; + } + if let Some(ref v) = self.string_value.as_ref() { + os.write_bytes(7, &v)?; + } + if let Some(ref v) = self.aggregate_value.as_ref() { + os.write_string(8, &v)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> UninterpretedOption { + UninterpretedOption::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<UninterpretedOption_NamePart>>( + "name", + |m: &UninterpretedOption| { &m.name }, + |m: &mut UninterpretedOption| { &mut m.name }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "identifier_value", + |m: &UninterpretedOption| { &m.identifier_value }, + |m: &mut UninterpretedOption| { &mut m.identifier_value }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeUint64>( + "positive_int_value", + |m: &UninterpretedOption| { &m.positive_int_value }, + |m: &mut UninterpretedOption| { &mut m.positive_int_value }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeInt64>( + "negative_int_value", + |m: &UninterpretedOption| { &m.negative_int_value }, + |m: &mut UninterpretedOption| { &mut m.negative_int_value }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeDouble>( + "double_value", + |m: &UninterpretedOption| { &m.double_value }, + |m: &mut UninterpretedOption| { &mut m.double_value }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeBytes>( + "string_value", + |m: &UninterpretedOption| { &m.string_value }, + |m: &mut UninterpretedOption| { &mut m.string_value }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "aggregate_value", + |m: &UninterpretedOption| { &m.aggregate_value }, + |m: &mut UninterpretedOption| { &mut m.aggregate_value }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<UninterpretedOption>( + "UninterpretedOption", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static UninterpretedOption { + static instance: crate::rt::LazyV2<UninterpretedOption> = crate::rt::LazyV2::INIT; + instance.get(UninterpretedOption::new) + } +} + +impl crate::Clear for UninterpretedOption { + fn clear(&mut self) { + self.name.clear(); + self.identifier_value.clear(); + self.positive_int_value = ::std::option::Option::None; + self.negative_int_value = ::std::option::Option::None; + self.double_value = ::std::option::Option::None; + self.string_value.clear(); + self.aggregate_value.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for UninterpretedOption { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for UninterpretedOption { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct UninterpretedOption_NamePart { + // message fields + name_part: crate::SingularField<::std::string::String>, + is_extension: ::std::option::Option<bool>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a UninterpretedOption_NamePart { + fn default() -> &'a UninterpretedOption_NamePart { + <UninterpretedOption_NamePart as crate::Message>::default_instance() + } +} + +impl UninterpretedOption_NamePart { + pub fn new() -> UninterpretedOption_NamePart { + ::std::default::Default::default() + } + + // required string name_part = 1; + + + pub fn get_name_part(&self) -> &str { + match self.name_part.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_name_part(&mut self) { + self.name_part.clear(); + } + + pub fn has_name_part(&self) -> bool { + self.name_part.is_some() + } + + // Param is passed by value, moved + pub fn set_name_part(&mut self, v: ::std::string::String) { + self.name_part = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_name_part(&mut self) -> &mut ::std::string::String { + if self.name_part.is_none() { + self.name_part.set_default(); + } + self.name_part.as_mut().unwrap() + } + + // Take field + pub fn take_name_part(&mut self) -> ::std::string::String { + self.name_part.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // required bool is_extension = 2; + + + pub fn get_is_extension(&self) -> bool { + self.is_extension.unwrap_or(false) + } + pub fn clear_is_extension(&mut self) { + self.is_extension = ::std::option::Option::None; + } + + pub fn has_is_extension(&self) -> bool { + self.is_extension.is_some() + } + + // Param is passed by value, moved + pub fn set_is_extension(&mut self, v: bool) { + self.is_extension = ::std::option::Option::Some(v); + } +} + +impl crate::Message for UninterpretedOption_NamePart { + fn is_initialized(&self) -> bool { + if self.name_part.is_none() { + return false; + } + if self.is_extension.is_none() { + return false; + } + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.name_part)?; + }, + 2 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.is_extension = ::std::option::Option::Some(tmp); + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(ref v) = self.name_part.as_ref() { + my_size += crate::rt::string_size(1, &v); + } + if let Some(v) = self.is_extension { + my_size += 2; + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(ref v) = self.name_part.as_ref() { + os.write_string(1, &v)?; + } + if let Some(v) = self.is_extension { + os.write_bool(2, v)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> UninterpretedOption_NamePart { + UninterpretedOption_NamePart::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "name_part", + |m: &UninterpretedOption_NamePart| { &m.name_part }, + |m: &mut UninterpretedOption_NamePart| { &mut m.name_part }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeBool>( + "is_extension", + |m: &UninterpretedOption_NamePart| { &m.is_extension }, + |m: &mut UninterpretedOption_NamePart| { &mut m.is_extension }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<UninterpretedOption_NamePart>( + "UninterpretedOption.NamePart", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static UninterpretedOption_NamePart { + static instance: crate::rt::LazyV2<UninterpretedOption_NamePart> = crate::rt::LazyV2::INIT; + instance.get(UninterpretedOption_NamePart::new) + } +} + +impl crate::Clear for UninterpretedOption_NamePart { + fn clear(&mut self) { + self.name_part.clear(); + self.is_extension = ::std::option::Option::None; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for UninterpretedOption_NamePart { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for UninterpretedOption_NamePart { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct SourceCodeInfo { + // message fields + pub location: crate::RepeatedField<SourceCodeInfo_Location>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a SourceCodeInfo { + fn default() -> &'a SourceCodeInfo { + <SourceCodeInfo as crate::Message>::default_instance() + } +} + +impl SourceCodeInfo { + pub fn new() -> SourceCodeInfo { + ::std::default::Default::default() + } + + // repeated .google.protobuf.SourceCodeInfo.Location location = 1; + + + pub fn get_location(&self) -> &[SourceCodeInfo_Location] { + &self.location + } + pub fn clear_location(&mut self) { + self.location.clear(); + } + + // Param is passed by value, moved + pub fn set_location(&mut self, v: crate::RepeatedField<SourceCodeInfo_Location>) { + self.location = v; + } + + // Mutable pointer to the field. + pub fn mut_location(&mut self) -> &mut crate::RepeatedField<SourceCodeInfo_Location> { + &mut self.location + } + + // Take field + pub fn take_location(&mut self) -> crate::RepeatedField<SourceCodeInfo_Location> { + ::std::mem::replace(&mut self.location, crate::RepeatedField::new()) + } +} + +impl crate::Message for SourceCodeInfo { + fn is_initialized(&self) -> bool { + for v in &self.location { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.location)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + for value in &self.location { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + for v in &self.location { + os.write_tag(1, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> SourceCodeInfo { + SourceCodeInfo::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<SourceCodeInfo_Location>>( + "location", + |m: &SourceCodeInfo| { &m.location }, + |m: &mut SourceCodeInfo| { &mut m.location }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<SourceCodeInfo>( + "SourceCodeInfo", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static SourceCodeInfo { + static instance: crate::rt::LazyV2<SourceCodeInfo> = crate::rt::LazyV2::INIT; + instance.get(SourceCodeInfo::new) + } +} + +impl crate::Clear for SourceCodeInfo { + fn clear(&mut self) { + self.location.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for SourceCodeInfo { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for SourceCodeInfo { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct SourceCodeInfo_Location { + // message fields + pub path: ::std::vec::Vec<i32>, + pub span: ::std::vec::Vec<i32>, + leading_comments: crate::SingularField<::std::string::String>, + trailing_comments: crate::SingularField<::std::string::String>, + pub leading_detached_comments: crate::RepeatedField<::std::string::String>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a SourceCodeInfo_Location { + fn default() -> &'a SourceCodeInfo_Location { + <SourceCodeInfo_Location as crate::Message>::default_instance() + } +} + +impl SourceCodeInfo_Location { + pub fn new() -> SourceCodeInfo_Location { + ::std::default::Default::default() + } + + // repeated int32 path = 1; + + + pub fn get_path(&self) -> &[i32] { + &self.path + } + pub fn clear_path(&mut self) { + self.path.clear(); + } + + // Param is passed by value, moved + pub fn set_path(&mut self, v: ::std::vec::Vec<i32>) { + self.path = v; + } + + // Mutable pointer to the field. + pub fn mut_path(&mut self) -> &mut ::std::vec::Vec<i32> { + &mut self.path + } + + // Take field + pub fn take_path(&mut self) -> ::std::vec::Vec<i32> { + ::std::mem::replace(&mut self.path, ::std::vec::Vec::new()) + } + + // repeated int32 span = 2; + + + pub fn get_span(&self) -> &[i32] { + &self.span + } + pub fn clear_span(&mut self) { + self.span.clear(); + } + + // Param is passed by value, moved + pub fn set_span(&mut self, v: ::std::vec::Vec<i32>) { + self.span = v; + } + + // Mutable pointer to the field. + pub fn mut_span(&mut self) -> &mut ::std::vec::Vec<i32> { + &mut self.span + } + + // Take field + pub fn take_span(&mut self) -> ::std::vec::Vec<i32> { + ::std::mem::replace(&mut self.span, ::std::vec::Vec::new()) + } + + // optional string leading_comments = 3; + + + pub fn get_leading_comments(&self) -> &str { + match self.leading_comments.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_leading_comments(&mut self) { + self.leading_comments.clear(); + } + + pub fn has_leading_comments(&self) -> bool { + self.leading_comments.is_some() + } + + // Param is passed by value, moved + pub fn set_leading_comments(&mut self, v: ::std::string::String) { + self.leading_comments = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_leading_comments(&mut self) -> &mut ::std::string::String { + if self.leading_comments.is_none() { + self.leading_comments.set_default(); + } + self.leading_comments.as_mut().unwrap() + } + + // Take field + pub fn take_leading_comments(&mut self) -> ::std::string::String { + self.leading_comments.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional string trailing_comments = 4; + + + pub fn get_trailing_comments(&self) -> &str { + match self.trailing_comments.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_trailing_comments(&mut self) { + self.trailing_comments.clear(); + } + + pub fn has_trailing_comments(&self) -> bool { + self.trailing_comments.is_some() + } + + // Param is passed by value, moved + pub fn set_trailing_comments(&mut self, v: ::std::string::String) { + self.trailing_comments = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_trailing_comments(&mut self) -> &mut ::std::string::String { + if self.trailing_comments.is_none() { + self.trailing_comments.set_default(); + } + self.trailing_comments.as_mut().unwrap() + } + + // Take field + pub fn take_trailing_comments(&mut self) -> ::std::string::String { + self.trailing_comments.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // repeated string leading_detached_comments = 6; + + + pub fn get_leading_detached_comments(&self) -> &[::std::string::String] { + &self.leading_detached_comments + } + pub fn clear_leading_detached_comments(&mut self) { + self.leading_detached_comments.clear(); + } + + // Param is passed by value, moved + pub fn set_leading_detached_comments(&mut self, v: crate::RepeatedField<::std::string::String>) { + self.leading_detached_comments = v; + } + + // Mutable pointer to the field. + pub fn mut_leading_detached_comments(&mut self) -> &mut crate::RepeatedField<::std::string::String> { + &mut self.leading_detached_comments + } + + // Take field + pub fn take_leading_detached_comments(&mut self) -> crate::RepeatedField<::std::string::String> { + ::std::mem::replace(&mut self.leading_detached_comments, crate::RepeatedField::new()) + } +} + +impl crate::Message for SourceCodeInfo_Location { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_repeated_int32_into(wire_type, is, &mut self.path)?; + }, + 2 => { + crate::rt::read_repeated_int32_into(wire_type, is, &mut self.span)?; + }, + 3 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.leading_comments)?; + }, + 4 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.trailing_comments)?; + }, + 6 => { + crate::rt::read_repeated_string_into(wire_type, is, &mut self.leading_detached_comments)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if !self.path.is_empty() { + my_size += crate::rt::vec_packed_varint_size(1, &self.path); + } + if !self.span.is_empty() { + my_size += crate::rt::vec_packed_varint_size(2, &self.span); + } + if let Some(ref v) = self.leading_comments.as_ref() { + my_size += crate::rt::string_size(3, &v); + } + if let Some(ref v) = self.trailing_comments.as_ref() { + my_size += crate::rt::string_size(4, &v); + } + for value in &self.leading_detached_comments { + my_size += crate::rt::string_size(6, &value); + }; + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if !self.path.is_empty() { + os.write_tag(1, crate::wire_format::WireTypeLengthDelimited)?; + // TODO: Data size is computed again, it should be cached + os.write_raw_varint32(crate::rt::vec_packed_varint_data_size(&self.path))?; + for v in &self.path { + os.write_int32_no_tag(*v)?; + }; + } + if !self.span.is_empty() { + os.write_tag(2, crate::wire_format::WireTypeLengthDelimited)?; + // TODO: Data size is computed again, it should be cached + os.write_raw_varint32(crate::rt::vec_packed_varint_data_size(&self.span))?; + for v in &self.span { + os.write_int32_no_tag(*v)?; + }; + } + if let Some(ref v) = self.leading_comments.as_ref() { + os.write_string(3, &v)?; + } + if let Some(ref v) = self.trailing_comments.as_ref() { + os.write_string(4, &v)?; + } + for v in &self.leading_detached_comments { + os.write_string(6, &v)?; + }; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> SourceCodeInfo_Location { + SourceCodeInfo_Location::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_vec_accessor::<_, crate::types::ProtobufTypeInt32>( + "path", + |m: &SourceCodeInfo_Location| { &m.path }, + |m: &mut SourceCodeInfo_Location| { &mut m.path }, + )); + fields.push(crate::reflect::accessor::make_vec_accessor::<_, crate::types::ProtobufTypeInt32>( + "span", + |m: &SourceCodeInfo_Location| { &m.span }, + |m: &mut SourceCodeInfo_Location| { &mut m.span }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "leading_comments", + |m: &SourceCodeInfo_Location| { &m.leading_comments }, + |m: &mut SourceCodeInfo_Location| { &mut m.leading_comments }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "trailing_comments", + |m: &SourceCodeInfo_Location| { &m.trailing_comments }, + |m: &mut SourceCodeInfo_Location| { &mut m.trailing_comments }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeString>( + "leading_detached_comments", + |m: &SourceCodeInfo_Location| { &m.leading_detached_comments }, + |m: &mut SourceCodeInfo_Location| { &mut m.leading_detached_comments }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<SourceCodeInfo_Location>( + "SourceCodeInfo.Location", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static SourceCodeInfo_Location { + static instance: crate::rt::LazyV2<SourceCodeInfo_Location> = crate::rt::LazyV2::INIT; + instance.get(SourceCodeInfo_Location::new) + } +} + +impl crate::Clear for SourceCodeInfo_Location { + fn clear(&mut self) { + self.path.clear(); + self.span.clear(); + self.leading_comments.clear(); + self.trailing_comments.clear(); + self.leading_detached_comments.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for SourceCodeInfo_Location { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for SourceCodeInfo_Location { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct GeneratedCodeInfo { + // message fields + pub annotation: crate::RepeatedField<GeneratedCodeInfo_Annotation>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a GeneratedCodeInfo { + fn default() -> &'a GeneratedCodeInfo { + <GeneratedCodeInfo as crate::Message>::default_instance() + } +} + +impl GeneratedCodeInfo { + pub fn new() -> GeneratedCodeInfo { + ::std::default::Default::default() + } + + // repeated .google.protobuf.GeneratedCodeInfo.Annotation annotation = 1; + + + pub fn get_annotation(&self) -> &[GeneratedCodeInfo_Annotation] { + &self.annotation + } + pub fn clear_annotation(&mut self) { + self.annotation.clear(); + } + + // Param is passed by value, moved + pub fn set_annotation(&mut self, v: crate::RepeatedField<GeneratedCodeInfo_Annotation>) { + self.annotation = v; + } + + // Mutable pointer to the field. + pub fn mut_annotation(&mut self) -> &mut crate::RepeatedField<GeneratedCodeInfo_Annotation> { + &mut self.annotation + } + + // Take field + pub fn take_annotation(&mut self) -> crate::RepeatedField<GeneratedCodeInfo_Annotation> { + ::std::mem::replace(&mut self.annotation, crate::RepeatedField::new()) + } +} + +impl crate::Message for GeneratedCodeInfo { + fn is_initialized(&self) -> bool { + for v in &self.annotation { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.annotation)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + for value in &self.annotation { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + for v in &self.annotation { + os.write_tag(1, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> GeneratedCodeInfo { + GeneratedCodeInfo::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<GeneratedCodeInfo_Annotation>>( + "annotation", + |m: &GeneratedCodeInfo| { &m.annotation }, + |m: &mut GeneratedCodeInfo| { &mut m.annotation }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<GeneratedCodeInfo>( + "GeneratedCodeInfo", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static GeneratedCodeInfo { + static instance: crate::rt::LazyV2<GeneratedCodeInfo> = crate::rt::LazyV2::INIT; + instance.get(GeneratedCodeInfo::new) + } +} + +impl crate::Clear for GeneratedCodeInfo { + fn clear(&mut self) { + self.annotation.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for GeneratedCodeInfo { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for GeneratedCodeInfo { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct GeneratedCodeInfo_Annotation { + // message fields + pub path: ::std::vec::Vec<i32>, + source_file: crate::SingularField<::std::string::String>, + begin: ::std::option::Option<i32>, + end: ::std::option::Option<i32>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a GeneratedCodeInfo_Annotation { + fn default() -> &'a GeneratedCodeInfo_Annotation { + <GeneratedCodeInfo_Annotation as crate::Message>::default_instance() + } +} + +impl GeneratedCodeInfo_Annotation { + pub fn new() -> GeneratedCodeInfo_Annotation { + ::std::default::Default::default() + } + + // repeated int32 path = 1; + + + pub fn get_path(&self) -> &[i32] { + &self.path + } + pub fn clear_path(&mut self) { + self.path.clear(); + } + + // Param is passed by value, moved + pub fn set_path(&mut self, v: ::std::vec::Vec<i32>) { + self.path = v; + } + + // Mutable pointer to the field. + pub fn mut_path(&mut self) -> &mut ::std::vec::Vec<i32> { + &mut self.path + } + + // Take field + pub fn take_path(&mut self) -> ::std::vec::Vec<i32> { + ::std::mem::replace(&mut self.path, ::std::vec::Vec::new()) + } + + // optional string source_file = 2; + + + pub fn get_source_file(&self) -> &str { + match self.source_file.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_source_file(&mut self) { + self.source_file.clear(); + } + + pub fn has_source_file(&self) -> bool { + self.source_file.is_some() + } + + // Param is passed by value, moved + pub fn set_source_file(&mut self, v: ::std::string::String) { + self.source_file = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_source_file(&mut self) -> &mut ::std::string::String { + if self.source_file.is_none() { + self.source_file.set_default(); + } + self.source_file.as_mut().unwrap() + } + + // Take field + pub fn take_source_file(&mut self) -> ::std::string::String { + self.source_file.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional int32 begin = 3; + + + pub fn get_begin(&self) -> i32 { + self.begin.unwrap_or(0) + } + pub fn clear_begin(&mut self) { + self.begin = ::std::option::Option::None; + } + + pub fn has_begin(&self) -> bool { + self.begin.is_some() + } + + // Param is passed by value, moved + pub fn set_begin(&mut self, v: i32) { + self.begin = ::std::option::Option::Some(v); + } + + // optional int32 end = 4; + + + pub fn get_end(&self) -> i32 { + self.end.unwrap_or(0) + } + pub fn clear_end(&mut self) { + self.end = ::std::option::Option::None; + } + + pub fn has_end(&self) -> bool { + self.end.is_some() + } + + // Param is passed by value, moved + pub fn set_end(&mut self, v: i32) { + self.end = ::std::option::Option::Some(v); + } +} + +impl crate::Message for GeneratedCodeInfo_Annotation { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_repeated_int32_into(wire_type, is, &mut self.path)?; + }, + 2 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.source_file)?; + }, + 3 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int32()?; + self.begin = ::std::option::Option::Some(tmp); + }, + 4 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int32()?; + self.end = ::std::option::Option::Some(tmp); + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if !self.path.is_empty() { + my_size += crate::rt::vec_packed_varint_size(1, &self.path); + } + if let Some(ref v) = self.source_file.as_ref() { + my_size += crate::rt::string_size(2, &v); + } + if let Some(v) = self.begin { + my_size += crate::rt::value_size(3, v, crate::wire_format::WireTypeVarint); + } + if let Some(v) = self.end { + my_size += crate::rt::value_size(4, v, crate::wire_format::WireTypeVarint); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if !self.path.is_empty() { + os.write_tag(1, crate::wire_format::WireTypeLengthDelimited)?; + // TODO: Data size is computed again, it should be cached + os.write_raw_varint32(crate::rt::vec_packed_varint_data_size(&self.path))?; + for v in &self.path { + os.write_int32_no_tag(*v)?; + }; + } + if let Some(ref v) = self.source_file.as_ref() { + os.write_string(2, &v)?; + } + if let Some(v) = self.begin { + os.write_int32(3, v)?; + } + if let Some(v) = self.end { + os.write_int32(4, v)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> GeneratedCodeInfo_Annotation { + GeneratedCodeInfo_Annotation::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_vec_accessor::<_, crate::types::ProtobufTypeInt32>( + "path", + |m: &GeneratedCodeInfo_Annotation| { &m.path }, + |m: &mut GeneratedCodeInfo_Annotation| { &mut m.path }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "source_file", + |m: &GeneratedCodeInfo_Annotation| { &m.source_file }, + |m: &mut GeneratedCodeInfo_Annotation| { &mut m.source_file }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeInt32>( + "begin", + |m: &GeneratedCodeInfo_Annotation| { &m.begin }, + |m: &mut GeneratedCodeInfo_Annotation| { &mut m.begin }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeInt32>( + "end", + |m: &GeneratedCodeInfo_Annotation| { &m.end }, + |m: &mut GeneratedCodeInfo_Annotation| { &mut m.end }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<GeneratedCodeInfo_Annotation>( + "GeneratedCodeInfo.Annotation", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static GeneratedCodeInfo_Annotation { + static instance: crate::rt::LazyV2<GeneratedCodeInfo_Annotation> = crate::rt::LazyV2::INIT; + instance.get(GeneratedCodeInfo_Annotation::new) + } +} + +impl crate::Clear for GeneratedCodeInfo_Annotation { + fn clear(&mut self) { + self.path.clear(); + self.source_file.clear(); + self.begin = ::std::option::Option::None; + self.end = ::std::option::Option::None; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for GeneratedCodeInfo_Annotation { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for GeneratedCodeInfo_Annotation { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +static file_descriptor_proto_data: &'static [u8] = b"\ + \n\x20google/protobuf/descriptor.proto\x12\x0fgoogle.protobuf\"M\n\x11Fi\ + leDescriptorSet\x128\n\x04file\x18\x01\x20\x03(\x0b2$.google.protobuf.Fi\ + leDescriptorProtoR\x04file\"\xe4\x04\n\x13FileDescriptorProto\x12\x12\n\ + \x04name\x18\x01\x20\x01(\tR\x04name\x12\x18\n\x07package\x18\x02\x20\ + \x01(\tR\x07package\x12\x1e\n\ndependency\x18\x03\x20\x03(\tR\ndependenc\ + y\x12+\n\x11public_dependency\x18\n\x20\x03(\x05R\x10publicDependency\ + \x12'\n\x0fweak_dependency\x18\x0b\x20\x03(\x05R\x0eweakDependency\x12C\ + \n\x0cmessage_type\x18\x04\x20\x03(\x0b2\x20.google.protobuf.DescriptorP\ + rotoR\x0bmessageType\x12A\n\tenum_type\x18\x05\x20\x03(\x0b2$.google.pro\ + tobuf.EnumDescriptorProtoR\x08enumType\x12A\n\x07service\x18\x06\x20\x03\ + (\x0b2'.google.protobuf.ServiceDescriptorProtoR\x07service\x12C\n\texten\ + sion\x18\x07\x20\x03(\x0b2%.google.protobuf.FieldDescriptorProtoR\texten\ + sion\x126\n\x07options\x18\x08\x20\x01(\x0b2\x1c.google.protobuf.FileOpt\ + ionsR\x07options\x12I\n\x10source_code_info\x18\t\x20\x01(\x0b2\x1f.goog\ + le.protobuf.SourceCodeInfoR\x0esourceCodeInfo\x12\x16\n\x06syntax\x18\ + \x0c\x20\x01(\tR\x06syntax\"\xb9\x06\n\x0fDescriptorProto\x12\x12\n\x04n\ + ame\x18\x01\x20\x01(\tR\x04name\x12;\n\x05field\x18\x02\x20\x03(\x0b2%.g\ + oogle.protobuf.FieldDescriptorProtoR\x05field\x12C\n\textension\x18\x06\ + \x20\x03(\x0b2%.google.protobuf.FieldDescriptorProtoR\textension\x12A\n\ + \x0bnested_type\x18\x03\x20\x03(\x0b2\x20.google.protobuf.DescriptorProt\ + oR\nnestedType\x12A\n\tenum_type\x18\x04\x20\x03(\x0b2$.google.protobuf.\ + EnumDescriptorProtoR\x08enumType\x12X\n\x0fextension_range\x18\x05\x20\ + \x03(\x0b2/.google.protobuf.DescriptorProto.ExtensionRangeR\x0eextension\ + Range\x12D\n\noneof_decl\x18\x08\x20\x03(\x0b2%.google.protobuf.OneofDes\ + criptorProtoR\toneofDecl\x129\n\x07options\x18\x07\x20\x01(\x0b2\x1f.goo\ + gle.protobuf.MessageOptionsR\x07options\x12U\n\x0ereserved_range\x18\t\ + \x20\x03(\x0b2..google.protobuf.DescriptorProto.ReservedRangeR\rreserved\ + Range\x12#\n\rreserved_name\x18\n\x20\x03(\tR\x0creservedName\x1az\n\x0e\ + ExtensionRange\x12\x14\n\x05start\x18\x01\x20\x01(\x05R\x05start\x12\x10\ + \n\x03end\x18\x02\x20\x01(\x05R\x03end\x12@\n\x07options\x18\x03\x20\x01\ + (\x0b2&.google.protobuf.ExtensionRangeOptionsR\x07options\x1a7\n\rReserv\ + edRange\x12\x14\n\x05start\x18\x01\x20\x01(\x05R\x05start\x12\x10\n\x03e\ + nd\x18\x02\x20\x01(\x05R\x03end\"|\n\x15ExtensionRangeOptions\x12X\n\x14\ + uninterpreted_option\x18\xe7\x07\x20\x03(\x0b2$.google.protobuf.Uninterp\ + retedOptionR\x13uninterpretedOption*\t\x08\xe8\x07\x10\x80\x80\x80\x80\ + \x02\"\xc1\x06\n\x14FieldDescriptorProto\x12\x12\n\x04name\x18\x01\x20\ + \x01(\tR\x04name\x12\x16\n\x06number\x18\x03\x20\x01(\x05R\x06number\x12\ + A\n\x05label\x18\x04\x20\x01(\x0e2+.google.protobuf.FieldDescriptorProto\ + .LabelR\x05label\x12>\n\x04type\x18\x05\x20\x01(\x0e2*.google.protobuf.F\ + ieldDescriptorProto.TypeR\x04type\x12\x1b\n\ttype_name\x18\x06\x20\x01(\ + \tR\x08typeName\x12\x1a\n\x08extendee\x18\x02\x20\x01(\tR\x08extendee\ + \x12#\n\rdefault_value\x18\x07\x20\x01(\tR\x0cdefaultValue\x12\x1f\n\x0b\ + oneof_index\x18\t\x20\x01(\x05R\noneofIndex\x12\x1b\n\tjson_name\x18\n\ + \x20\x01(\tR\x08jsonName\x127\n\x07options\x18\x08\x20\x01(\x0b2\x1d.goo\ + gle.protobuf.FieldOptionsR\x07options\x12'\n\x0fproto3_optional\x18\x11\ + \x20\x01(\x08R\x0eproto3Optional\"\xb6\x02\n\x04Type\x12\x0f\n\x0bTYPE_D\ + OUBLE\x10\x01\x12\x0e\n\nTYPE_FLOAT\x10\x02\x12\x0e\n\nTYPE_INT64\x10\ + \x03\x12\x0f\n\x0bTYPE_UINT64\x10\x04\x12\x0e\n\nTYPE_INT32\x10\x05\x12\ + \x10\n\x0cTYPE_FIXED64\x10\x06\x12\x10\n\x0cTYPE_FIXED32\x10\x07\x12\r\n\ + \tTYPE_BOOL\x10\x08\x12\x0f\n\x0bTYPE_STRING\x10\t\x12\x0e\n\nTYPE_GROUP\ + \x10\n\x12\x10\n\x0cTYPE_MESSAGE\x10\x0b\x12\x0e\n\nTYPE_BYTES\x10\x0c\ + \x12\x0f\n\x0bTYPE_UINT32\x10\r\x12\r\n\tTYPE_ENUM\x10\x0e\x12\x11\n\rTY\ + PE_SFIXED32\x10\x0f\x12\x11\n\rTYPE_SFIXED64\x10\x10\x12\x0f\n\x0bTYPE_S\ + INT32\x10\x11\x12\x0f\n\x0bTYPE_SINT64\x10\x12\"C\n\x05Label\x12\x12\n\ + \x0eLABEL_OPTIONAL\x10\x01\x12\x12\n\x0eLABEL_REQUIRED\x10\x02\x12\x12\n\ + \x0eLABEL_REPEATED\x10\x03\"c\n\x14OneofDescriptorProto\x12\x12\n\x04nam\ + e\x18\x01\x20\x01(\tR\x04name\x127\n\x07options\x18\x02\x20\x01(\x0b2\ + \x1d.google.protobuf.OneofOptionsR\x07options\"\xe3\x02\n\x13EnumDescrip\ + torProto\x12\x12\n\x04name\x18\x01\x20\x01(\tR\x04name\x12?\n\x05value\ + \x18\x02\x20\x03(\x0b2).google.protobuf.EnumValueDescriptorProtoR\x05val\ + ue\x126\n\x07options\x18\x03\x20\x01(\x0b2\x1c.google.protobuf.EnumOptio\ + nsR\x07options\x12]\n\x0ereserved_range\x18\x04\x20\x03(\x0b26.google.pr\ + otobuf.EnumDescriptorProto.EnumReservedRangeR\rreservedRange\x12#\n\rres\ + erved_name\x18\x05\x20\x03(\tR\x0creservedName\x1a;\n\x11EnumReservedRan\ + ge\x12\x14\n\x05start\x18\x01\x20\x01(\x05R\x05start\x12\x10\n\x03end\ + \x18\x02\x20\x01(\x05R\x03end\"\x83\x01\n\x18EnumValueDescriptorProto\ + \x12\x12\n\x04name\x18\x01\x20\x01(\tR\x04name\x12\x16\n\x06number\x18\ + \x02\x20\x01(\x05R\x06number\x12;\n\x07options\x18\x03\x20\x01(\x0b2!.go\ + ogle.protobuf.EnumValueOptionsR\x07options\"\xa7\x01\n\x16ServiceDescrip\ + torProto\x12\x12\n\x04name\x18\x01\x20\x01(\tR\x04name\x12>\n\x06method\ + \x18\x02\x20\x03(\x0b2&.google.protobuf.MethodDescriptorProtoR\x06method\ + \x129\n\x07options\x18\x03\x20\x01(\x0b2\x1f.google.protobuf.ServiceOpti\ + onsR\x07options\"\x89\x02\n\x15MethodDescriptorProto\x12\x12\n\x04name\ + \x18\x01\x20\x01(\tR\x04name\x12\x1d\n\ninput_type\x18\x02\x20\x01(\tR\t\ + inputType\x12\x1f\n\x0boutput_type\x18\x03\x20\x01(\tR\noutputType\x128\ + \n\x07options\x18\x04\x20\x01(\x0b2\x1e.google.protobuf.MethodOptionsR\ + \x07options\x120\n\x10client_streaming\x18\x05\x20\x01(\x08:\x05falseR\ + \x0fclientStreaming\x120\n\x10server_streaming\x18\x06\x20\x01(\x08:\x05\ + falseR\x0fserverStreaming\"\x91\t\n\x0bFileOptions\x12!\n\x0cjava_packag\ + e\x18\x01\x20\x01(\tR\x0bjavaPackage\x120\n\x14java_outer_classname\x18\ + \x08\x20\x01(\tR\x12javaOuterClassname\x125\n\x13java_multiple_files\x18\ + \n\x20\x01(\x08:\x05falseR\x11javaMultipleFiles\x12D\n\x1djava_generate_\ + equals_and_hash\x18\x14\x20\x01(\x08R\x19javaGenerateEqualsAndHashB\x02\ + \x18\x01\x12:\n\x16java_string_check_utf8\x18\x1b\x20\x01(\x08:\x05false\ + R\x13javaStringCheckUtf8\x12S\n\x0coptimize_for\x18\t\x20\x01(\x0e2).goo\ + gle.protobuf.FileOptions.OptimizeMode:\x05SPEEDR\x0boptimizeFor\x12\x1d\ + \n\ngo_package\x18\x0b\x20\x01(\tR\tgoPackage\x125\n\x13cc_generic_servi\ + ces\x18\x10\x20\x01(\x08:\x05falseR\x11ccGenericServices\x129\n\x15java_\ + generic_services\x18\x11\x20\x01(\x08:\x05falseR\x13javaGenericServices\ + \x125\n\x13py_generic_services\x18\x12\x20\x01(\x08:\x05falseR\x11pyGene\ + ricServices\x127\n\x14php_generic_services\x18*\x20\x01(\x08:\x05falseR\ + \x12phpGenericServices\x12%\n\ndeprecated\x18\x17\x20\x01(\x08:\x05false\ + R\ndeprecated\x12.\n\x10cc_enable_arenas\x18\x1f\x20\x01(\x08:\x04trueR\ + \x0eccEnableArenas\x12*\n\x11objc_class_prefix\x18$\x20\x01(\tR\x0fobjcC\ + lassPrefix\x12)\n\x10csharp_namespace\x18%\x20\x01(\tR\x0fcsharpNamespac\ + e\x12!\n\x0cswift_prefix\x18'\x20\x01(\tR\x0bswiftPrefix\x12(\n\x10php_c\ + lass_prefix\x18(\x20\x01(\tR\x0ephpClassPrefix\x12#\n\rphp_namespace\x18\ + )\x20\x01(\tR\x0cphpNamespace\x124\n\x16php_metadata_namespace\x18,\x20\ + \x01(\tR\x14phpMetadataNamespace\x12!\n\x0cruby_package\x18-\x20\x01(\tR\ + \x0brubyPackage\x12X\n\x14uninterpreted_option\x18\xe7\x07\x20\x03(\x0b2\ + $.google.protobuf.UninterpretedOptionR\x13uninterpretedOption\":\n\x0cOp\ + timizeMode\x12\t\n\x05SPEED\x10\x01\x12\r\n\tCODE_SIZE\x10\x02\x12\x10\n\ + \x0cLITE_RUNTIME\x10\x03*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02J\x04\x08\ + &\x10'\"\xd1\x02\n\x0eMessageOptions\x12<\n\x17message_set_wire_format\ + \x18\x01\x20\x01(\x08:\x05falseR\x14messageSetWireFormat\x12L\n\x1fno_st\ + andard_descriptor_accessor\x18\x02\x20\x01(\x08:\x05falseR\x1cnoStandard\ + DescriptorAccessor\x12%\n\ndeprecated\x18\x03\x20\x01(\x08:\x05falseR\nd\ + eprecated\x12\x1b\n\tmap_entry\x18\x07\x20\x01(\x08R\x08mapEntry\x12X\n\ + \x14uninterpreted_option\x18\xe7\x07\x20\x03(\x0b2$.google.protobuf.Unin\ + terpretedOptionR\x13uninterpretedOption*\t\x08\xe8\x07\x10\x80\x80\x80\ + \x80\x02J\x04\x08\x08\x10\tJ\x04\x08\t\x10\n\"\xe2\x03\n\x0cFieldOptions\ + \x12A\n\x05ctype\x18\x01\x20\x01(\x0e2#.google.protobuf.FieldOptions.CTy\ + pe:\x06STRINGR\x05ctype\x12\x16\n\x06packed\x18\x02\x20\x01(\x08R\x06pac\ + ked\x12G\n\x06jstype\x18\x06\x20\x01(\x0e2$.google.protobuf.FieldOptions\ + .JSType:\tJS_NORMALR\x06jstype\x12\x19\n\x04lazy\x18\x05\x20\x01(\x08:\ + \x05falseR\x04lazy\x12%\n\ndeprecated\x18\x03\x20\x01(\x08:\x05falseR\nd\ + eprecated\x12\x19\n\x04weak\x18\n\x20\x01(\x08:\x05falseR\x04weak\x12X\n\ + \x14uninterpreted_option\x18\xe7\x07\x20\x03(\x0b2$.google.protobuf.Unin\ + terpretedOptionR\x13uninterpretedOption\"/\n\x05CType\x12\n\n\x06STRING\ + \x10\0\x12\x08\n\x04CORD\x10\x01\x12\x10\n\x0cSTRING_PIECE\x10\x02\"5\n\ + \x06JSType\x12\r\n\tJS_NORMAL\x10\0\x12\r\n\tJS_STRING\x10\x01\x12\r\n\t\ + JS_NUMBER\x10\x02*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02J\x04\x08\x04\ + \x10\x05\"s\n\x0cOneofOptions\x12X\n\x14uninterpreted_option\x18\xe7\x07\ + \x20\x03(\x0b2$.google.protobuf.UninterpretedOptionR\x13uninterpretedOpt\ + ion*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"\xc0\x01\n\x0bEnumOptions\ + \x12\x1f\n\x0ballow_alias\x18\x02\x20\x01(\x08R\nallowAlias\x12%\n\ndepr\ + ecated\x18\x03\x20\x01(\x08:\x05falseR\ndeprecated\x12X\n\x14uninterpret\ + ed_option\x18\xe7\x07\x20\x03(\x0b2$.google.protobuf.UninterpretedOption\ + R\x13uninterpretedOption*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02J\x04\x08\ + \x05\x10\x06\"\x9e\x01\n\x10EnumValueOptions\x12%\n\ndeprecated\x18\x01\ + \x20\x01(\x08:\x05falseR\ndeprecated\x12X\n\x14uninterpreted_option\x18\ + \xe7\x07\x20\x03(\x0b2$.google.protobuf.UninterpretedOptionR\x13uninterp\ + retedOption*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"\x9c\x01\n\x0eServic\ + eOptions\x12%\n\ndeprecated\x18!\x20\x01(\x08:\x05falseR\ndeprecated\x12\ + X\n\x14uninterpreted_option\x18\xe7\x07\x20\x03(\x0b2$.google.protobuf.U\ + ninterpretedOptionR\x13uninterpretedOption*\t\x08\xe8\x07\x10\x80\x80\ + \x80\x80\x02\"\xe0\x02\n\rMethodOptions\x12%\n\ndeprecated\x18!\x20\x01(\ + \x08:\x05falseR\ndeprecated\x12q\n\x11idempotency_level\x18\"\x20\x01(\ + \x0e2/.google.protobuf.MethodOptions.IdempotencyLevel:\x13IDEMPOTENCY_UN\ + KNOWNR\x10idempotencyLevel\x12X\n\x14uninterpreted_option\x18\xe7\x07\ + \x20\x03(\x0b2$.google.protobuf.UninterpretedOptionR\x13uninterpretedOpt\ + ion\"P\n\x10IdempotencyLevel\x12\x17\n\x13IDEMPOTENCY_UNKNOWN\x10\0\x12\ + \x13\n\x0fNO_SIDE_EFFECTS\x10\x01\x12\x0e\n\nIDEMPOTENT\x10\x02*\t\x08\ + \xe8\x07\x10\x80\x80\x80\x80\x02\"\x9a\x03\n\x13UninterpretedOption\x12A\ + \n\x04name\x18\x02\x20\x03(\x0b2-.google.protobuf.UninterpretedOption.Na\ + mePartR\x04name\x12)\n\x10identifier_value\x18\x03\x20\x01(\tR\x0fidenti\ + fierValue\x12,\n\x12positive_int_value\x18\x04\x20\x01(\x04R\x10positive\ + IntValue\x12,\n\x12negative_int_value\x18\x05\x20\x01(\x03R\x10negativeI\ + ntValue\x12!\n\x0cdouble_value\x18\x06\x20\x01(\x01R\x0bdoubleValue\x12!\ + \n\x0cstring_value\x18\x07\x20\x01(\x0cR\x0bstringValue\x12'\n\x0faggreg\ + ate_value\x18\x08\x20\x01(\tR\x0eaggregateValue\x1aJ\n\x08NamePart\x12\ + \x1b\n\tname_part\x18\x01\x20\x02(\tR\x08namePart\x12!\n\x0cis_extension\ + \x18\x02\x20\x02(\x08R\x0bisExtension\"\xa7\x02\n\x0eSourceCodeInfo\x12D\ + \n\x08location\x18\x01\x20\x03(\x0b2(.google.protobuf.SourceCodeInfo.Loc\ + ationR\x08location\x1a\xce\x01\n\x08Location\x12\x16\n\x04path\x18\x01\ + \x20\x03(\x05R\x04pathB\x02\x10\x01\x12\x16\n\x04span\x18\x02\x20\x03(\ + \x05R\x04spanB\x02\x10\x01\x12)\n\x10leading_comments\x18\x03\x20\x01(\t\ + R\x0fleadingComments\x12+\n\x11trailing_comments\x18\x04\x20\x01(\tR\x10\ + trailingComments\x12:\n\x19leading_detached_comments\x18\x06\x20\x03(\tR\ + \x17leadingDetachedComments\"\xd1\x01\n\x11GeneratedCodeInfo\x12M\n\nann\ + otation\x18\x01\x20\x03(\x0b2-.google.protobuf.GeneratedCodeInfo.Annotat\ + ionR\nannotation\x1am\n\nAnnotation\x12\x16\n\x04path\x18\x01\x20\x03(\ + \x05R\x04pathB\x02\x10\x01\x12\x1f\n\x0bsource_file\x18\x02\x20\x01(\tR\ + \nsourceFile\x12\x14\n\x05begin\x18\x03\x20\x01(\x05R\x05begin\x12\x10\n\ + \x03end\x18\x04\x20\x01(\x05R\x03endB~\n\x13com.google.protobufB\x10Desc\ + riptorProtosH\x01Z-google.golang.org/protobuf/types/descriptorpb\xf8\x01\ + \x01\xa2\x02\x03GPB\xaa\x02\x1aGoogle.Protobuf.ReflectionJ\xbc\xc8\x02\n\ + \x07\x12\x05'\0\x8c\x07\x01\n\xaa\x0f\n\x01\x0c\x12\x03'\0\x122\xc1\x0c\ + \x20Protocol\x20Buffers\x20-\x20Google's\x20data\x20interchange\x20forma\ + t\n\x20Copyright\x202008\x20Google\x20Inc.\x20\x20All\x20rights\x20reser\ + ved.\n\x20https://developers.google.com/protocol-buffers/\n\n\x20Redistr\ + ibution\x20and\x20use\x20in\x20source\x20and\x20binary\x20forms,\x20with\ + \x20or\x20without\n\x20modification,\x20are\x20permitted\x20provided\x20\ + that\x20the\x20following\x20conditions\x20are\n\x20met:\n\n\x20\x20\x20\ + \x20\x20*\x20Redistributions\x20of\x20source\x20code\x20must\x20retain\ + \x20the\x20above\x20copyright\n\x20notice,\x20this\x20list\x20of\x20cond\ + itions\x20and\x20the\x20following\x20disclaimer.\n\x20\x20\x20\x20\x20*\ + \x20Redistributions\x20in\x20binary\x20form\x20must\x20reproduce\x20the\ + \x20above\n\x20copyright\x20notice,\x20this\x20list\x20of\x20conditions\ + \x20and\x20the\x20following\x20disclaimer\n\x20in\x20the\x20documentatio\ + n\x20and/or\x20other\x20materials\x20provided\x20with\x20the\n\x20distri\ + bution.\n\x20\x20\x20\x20\x20*\x20Neither\x20the\x20name\x20of\x20Google\ + \x20Inc.\x20nor\x20the\x20names\x20of\x20its\n\x20contributors\x20may\ + \x20be\x20used\x20to\x20endorse\x20or\x20promote\x20products\x20derived\ + \x20from\n\x20this\x20software\x20without\x20specific\x20prior\x20writte\ + n\x20permission.\n\n\x20THIS\x20SOFTWARE\x20IS\x20PROVIDED\x20BY\x20THE\ + \x20COPYRIGHT\x20HOLDERS\x20AND\x20CONTRIBUTORS\n\x20\"AS\x20IS\"\x20AND\ + \x20ANY\x20EXPRESS\x20OR\x20IMPLIED\x20WARRANTIES,\x20INCLUDING,\x20BUT\ + \x20NOT\n\x20LIMITED\x20TO,\x20THE\x20IMPLIED\x20WARRANTIES\x20OF\x20MER\ + CHANTABILITY\x20AND\x20FITNESS\x20FOR\n\x20A\x20PARTICULAR\x20PURPOSE\ + \x20ARE\x20DISCLAIMED.\x20IN\x20NO\x20EVENT\x20SHALL\x20THE\x20COPYRIGHT\ + \n\x20OWNER\x20OR\x20CONTRIBUTORS\x20BE\x20LIABLE\x20FOR\x20ANY\x20DIREC\ + T,\x20INDIRECT,\x20INCIDENTAL,\n\x20SPECIAL,\x20EXEMPLARY,\x20OR\x20CONS\ + EQUENTIAL\x20DAMAGES\x20(INCLUDING,\x20BUT\x20NOT\n\x20LIMITED\x20TO,\ + \x20PROCUREMENT\x20OF\x20SUBSTITUTE\x20GOODS\x20OR\x20SERVICES;\x20LOSS\ + \x20OF\x20USE,\n\x20DATA,\x20OR\x20PROFITS;\x20OR\x20BUSINESS\x20INTERRU\ + PTION)\x20HOWEVER\x20CAUSED\x20AND\x20ON\x20ANY\n\x20THEORY\x20OF\x20LIA\ + BILITY,\x20WHETHER\x20IN\x20CONTRACT,\x20STRICT\x20LIABILITY,\x20OR\x20T\ + ORT\n\x20(INCLUDING\x20NEGLIGENCE\x20OR\x20OTHERWISE)\x20ARISING\x20IN\ + \x20ANY\x20WAY\x20OUT\x20OF\x20THE\x20USE\n\x20OF\x20THIS\x20SOFTWARE,\ + \x20EVEN\x20IF\x20ADVISED\x20OF\x20THE\x20POSSIBILITY\x20OF\x20SUCH\x20D\ + AMAGE.\n2\xdb\x02\x20Author:\x20kenton@google.com\x20(Kenton\x20Varda)\n\ + \x20\x20Based\x20on\x20original\x20Protocol\x20Buffers\x20design\x20by\n\ + \x20\x20Sanjay\x20Ghemawat,\x20Jeff\x20Dean,\x20and\x20others.\n\n\x20Th\ + e\x20messages\x20in\x20this\x20file\x20describe\x20the\x20definitions\ + \x20found\x20in\x20.proto\x20files.\n\x20A\x20valid\x20.proto\x20file\ + \x20can\x20be\x20translated\x20directly\x20to\x20a\x20FileDescriptorProt\ + o\n\x20without\x20any\x20other\x20information\x20(e.g.\x20without\x20rea\ + ding\x20its\x20imports).\n\n\x08\n\x01\x02\x12\x03)\0\x18\n\x08\n\x01\ + \x08\x12\x03+\0D\n\t\n\x02\x08\x0b\x12\x03+\0D\n\x08\n\x01\x08\x12\x03,\ + \0,\n\t\n\x02\x08\x01\x12\x03,\0,\n\x08\n\x01\x08\x12\x03-\01\n\t\n\x02\ + \x08\x08\x12\x03-\01\n\x08\n\x01\x08\x12\x03.\07\n\t\n\x02\x08%\x12\x03.\ + \07\n\x08\n\x01\x08\x12\x03/\0!\n\t\n\x02\x08$\x12\x03/\0!\n\x08\n\x01\ + \x08\x12\x030\0\x1f\n\t\n\x02\x08\x1f\x12\x030\0\x1f\n\x08\n\x01\x08\x12\ + \x034\0\x1c\n\x7f\n\x02\x08\t\x12\x034\0\x1c\x1at\x20descriptor.proto\ + \x20must\x20be\x20optimized\x20for\x20speed\x20because\x20reflection-bas\ + ed\n\x20algorithms\x20don't\x20work\x20during\x20bootstrapping.\n\nj\n\ + \x02\x04\0\x12\x048\0:\x01\x1a^\x20The\x20protocol\x20compiler\x20can\ + \x20output\x20a\x20FileDescriptorSet\x20containing\x20the\x20.proto\n\ + \x20files\x20it\x20parses.\n\n\n\n\x03\x04\0\x01\x12\x038\x08\x19\n\x0b\ + \n\x04\x04\0\x02\0\x12\x039\x02(\n\x0c\n\x05\x04\0\x02\0\x04\x12\x039\ + \x02\n\n\x0c\n\x05\x04\0\x02\0\x06\x12\x039\x0b\x1e\n\x0c\n\x05\x04\0\ + \x02\0\x01\x12\x039\x1f#\n\x0c\n\x05\x04\0\x02\0\x03\x12\x039&'\n/\n\x02\ + \x04\x01\x12\x04=\0Z\x01\x1a#\x20Describes\x20a\x20complete\x20.proto\ + \x20file.\n\n\n\n\x03\x04\x01\x01\x12\x03=\x08\x1b\n9\n\x04\x04\x01\x02\ + \0\x12\x03>\x02\x1b\",\x20file\x20name,\x20relative\x20to\x20root\x20of\ + \x20source\x20tree\n\n\x0c\n\x05\x04\x01\x02\0\x04\x12\x03>\x02\n\n\x0c\ + \n\x05\x04\x01\x02\0\x05\x12\x03>\x0b\x11\n\x0c\n\x05\x04\x01\x02\0\x01\ + \x12\x03>\x12\x16\n\x0c\n\x05\x04\x01\x02\0\x03\x12\x03>\x19\x1a\n*\n\ + \x04\x04\x01\x02\x01\x12\x03?\x02\x1e\"\x1d\x20e.g.\x20\"foo\",\x20\"foo\ + .bar\",\x20etc.\n\n\x0c\n\x05\x04\x01\x02\x01\x04\x12\x03?\x02\n\n\x0c\n\ + \x05\x04\x01\x02\x01\x05\x12\x03?\x0b\x11\n\x0c\n\x05\x04\x01\x02\x01\ + \x01\x12\x03?\x12\x19\n\x0c\n\x05\x04\x01\x02\x01\x03\x12\x03?\x1c\x1d\n\ + 4\n\x04\x04\x01\x02\x02\x12\x03B\x02!\x1a'\x20Names\x20of\x20files\x20im\ + ported\x20by\x20this\x20file.\n\n\x0c\n\x05\x04\x01\x02\x02\x04\x12\x03B\ + \x02\n\n\x0c\n\x05\x04\x01\x02\x02\x05\x12\x03B\x0b\x11\n\x0c\n\x05\x04\ + \x01\x02\x02\x01\x12\x03B\x12\x1c\n\x0c\n\x05\x04\x01\x02\x02\x03\x12\ + \x03B\x1f\x20\nQ\n\x04\x04\x01\x02\x03\x12\x03D\x02(\x1aD\x20Indexes\x20\ + of\x20the\x20public\x20imported\x20files\x20in\x20the\x20dependency\x20l\ + ist\x20above.\n\n\x0c\n\x05\x04\x01\x02\x03\x04\x12\x03D\x02\n\n\x0c\n\ + \x05\x04\x01\x02\x03\x05\x12\x03D\x0b\x10\n\x0c\n\x05\x04\x01\x02\x03\ + \x01\x12\x03D\x11\"\n\x0c\n\x05\x04\x01\x02\x03\x03\x12\x03D%'\nz\n\x04\ + \x04\x01\x02\x04\x12\x03G\x02&\x1am\x20Indexes\x20of\x20the\x20weak\x20i\ + mported\x20files\x20in\x20the\x20dependency\x20list.\n\x20For\x20Google-\ + internal\x20migration\x20only.\x20Do\x20not\x20use.\n\n\x0c\n\x05\x04\ + \x01\x02\x04\x04\x12\x03G\x02\n\n\x0c\n\x05\x04\x01\x02\x04\x05\x12\x03G\ + \x0b\x10\n\x0c\n\x05\x04\x01\x02\x04\x01\x12\x03G\x11\x20\n\x0c\n\x05\ + \x04\x01\x02\x04\x03\x12\x03G#%\n6\n\x04\x04\x01\x02\x05\x12\x03J\x02,\ + \x1a)\x20All\x20top-level\x20definitions\x20in\x20this\x20file.\n\n\x0c\ + \n\x05\x04\x01\x02\x05\x04\x12\x03J\x02\n\n\x0c\n\x05\x04\x01\x02\x05\ + \x06\x12\x03J\x0b\x1a\n\x0c\n\x05\x04\x01\x02\x05\x01\x12\x03J\x1b'\n\ + \x0c\n\x05\x04\x01\x02\x05\x03\x12\x03J*+\n\x0b\n\x04\x04\x01\x02\x06\ + \x12\x03K\x02-\n\x0c\n\x05\x04\x01\x02\x06\x04\x12\x03K\x02\n\n\x0c\n\ + \x05\x04\x01\x02\x06\x06\x12\x03K\x0b\x1e\n\x0c\n\x05\x04\x01\x02\x06\ + \x01\x12\x03K\x1f(\n\x0c\n\x05\x04\x01\x02\x06\x03\x12\x03K+,\n\x0b\n\ + \x04\x04\x01\x02\x07\x12\x03L\x02.\n\x0c\n\x05\x04\x01\x02\x07\x04\x12\ + \x03L\x02\n\n\x0c\n\x05\x04\x01\x02\x07\x06\x12\x03L\x0b!\n\x0c\n\x05\ + \x04\x01\x02\x07\x01\x12\x03L\")\n\x0c\n\x05\x04\x01\x02\x07\x03\x12\x03\ + L,-\n\x0b\n\x04\x04\x01\x02\x08\x12\x03M\x02.\n\x0c\n\x05\x04\x01\x02\ + \x08\x04\x12\x03M\x02\n\n\x0c\n\x05\x04\x01\x02\x08\x06\x12\x03M\x0b\x1f\ + \n\x0c\n\x05\x04\x01\x02\x08\x01\x12\x03M\x20)\n\x0c\n\x05\x04\x01\x02\ + \x08\x03\x12\x03M,-\n\x0b\n\x04\x04\x01\x02\t\x12\x03O\x02#\n\x0c\n\x05\ + \x04\x01\x02\t\x04\x12\x03O\x02\n\n\x0c\n\x05\x04\x01\x02\t\x06\x12\x03O\ + \x0b\x16\n\x0c\n\x05\x04\x01\x02\t\x01\x12\x03O\x17\x1e\n\x0c\n\x05\x04\ + \x01\x02\t\x03\x12\x03O!\"\n\xf4\x01\n\x04\x04\x01\x02\n\x12\x03U\x02/\ + \x1a\xe6\x01\x20This\x20field\x20contains\x20optional\x20information\x20\ + about\x20the\x20original\x20source\x20code.\n\x20You\x20may\x20safely\ + \x20remove\x20this\x20entire\x20field\x20without\x20harming\x20runtime\n\ + \x20functionality\x20of\x20the\x20descriptors\x20--\x20the\x20informatio\ + n\x20is\x20needed\x20only\x20by\n\x20development\x20tools.\n\n\x0c\n\x05\ + \x04\x01\x02\n\x04\x12\x03U\x02\n\n\x0c\n\x05\x04\x01\x02\n\x06\x12\x03U\ + \x0b\x19\n\x0c\n\x05\x04\x01\x02\n\x01\x12\x03U\x1a*\n\x0c\n\x05\x04\x01\ + \x02\n\x03\x12\x03U-.\n]\n\x04\x04\x01\x02\x0b\x12\x03Y\x02\x1e\x1aP\x20\ + The\x20syntax\x20of\x20the\x20proto\x20file.\n\x20The\x20supported\x20va\ + lues\x20are\x20\"proto2\"\x20and\x20\"proto3\".\n\n\x0c\n\x05\x04\x01\ + \x02\x0b\x04\x12\x03Y\x02\n\n\x0c\n\x05\x04\x01\x02\x0b\x05\x12\x03Y\x0b\ + \x11\n\x0c\n\x05\x04\x01\x02\x0b\x01\x12\x03Y\x12\x18\n\x0c\n\x05\x04\ + \x01\x02\x0b\x03\x12\x03Y\x1b\x1d\n'\n\x02\x04\x02\x12\x04]\0}\x01\x1a\ + \x1b\x20Describes\x20a\x20message\x20type.\n\n\n\n\x03\x04\x02\x01\x12\ + \x03]\x08\x17\n\x0b\n\x04\x04\x02\x02\0\x12\x03^\x02\x1b\n\x0c\n\x05\x04\ + \x02\x02\0\x04\x12\x03^\x02\n\n\x0c\n\x05\x04\x02\x02\0\x05\x12\x03^\x0b\ + \x11\n\x0c\n\x05\x04\x02\x02\0\x01\x12\x03^\x12\x16\n\x0c\n\x05\x04\x02\ + \x02\0\x03\x12\x03^\x19\x1a\n\x0b\n\x04\x04\x02\x02\x01\x12\x03`\x02*\n\ + \x0c\n\x05\x04\x02\x02\x01\x04\x12\x03`\x02\n\n\x0c\n\x05\x04\x02\x02\ + \x01\x06\x12\x03`\x0b\x1f\n\x0c\n\x05\x04\x02\x02\x01\x01\x12\x03`\x20%\ + \n\x0c\n\x05\x04\x02\x02\x01\x03\x12\x03`()\n\x0b\n\x04\x04\x02\x02\x02\ + \x12\x03a\x02.\n\x0c\n\x05\x04\x02\x02\x02\x04\x12\x03a\x02\n\n\x0c\n\ + \x05\x04\x02\x02\x02\x06\x12\x03a\x0b\x1f\n\x0c\n\x05\x04\x02\x02\x02\ + \x01\x12\x03a\x20)\n\x0c\n\x05\x04\x02\x02\x02\x03\x12\x03a,-\n\x0b\n\ + \x04\x04\x02\x02\x03\x12\x03c\x02+\n\x0c\n\x05\x04\x02\x02\x03\x04\x12\ + \x03c\x02\n\n\x0c\n\x05\x04\x02\x02\x03\x06\x12\x03c\x0b\x1a\n\x0c\n\x05\ + \x04\x02\x02\x03\x01\x12\x03c\x1b&\n\x0c\n\x05\x04\x02\x02\x03\x03\x12\ + \x03c)*\n\x0b\n\x04\x04\x02\x02\x04\x12\x03d\x02-\n\x0c\n\x05\x04\x02\ + \x02\x04\x04\x12\x03d\x02\n\n\x0c\n\x05\x04\x02\x02\x04\x06\x12\x03d\x0b\ + \x1e\n\x0c\n\x05\x04\x02\x02\x04\x01\x12\x03d\x1f(\n\x0c\n\x05\x04\x02\ + \x02\x04\x03\x12\x03d+,\n\x0c\n\x04\x04\x02\x03\0\x12\x04f\x02k\x03\n\ + \x0c\n\x05\x04\x02\x03\0\x01\x12\x03f\n\x18\n\x1b\n\x06\x04\x02\x03\0\ + \x02\0\x12\x03g\x04\x1d\"\x0c\x20Inclusive.\n\n\x0e\n\x07\x04\x02\x03\0\ + \x02\0\x04\x12\x03g\x04\x0c\n\x0e\n\x07\x04\x02\x03\0\x02\0\x05\x12\x03g\ + \r\x12\n\x0e\n\x07\x04\x02\x03\0\x02\0\x01\x12\x03g\x13\x18\n\x0e\n\x07\ + \x04\x02\x03\0\x02\0\x03\x12\x03g\x1b\x1c\n\x1b\n\x06\x04\x02\x03\0\x02\ + \x01\x12\x03h\x04\x1b\"\x0c\x20Exclusive.\n\n\x0e\n\x07\x04\x02\x03\0\ + \x02\x01\x04\x12\x03h\x04\x0c\n\x0e\n\x07\x04\x02\x03\0\x02\x01\x05\x12\ + \x03h\r\x12\n\x0e\n\x07\x04\x02\x03\0\x02\x01\x01\x12\x03h\x13\x16\n\x0e\ + \n\x07\x04\x02\x03\0\x02\x01\x03\x12\x03h\x19\x1a\n\r\n\x06\x04\x02\x03\ + \0\x02\x02\x12\x03j\x04/\n\x0e\n\x07\x04\x02\x03\0\x02\x02\x04\x12\x03j\ + \x04\x0c\n\x0e\n\x07\x04\x02\x03\0\x02\x02\x06\x12\x03j\r\"\n\x0e\n\x07\ + \x04\x02\x03\0\x02\x02\x01\x12\x03j#*\n\x0e\n\x07\x04\x02\x03\0\x02\x02\ + \x03\x12\x03j-.\n\x0b\n\x04\x04\x02\x02\x05\x12\x03l\x02.\n\x0c\n\x05\ + \x04\x02\x02\x05\x04\x12\x03l\x02\n\n\x0c\n\x05\x04\x02\x02\x05\x06\x12\ + \x03l\x0b\x19\n\x0c\n\x05\x04\x02\x02\x05\x01\x12\x03l\x1a)\n\x0c\n\x05\ + \x04\x02\x02\x05\x03\x12\x03l,-\n\x0b\n\x04\x04\x02\x02\x06\x12\x03n\x02\ + /\n\x0c\n\x05\x04\x02\x02\x06\x04\x12\x03n\x02\n\n\x0c\n\x05\x04\x02\x02\ + \x06\x06\x12\x03n\x0b\x1f\n\x0c\n\x05\x04\x02\x02\x06\x01\x12\x03n\x20*\ + \n\x0c\n\x05\x04\x02\x02\x06\x03\x12\x03n-.\n\x0b\n\x04\x04\x02\x02\x07\ + \x12\x03p\x02&\n\x0c\n\x05\x04\x02\x02\x07\x04\x12\x03p\x02\n\n\x0c\n\ + \x05\x04\x02\x02\x07\x06\x12\x03p\x0b\x19\n\x0c\n\x05\x04\x02\x02\x07\ + \x01\x12\x03p\x1a!\n\x0c\n\x05\x04\x02\x02\x07\x03\x12\x03p$%\n\xaa\x01\ + \n\x04\x04\x02\x03\x01\x12\x04u\x02x\x03\x1a\x9b\x01\x20Range\x20of\x20r\ + eserved\x20tag\x20numbers.\x20Reserved\x20tag\x20numbers\x20may\x20not\ + \x20be\x20used\x20by\n\x20fields\x20or\x20extension\x20ranges\x20in\x20t\ + he\x20same\x20message.\x20Reserved\x20ranges\x20may\n\x20not\x20overlap.\ + \n\n\x0c\n\x05\x04\x02\x03\x01\x01\x12\x03u\n\x17\n\x1b\n\x06\x04\x02\ + \x03\x01\x02\0\x12\x03v\x04\x1d\"\x0c\x20Inclusive.\n\n\x0e\n\x07\x04\ + \x02\x03\x01\x02\0\x04\x12\x03v\x04\x0c\n\x0e\n\x07\x04\x02\x03\x01\x02\ + \0\x05\x12\x03v\r\x12\n\x0e\n\x07\x04\x02\x03\x01\x02\0\x01\x12\x03v\x13\ + \x18\n\x0e\n\x07\x04\x02\x03\x01\x02\0\x03\x12\x03v\x1b\x1c\n\x1b\n\x06\ + \x04\x02\x03\x01\x02\x01\x12\x03w\x04\x1b\"\x0c\x20Exclusive.\n\n\x0e\n\ + \x07\x04\x02\x03\x01\x02\x01\x04\x12\x03w\x04\x0c\n\x0e\n\x07\x04\x02\ + \x03\x01\x02\x01\x05\x12\x03w\r\x12\n\x0e\n\x07\x04\x02\x03\x01\x02\x01\ + \x01\x12\x03w\x13\x16\n\x0e\n\x07\x04\x02\x03\x01\x02\x01\x03\x12\x03w\ + \x19\x1a\n\x0b\n\x04\x04\x02\x02\x08\x12\x03y\x02,\n\x0c\n\x05\x04\x02\ + \x02\x08\x04\x12\x03y\x02\n\n\x0c\n\x05\x04\x02\x02\x08\x06\x12\x03y\x0b\ + \x18\n\x0c\n\x05\x04\x02\x02\x08\x01\x12\x03y\x19'\n\x0c\n\x05\x04\x02\ + \x02\x08\x03\x12\x03y*+\n\x82\x01\n\x04\x04\x02\x02\t\x12\x03|\x02%\x1au\ + \x20Reserved\x20field\x20names,\x20which\x20may\x20not\x20be\x20used\x20\ + by\x20fields\x20in\x20the\x20same\x20message.\n\x20A\x20given\x20name\ + \x20may\x20only\x20be\x20reserved\x20once.\n\n\x0c\n\x05\x04\x02\x02\t\ + \x04\x12\x03|\x02\n\n\x0c\n\x05\x04\x02\x02\t\x05\x12\x03|\x0b\x11\n\x0c\ + \n\x05\x04\x02\x02\t\x01\x12\x03|\x12\x1f\n\x0c\n\x05\x04\x02\x02\t\x03\ + \x12\x03|\"$\n\x0b\n\x02\x04\x03\x12\x05\x7f\0\x86\x01\x01\n\n\n\x03\x04\ + \x03\x01\x12\x03\x7f\x08\x1d\nO\n\x04\x04\x03\x02\0\x12\x04\x81\x01\x02:\ + \x1aA\x20The\x20parser\x20stores\x20options\x20it\x20doesn't\x20recogniz\ + e\x20here.\x20See\x20above.\n\n\r\n\x05\x04\x03\x02\0\x04\x12\x04\x81\ + \x01\x02\n\n\r\n\x05\x04\x03\x02\0\x06\x12\x04\x81\x01\x0b\x1e\n\r\n\x05\ + \x04\x03\x02\0\x01\x12\x04\x81\x01\x1f3\n\r\n\x05\x04\x03\x02\0\x03\x12\ + \x04\x81\x0169\nZ\n\x03\x04\x03\x05\x12\x04\x85\x01\x02\x19\x1aM\x20Clie\ + nts\x20can\x20define\x20custom\x20options\x20in\x20extensions\x20of\x20t\ + his\x20message.\x20See\x20above.\n\n\x0c\n\x04\x04\x03\x05\0\x12\x04\x85\ + \x01\r\x18\n\r\n\x05\x04\x03\x05\0\x01\x12\x04\x85\x01\r\x11\n\r\n\x05\ + \x04\x03\x05\0\x02\x12\x04\x85\x01\x15\x18\n3\n\x02\x04\x04\x12\x06\x89\ + \x01\0\xee\x01\x01\x1a%\x20Describes\x20a\x20field\x20within\x20a\x20mes\ + sage.\n\n\x0b\n\x03\x04\x04\x01\x12\x04\x89\x01\x08\x1c\n\x0e\n\x04\x04\ + \x04\x04\0\x12\x06\x8a\x01\x02\xa9\x01\x03\n\r\n\x05\x04\x04\x04\0\x01\ + \x12\x04\x8a\x01\x07\x0b\nS\n\x06\x04\x04\x04\0\x02\0\x12\x04\x8d\x01\ + \x04\x14\x1aC\x200\x20is\x20reserved\x20for\x20errors.\n\x20Order\x20is\ + \x20weird\x20for\x20historical\x20reasons.\n\n\x0f\n\x07\x04\x04\x04\0\ + \x02\0\x01\x12\x04\x8d\x01\x04\x0f\n\x0f\n\x07\x04\x04\x04\0\x02\0\x02\ + \x12\x04\x8d\x01\x12\x13\n\x0e\n\x06\x04\x04\x04\0\x02\x01\x12\x04\x8e\ + \x01\x04\x13\n\x0f\n\x07\x04\x04\x04\0\x02\x01\x01\x12\x04\x8e\x01\x04\ + \x0e\n\x0f\n\x07\x04\x04\x04\0\x02\x01\x02\x12\x04\x8e\x01\x11\x12\nw\n\ + \x06\x04\x04\x04\0\x02\x02\x12\x04\x91\x01\x04\x13\x1ag\x20Not\x20ZigZag\ + \x20encoded.\x20\x20Negative\x20numbers\x20take\x2010\x20bytes.\x20\x20U\ + se\x20TYPE_SINT64\x20if\n\x20negative\x20values\x20are\x20likely.\n\n\ + \x0f\n\x07\x04\x04\x04\0\x02\x02\x01\x12\x04\x91\x01\x04\x0e\n\x0f\n\x07\ + \x04\x04\x04\0\x02\x02\x02\x12\x04\x91\x01\x11\x12\n\x0e\n\x06\x04\x04\ + \x04\0\x02\x03\x12\x04\x92\x01\x04\x14\n\x0f\n\x07\x04\x04\x04\0\x02\x03\ + \x01\x12\x04\x92\x01\x04\x0f\n\x0f\n\x07\x04\x04\x04\0\x02\x03\x02\x12\ + \x04\x92\x01\x12\x13\nw\n\x06\x04\x04\x04\0\x02\x04\x12\x04\x95\x01\x04\ + \x13\x1ag\x20Not\x20ZigZag\x20encoded.\x20\x20Negative\x20numbers\x20tak\ + e\x2010\x20bytes.\x20\x20Use\x20TYPE_SINT32\x20if\n\x20negative\x20value\ + s\x20are\x20likely.\n\n\x0f\n\x07\x04\x04\x04\0\x02\x04\x01\x12\x04\x95\ + \x01\x04\x0e\n\x0f\n\x07\x04\x04\x04\0\x02\x04\x02\x12\x04\x95\x01\x11\ + \x12\n\x0e\n\x06\x04\x04\x04\0\x02\x05\x12\x04\x96\x01\x04\x15\n\x0f\n\ + \x07\x04\x04\x04\0\x02\x05\x01\x12\x04\x96\x01\x04\x10\n\x0f\n\x07\x04\ + \x04\x04\0\x02\x05\x02\x12\x04\x96\x01\x13\x14\n\x0e\n\x06\x04\x04\x04\0\ + \x02\x06\x12\x04\x97\x01\x04\x15\n\x0f\n\x07\x04\x04\x04\0\x02\x06\x01\ + \x12\x04\x97\x01\x04\x10\n\x0f\n\x07\x04\x04\x04\0\x02\x06\x02\x12\x04\ + \x97\x01\x13\x14\n\x0e\n\x06\x04\x04\x04\0\x02\x07\x12\x04\x98\x01\x04\ + \x12\n\x0f\n\x07\x04\x04\x04\0\x02\x07\x01\x12\x04\x98\x01\x04\r\n\x0f\n\ + \x07\x04\x04\x04\0\x02\x07\x02\x12\x04\x98\x01\x10\x11\n\x0e\n\x06\x04\ + \x04\x04\0\x02\x08\x12\x04\x99\x01\x04\x14\n\x0f\n\x07\x04\x04\x04\0\x02\ + \x08\x01\x12\x04\x99\x01\x04\x0f\n\x0f\n\x07\x04\x04\x04\0\x02\x08\x02\ + \x12\x04\x99\x01\x12\x13\n\xe2\x01\n\x06\x04\x04\x04\0\x02\t\x12\x04\x9e\ + \x01\x04\x14\x1a\xd1\x01\x20Tag-delimited\x20aggregate.\n\x20Group\x20ty\ + pe\x20is\x20deprecated\x20and\x20not\x20supported\x20in\x20proto3.\x20Ho\ + wever,\x20Proto3\n\x20implementations\x20should\x20still\x20be\x20able\ + \x20to\x20parse\x20the\x20group\x20wire\x20format\x20and\n\x20treat\x20g\ + roup\x20fields\x20as\x20unknown\x20fields.\n\n\x0f\n\x07\x04\x04\x04\0\ + \x02\t\x01\x12\x04\x9e\x01\x04\x0e\n\x0f\n\x07\x04\x04\x04\0\x02\t\x02\ + \x12\x04\x9e\x01\x11\x13\n-\n\x06\x04\x04\x04\0\x02\n\x12\x04\x9f\x01\ + \x04\x16\"\x1d\x20Length-delimited\x20aggregate.\n\n\x0f\n\x07\x04\x04\ + \x04\0\x02\n\x01\x12\x04\x9f\x01\x04\x10\n\x0f\n\x07\x04\x04\x04\0\x02\n\ + \x02\x12\x04\x9f\x01\x13\x15\n#\n\x06\x04\x04\x04\0\x02\x0b\x12\x04\xa2\ + \x01\x04\x14\x1a\x13\x20New\x20in\x20version\x202.\n\n\x0f\n\x07\x04\x04\ + \x04\0\x02\x0b\x01\x12\x04\xa2\x01\x04\x0e\n\x0f\n\x07\x04\x04\x04\0\x02\ + \x0b\x02\x12\x04\xa2\x01\x11\x13\n\x0e\n\x06\x04\x04\x04\0\x02\x0c\x12\ + \x04\xa3\x01\x04\x15\n\x0f\n\x07\x04\x04\x04\0\x02\x0c\x01\x12\x04\xa3\ + \x01\x04\x0f\n\x0f\n\x07\x04\x04\x04\0\x02\x0c\x02\x12\x04\xa3\x01\x12\ + \x14\n\x0e\n\x06\x04\x04\x04\0\x02\r\x12\x04\xa4\x01\x04\x13\n\x0f\n\x07\ + \x04\x04\x04\0\x02\r\x01\x12\x04\xa4\x01\x04\r\n\x0f\n\x07\x04\x04\x04\0\ + \x02\r\x02\x12\x04\xa4\x01\x10\x12\n\x0e\n\x06\x04\x04\x04\0\x02\x0e\x12\ + \x04\xa5\x01\x04\x17\n\x0f\n\x07\x04\x04\x04\0\x02\x0e\x01\x12\x04\xa5\ + \x01\x04\x11\n\x0f\n\x07\x04\x04\x04\0\x02\x0e\x02\x12\x04\xa5\x01\x14\ + \x16\n\x0e\n\x06\x04\x04\x04\0\x02\x0f\x12\x04\xa6\x01\x04\x17\n\x0f\n\ + \x07\x04\x04\x04\0\x02\x0f\x01\x12\x04\xa6\x01\x04\x11\n\x0f\n\x07\x04\ + \x04\x04\0\x02\x0f\x02\x12\x04\xa6\x01\x14\x16\n'\n\x06\x04\x04\x04\0\ + \x02\x10\x12\x04\xa7\x01\x04\x15\"\x17\x20Uses\x20ZigZag\x20encoding.\n\ + \n\x0f\n\x07\x04\x04\x04\0\x02\x10\x01\x12\x04\xa7\x01\x04\x0f\n\x0f\n\ + \x07\x04\x04\x04\0\x02\x10\x02\x12\x04\xa7\x01\x12\x14\n'\n\x06\x04\x04\ + \x04\0\x02\x11\x12\x04\xa8\x01\x04\x15\"\x17\x20Uses\x20ZigZag\x20encodi\ + ng.\n\n\x0f\n\x07\x04\x04\x04\0\x02\x11\x01\x12\x04\xa8\x01\x04\x0f\n\ + \x0f\n\x07\x04\x04\x04\0\x02\x11\x02\x12\x04\xa8\x01\x12\x14\n\x0e\n\x04\ + \x04\x04\x04\x01\x12\x06\xab\x01\x02\xb0\x01\x03\n\r\n\x05\x04\x04\x04\ + \x01\x01\x12\x04\xab\x01\x07\x0c\n*\n\x06\x04\x04\x04\x01\x02\0\x12\x04\ + \xad\x01\x04\x17\x1a\x1a\x200\x20is\x20reserved\x20for\x20errors\n\n\x0f\ + \n\x07\x04\x04\x04\x01\x02\0\x01\x12\x04\xad\x01\x04\x12\n\x0f\n\x07\x04\ + \x04\x04\x01\x02\0\x02\x12\x04\xad\x01\x15\x16\n\x0e\n\x06\x04\x04\x04\ + \x01\x02\x01\x12\x04\xae\x01\x04\x17\n\x0f\n\x07\x04\x04\x04\x01\x02\x01\ + \x01\x12\x04\xae\x01\x04\x12\n\x0f\n\x07\x04\x04\x04\x01\x02\x01\x02\x12\ + \x04\xae\x01\x15\x16\n\x0e\n\x06\x04\x04\x04\x01\x02\x02\x12\x04\xaf\x01\ + \x04\x17\n\x0f\n\x07\x04\x04\x04\x01\x02\x02\x01\x12\x04\xaf\x01\x04\x12\ + \n\x0f\n\x07\x04\x04\x04\x01\x02\x02\x02\x12\x04\xaf\x01\x15\x16\n\x0c\n\ + \x04\x04\x04\x02\0\x12\x04\xb2\x01\x02\x1b\n\r\n\x05\x04\x04\x02\0\x04\ + \x12\x04\xb2\x01\x02\n\n\r\n\x05\x04\x04\x02\0\x05\x12\x04\xb2\x01\x0b\ + \x11\n\r\n\x05\x04\x04\x02\0\x01\x12\x04\xb2\x01\x12\x16\n\r\n\x05\x04\ + \x04\x02\0\x03\x12\x04\xb2\x01\x19\x1a\n\x0c\n\x04\x04\x04\x02\x01\x12\ + \x04\xb3\x01\x02\x1c\n\r\n\x05\x04\x04\x02\x01\x04\x12\x04\xb3\x01\x02\n\ + \n\r\n\x05\x04\x04\x02\x01\x05\x12\x04\xb3\x01\x0b\x10\n\r\n\x05\x04\x04\ + \x02\x01\x01\x12\x04\xb3\x01\x11\x17\n\r\n\x05\x04\x04\x02\x01\x03\x12\ + \x04\xb3\x01\x1a\x1b\n\x0c\n\x04\x04\x04\x02\x02\x12\x04\xb4\x01\x02\x1b\ + \n\r\n\x05\x04\x04\x02\x02\x04\x12\x04\xb4\x01\x02\n\n\r\n\x05\x04\x04\ + \x02\x02\x06\x12\x04\xb4\x01\x0b\x10\n\r\n\x05\x04\x04\x02\x02\x01\x12\ + \x04\xb4\x01\x11\x16\n\r\n\x05\x04\x04\x02\x02\x03\x12\x04\xb4\x01\x19\ + \x1a\n\x9c\x01\n\x04\x04\x04\x02\x03\x12\x04\xb8\x01\x02\x19\x1a\x8d\x01\ + \x20If\x20type_name\x20is\x20set,\x20this\x20need\x20not\x20be\x20set.\ + \x20\x20If\x20both\x20this\x20and\x20type_name\n\x20are\x20set,\x20this\ + \x20must\x20be\x20one\x20of\x20TYPE_ENUM,\x20TYPE_MESSAGE\x20or\x20TYPE_\ + GROUP.\n\n\r\n\x05\x04\x04\x02\x03\x04\x12\x04\xb8\x01\x02\n\n\r\n\x05\ + \x04\x04\x02\x03\x06\x12\x04\xb8\x01\x0b\x0f\n\r\n\x05\x04\x04\x02\x03\ + \x01\x12\x04\xb8\x01\x10\x14\n\r\n\x05\x04\x04\x02\x03\x03\x12\x04\xb8\ + \x01\x17\x18\n\xb7\x02\n\x04\x04\x04\x02\x04\x12\x04\xbf\x01\x02\x20\x1a\ + \xa8\x02\x20For\x20message\x20and\x20enum\x20types,\x20this\x20is\x20the\ + \x20name\x20of\x20the\x20type.\x20\x20If\x20the\x20name\n\x20starts\x20w\ + ith\x20a\x20'.',\x20it\x20is\x20fully-qualified.\x20\x20Otherwise,\x20C+\ + +-like\x20scoping\n\x20rules\x20are\x20used\x20to\x20find\x20the\x20type\ + \x20(i.e.\x20first\x20the\x20nested\x20types\x20within\x20this\n\x20mess\ + age\x20are\x20searched,\x20then\x20within\x20the\x20parent,\x20on\x20up\ + \x20to\x20the\x20root\n\x20namespace).\n\n\r\n\x05\x04\x04\x02\x04\x04\ + \x12\x04\xbf\x01\x02\n\n\r\n\x05\x04\x04\x02\x04\x05\x12\x04\xbf\x01\x0b\ + \x11\n\r\n\x05\x04\x04\x02\x04\x01\x12\x04\xbf\x01\x12\x1b\n\r\n\x05\x04\ + \x04\x02\x04\x03\x12\x04\xbf\x01\x1e\x1f\n~\n\x04\x04\x04\x02\x05\x12\ + \x04\xc3\x01\x02\x1f\x1ap\x20For\x20extensions,\x20this\x20is\x20the\x20\ + name\x20of\x20the\x20type\x20being\x20extended.\x20\x20It\x20is\n\x20res\ + olved\x20in\x20the\x20same\x20manner\x20as\x20type_name.\n\n\r\n\x05\x04\ + \x04\x02\x05\x04\x12\x04\xc3\x01\x02\n\n\r\n\x05\x04\x04\x02\x05\x05\x12\ + \x04\xc3\x01\x0b\x11\n\r\n\x05\x04\x04\x02\x05\x01\x12\x04\xc3\x01\x12\ + \x1a\n\r\n\x05\x04\x04\x02\x05\x03\x12\x04\xc3\x01\x1d\x1e\n\xb1\x02\n\ + \x04\x04\x04\x02\x06\x12\x04\xca\x01\x02$\x1a\xa2\x02\x20For\x20numeric\ + \x20types,\x20contains\x20the\x20original\x20text\x20representation\x20o\ + f\x20the\x20value.\n\x20For\x20booleans,\x20\"true\"\x20or\x20\"false\".\ + \n\x20For\x20strings,\x20contains\x20the\x20default\x20text\x20contents\ + \x20(not\x20escaped\x20in\x20any\x20way).\n\x20For\x20bytes,\x20contains\ + \x20the\x20C\x20escaped\x20value.\x20\x20All\x20bytes\x20>=\x20128\x20ar\ + e\x20escaped.\n\x20TODO(kenton):\x20\x20Base-64\x20encode?\n\n\r\n\x05\ + \x04\x04\x02\x06\x04\x12\x04\xca\x01\x02\n\n\r\n\x05\x04\x04\x02\x06\x05\ + \x12\x04\xca\x01\x0b\x11\n\r\n\x05\x04\x04\x02\x06\x01\x12\x04\xca\x01\ + \x12\x1f\n\r\n\x05\x04\x04\x02\x06\x03\x12\x04\xca\x01\"#\n\x84\x01\n\ + \x04\x04\x04\x02\x07\x12\x04\xce\x01\x02!\x1av\x20If\x20set,\x20gives\ + \x20the\x20index\x20of\x20a\x20oneof\x20in\x20the\x20containing\x20type'\ + s\x20oneof_decl\n\x20list.\x20\x20This\x20field\x20is\x20a\x20member\x20\ + of\x20that\x20oneof.\n\n\r\n\x05\x04\x04\x02\x07\x04\x12\x04\xce\x01\x02\ + \n\n\r\n\x05\x04\x04\x02\x07\x05\x12\x04\xce\x01\x0b\x10\n\r\n\x05\x04\ + \x04\x02\x07\x01\x12\x04\xce\x01\x11\x1c\n\r\n\x05\x04\x04\x02\x07\x03\ + \x12\x04\xce\x01\x1f\x20\n\xfa\x01\n\x04\x04\x04\x02\x08\x12\x04\xd4\x01\ + \x02!\x1a\xeb\x01\x20JSON\x20name\x20of\x20this\x20field.\x20The\x20valu\ + e\x20is\x20set\x20by\x20protocol\x20compiler.\x20If\x20the\n\x20user\x20\ + has\x20set\x20a\x20\"json_name\"\x20option\x20on\x20this\x20field,\x20th\ + at\x20option's\x20value\n\x20will\x20be\x20used.\x20Otherwise,\x20it's\ + \x20deduced\x20from\x20the\x20field's\x20name\x20by\x20converting\n\x20i\ + t\x20to\x20camelCase.\n\n\r\n\x05\x04\x04\x02\x08\x04\x12\x04\xd4\x01\ + \x02\n\n\r\n\x05\x04\x04\x02\x08\x05\x12\x04\xd4\x01\x0b\x11\n\r\n\x05\ + \x04\x04\x02\x08\x01\x12\x04\xd4\x01\x12\x1b\n\r\n\x05\x04\x04\x02\x08\ + \x03\x12\x04\xd4\x01\x1e\x20\n\x0c\n\x04\x04\x04\x02\t\x12\x04\xd6\x01\ + \x02$\n\r\n\x05\x04\x04\x02\t\x04\x12\x04\xd6\x01\x02\n\n\r\n\x05\x04\ + \x04\x02\t\x06\x12\x04\xd6\x01\x0b\x17\n\r\n\x05\x04\x04\x02\t\x01\x12\ + \x04\xd6\x01\x18\x1f\n\r\n\x05\x04\x04\x02\t\x03\x12\x04\xd6\x01\"#\n\ + \xb3\t\n\x04\x04\x04\x02\n\x12\x04\xed\x01\x02%\x1a\xa4\t\x20If\x20true,\ + \x20this\x20is\x20a\x20proto3\x20\"optional\".\x20When\x20a\x20proto3\ + \x20field\x20is\x20optional,\x20it\n\x20tracks\x20presence\x20regardless\ + \x20of\x20field\x20type.\n\n\x20When\x20proto3_optional\x20is\x20true,\ + \x20this\x20field\x20must\x20be\x20belong\x20to\x20a\x20oneof\x20to\n\ + \x20signal\x20to\x20old\x20proto3\x20clients\x20that\x20presence\x20is\ + \x20tracked\x20for\x20this\x20field.\x20This\n\x20oneof\x20is\x20known\ + \x20as\x20a\x20\"synthetic\"\x20oneof,\x20and\x20this\x20field\x20must\ + \x20be\x20its\x20sole\n\x20member\x20(each\x20proto3\x20optional\x20fiel\ + d\x20gets\x20its\x20own\x20synthetic\x20oneof).\x20Synthetic\n\x20oneofs\ + \x20exist\x20in\x20the\x20descriptor\x20only,\x20and\x20do\x20not\x20gen\ + erate\x20any\x20API.\x20Synthetic\n\x20oneofs\x20must\x20be\x20ordered\ + \x20after\x20all\x20\"real\"\x20oneofs.\n\n\x20For\x20message\x20fields,\ + \x20proto3_optional\x20doesn't\x20create\x20any\x20semantic\x20change,\n\ + \x20since\x20non-repeated\x20message\x20fields\x20always\x20track\x20pre\ + sence.\x20However\x20it\x20still\n\x20indicates\x20the\x20semantic\x20de\ + tail\x20of\x20whether\x20the\x20user\x20wrote\x20\"optional\"\x20or\x20n\ + ot.\n\x20This\x20can\x20be\x20useful\x20for\x20round-tripping\x20the\x20\ + .proto\x20file.\x20For\x20consistency\x20we\n\x20give\x20message\x20fiel\ + ds\x20a\x20synthetic\x20oneof\x20also,\x20even\x20though\x20it\x20is\x20\ + not\x20required\n\x20to\x20track\x20presence.\x20This\x20is\x20especiall\ + y\x20important\x20because\x20the\x20parser\x20can't\n\x20tell\x20if\x20a\ + \x20field\x20is\x20a\x20message\x20or\x20an\x20enum,\x20so\x20it\x20must\ + \x20always\x20create\x20a\n\x20synthetic\x20oneof.\n\n\x20Proto2\x20opti\ + onal\x20fields\x20do\x20not\x20set\x20this\x20flag,\x20because\x20they\ + \x20already\x20indicate\n\x20optional\x20with\x20`LABEL_OPTIONAL`.\n\n\r\ + \n\x05\x04\x04\x02\n\x04\x12\x04\xed\x01\x02\n\n\r\n\x05\x04\x04\x02\n\ + \x05\x12\x04\xed\x01\x0b\x0f\n\r\n\x05\x04\x04\x02\n\x01\x12\x04\xed\x01\ + \x10\x1f\n\r\n\x05\x04\x04\x02\n\x03\x12\x04\xed\x01\"$\n\"\n\x02\x04\ + \x05\x12\x06\xf1\x01\0\xf4\x01\x01\x1a\x14\x20Describes\x20a\x20oneof.\n\ + \n\x0b\n\x03\x04\x05\x01\x12\x04\xf1\x01\x08\x1c\n\x0c\n\x04\x04\x05\x02\ + \0\x12\x04\xf2\x01\x02\x1b\n\r\n\x05\x04\x05\x02\0\x04\x12\x04\xf2\x01\ + \x02\n\n\r\n\x05\x04\x05\x02\0\x05\x12\x04\xf2\x01\x0b\x11\n\r\n\x05\x04\ + \x05\x02\0\x01\x12\x04\xf2\x01\x12\x16\n\r\n\x05\x04\x05\x02\0\x03\x12\ + \x04\xf2\x01\x19\x1a\n\x0c\n\x04\x04\x05\x02\x01\x12\x04\xf3\x01\x02$\n\ + \r\n\x05\x04\x05\x02\x01\x04\x12\x04\xf3\x01\x02\n\n\r\n\x05\x04\x05\x02\ + \x01\x06\x12\x04\xf3\x01\x0b\x17\n\r\n\x05\x04\x05\x02\x01\x01\x12\x04\ + \xf3\x01\x18\x1f\n\r\n\x05\x04\x05\x02\x01\x03\x12\x04\xf3\x01\"#\n'\n\ + \x02\x04\x06\x12\x06\xf7\x01\0\x91\x02\x01\x1a\x19\x20Describes\x20an\ + \x20enum\x20type.\n\n\x0b\n\x03\x04\x06\x01\x12\x04\xf7\x01\x08\x1b\n\ + \x0c\n\x04\x04\x06\x02\0\x12\x04\xf8\x01\x02\x1b\n\r\n\x05\x04\x06\x02\0\ + \x04\x12\x04\xf8\x01\x02\n\n\r\n\x05\x04\x06\x02\0\x05\x12\x04\xf8\x01\ + \x0b\x11\n\r\n\x05\x04\x06\x02\0\x01\x12\x04\xf8\x01\x12\x16\n\r\n\x05\ + \x04\x06\x02\0\x03\x12\x04\xf8\x01\x19\x1a\n\x0c\n\x04\x04\x06\x02\x01\ + \x12\x04\xfa\x01\x02.\n\r\n\x05\x04\x06\x02\x01\x04\x12\x04\xfa\x01\x02\ + \n\n\r\n\x05\x04\x06\x02\x01\x06\x12\x04\xfa\x01\x0b#\n\r\n\x05\x04\x06\ + \x02\x01\x01\x12\x04\xfa\x01$)\n\r\n\x05\x04\x06\x02\x01\x03\x12\x04\xfa\ + \x01,-\n\x0c\n\x04\x04\x06\x02\x02\x12\x04\xfc\x01\x02#\n\r\n\x05\x04\ + \x06\x02\x02\x04\x12\x04\xfc\x01\x02\n\n\r\n\x05\x04\x06\x02\x02\x06\x12\ + \x04\xfc\x01\x0b\x16\n\r\n\x05\x04\x06\x02\x02\x01\x12\x04\xfc\x01\x17\ + \x1e\n\r\n\x05\x04\x06\x02\x02\x03\x12\x04\xfc\x01!\"\n\xaf\x02\n\x04\ + \x04\x06\x03\0\x12\x06\x84\x02\x02\x87\x02\x03\x1a\x9e\x02\x20Range\x20o\ + f\x20reserved\x20numeric\x20values.\x20Reserved\x20values\x20may\x20not\ + \x20be\x20used\x20by\n\x20entries\x20in\x20the\x20same\x20enum.\x20Reser\ + ved\x20ranges\x20may\x20not\x20overlap.\n\n\x20Note\x20that\x20this\x20i\ + s\x20distinct\x20from\x20DescriptorProto.ReservedRange\x20in\x20that\x20\ + it\n\x20is\x20inclusive\x20such\x20that\x20it\x20can\x20appropriately\ + \x20represent\x20the\x20entire\x20int32\n\x20domain.\n\n\r\n\x05\x04\x06\ + \x03\0\x01\x12\x04\x84\x02\n\x1b\n\x1c\n\x06\x04\x06\x03\0\x02\0\x12\x04\ + \x85\x02\x04\x1d\"\x0c\x20Inclusive.\n\n\x0f\n\x07\x04\x06\x03\0\x02\0\ + \x04\x12\x04\x85\x02\x04\x0c\n\x0f\n\x07\x04\x06\x03\0\x02\0\x05\x12\x04\ + \x85\x02\r\x12\n\x0f\n\x07\x04\x06\x03\0\x02\0\x01\x12\x04\x85\x02\x13\ + \x18\n\x0f\n\x07\x04\x06\x03\0\x02\0\x03\x12\x04\x85\x02\x1b\x1c\n\x1c\n\ + \x06\x04\x06\x03\0\x02\x01\x12\x04\x86\x02\x04\x1b\"\x0c\x20Inclusive.\n\ + \n\x0f\n\x07\x04\x06\x03\0\x02\x01\x04\x12\x04\x86\x02\x04\x0c\n\x0f\n\ + \x07\x04\x06\x03\0\x02\x01\x05\x12\x04\x86\x02\r\x12\n\x0f\n\x07\x04\x06\ + \x03\0\x02\x01\x01\x12\x04\x86\x02\x13\x16\n\x0f\n\x07\x04\x06\x03\0\x02\ + \x01\x03\x12\x04\x86\x02\x19\x1a\n\xaa\x01\n\x04\x04\x06\x02\x03\x12\x04\ + \x8c\x02\x020\x1a\x9b\x01\x20Range\x20of\x20reserved\x20numeric\x20value\ + s.\x20Reserved\x20numeric\x20values\x20may\x20not\x20be\x20used\n\x20by\ + \x20enum\x20values\x20in\x20the\x20same\x20enum\x20declaration.\x20Reser\ + ved\x20ranges\x20may\x20not\n\x20overlap.\n\n\r\n\x05\x04\x06\x02\x03\ + \x04\x12\x04\x8c\x02\x02\n\n\r\n\x05\x04\x06\x02\x03\x06\x12\x04\x8c\x02\ + \x0b\x1c\n\r\n\x05\x04\x06\x02\x03\x01\x12\x04\x8c\x02\x1d+\n\r\n\x05\ + \x04\x06\x02\x03\x03\x12\x04\x8c\x02./\nl\n\x04\x04\x06\x02\x04\x12\x04\ + \x90\x02\x02$\x1a^\x20Reserved\x20enum\x20value\x20names,\x20which\x20ma\ + y\x20not\x20be\x20reused.\x20A\x20given\x20name\x20may\x20only\n\x20be\ + \x20reserved\x20once.\n\n\r\n\x05\x04\x06\x02\x04\x04\x12\x04\x90\x02\ + \x02\n\n\r\n\x05\x04\x06\x02\x04\x05\x12\x04\x90\x02\x0b\x11\n\r\n\x05\ + \x04\x06\x02\x04\x01\x12\x04\x90\x02\x12\x1f\n\r\n\x05\x04\x06\x02\x04\ + \x03\x12\x04\x90\x02\"#\n1\n\x02\x04\x07\x12\x06\x94\x02\0\x99\x02\x01\ + \x1a#\x20Describes\x20a\x20value\x20within\x20an\x20enum.\n\n\x0b\n\x03\ + \x04\x07\x01\x12\x04\x94\x02\x08\x20\n\x0c\n\x04\x04\x07\x02\0\x12\x04\ + \x95\x02\x02\x1b\n\r\n\x05\x04\x07\x02\0\x04\x12\x04\x95\x02\x02\n\n\r\n\ + \x05\x04\x07\x02\0\x05\x12\x04\x95\x02\x0b\x11\n\r\n\x05\x04\x07\x02\0\ + \x01\x12\x04\x95\x02\x12\x16\n\r\n\x05\x04\x07\x02\0\x03\x12\x04\x95\x02\ + \x19\x1a\n\x0c\n\x04\x04\x07\x02\x01\x12\x04\x96\x02\x02\x1c\n\r\n\x05\ + \x04\x07\x02\x01\x04\x12\x04\x96\x02\x02\n\n\r\n\x05\x04\x07\x02\x01\x05\ + \x12\x04\x96\x02\x0b\x10\n\r\n\x05\x04\x07\x02\x01\x01\x12\x04\x96\x02\ + \x11\x17\n\r\n\x05\x04\x07\x02\x01\x03\x12\x04\x96\x02\x1a\x1b\n\x0c\n\ + \x04\x04\x07\x02\x02\x12\x04\x98\x02\x02(\n\r\n\x05\x04\x07\x02\x02\x04\ + \x12\x04\x98\x02\x02\n\n\r\n\x05\x04\x07\x02\x02\x06\x12\x04\x98\x02\x0b\ + \x1b\n\r\n\x05\x04\x07\x02\x02\x01\x12\x04\x98\x02\x1c#\n\r\n\x05\x04\ + \x07\x02\x02\x03\x12\x04\x98\x02&'\n$\n\x02\x04\x08\x12\x06\x9c\x02\0\ + \xa1\x02\x01\x1a\x16\x20Describes\x20a\x20service.\n\n\x0b\n\x03\x04\x08\ + \x01\x12\x04\x9c\x02\x08\x1e\n\x0c\n\x04\x04\x08\x02\0\x12\x04\x9d\x02\ + \x02\x1b\n\r\n\x05\x04\x08\x02\0\x04\x12\x04\x9d\x02\x02\n\n\r\n\x05\x04\ + \x08\x02\0\x05\x12\x04\x9d\x02\x0b\x11\n\r\n\x05\x04\x08\x02\0\x01\x12\ + \x04\x9d\x02\x12\x16\n\r\n\x05\x04\x08\x02\0\x03\x12\x04\x9d\x02\x19\x1a\ + \n\x0c\n\x04\x04\x08\x02\x01\x12\x04\x9e\x02\x02,\n\r\n\x05\x04\x08\x02\ + \x01\x04\x12\x04\x9e\x02\x02\n\n\r\n\x05\x04\x08\x02\x01\x06\x12\x04\x9e\ + \x02\x0b\x20\n\r\n\x05\x04\x08\x02\x01\x01\x12\x04\x9e\x02!'\n\r\n\x05\ + \x04\x08\x02\x01\x03\x12\x04\x9e\x02*+\n\x0c\n\x04\x04\x08\x02\x02\x12\ + \x04\xa0\x02\x02&\n\r\n\x05\x04\x08\x02\x02\x04\x12\x04\xa0\x02\x02\n\n\ + \r\n\x05\x04\x08\x02\x02\x06\x12\x04\xa0\x02\x0b\x19\n\r\n\x05\x04\x08\ + \x02\x02\x01\x12\x04\xa0\x02\x1a!\n\r\n\x05\x04\x08\x02\x02\x03\x12\x04\ + \xa0\x02$%\n0\n\x02\x04\t\x12\x06\xa4\x02\0\xb2\x02\x01\x1a\"\x20Describ\ + es\x20a\x20method\x20of\x20a\x20service.\n\n\x0b\n\x03\x04\t\x01\x12\x04\ + \xa4\x02\x08\x1d\n\x0c\n\x04\x04\t\x02\0\x12\x04\xa5\x02\x02\x1b\n\r\n\ + \x05\x04\t\x02\0\x04\x12\x04\xa5\x02\x02\n\n\r\n\x05\x04\t\x02\0\x05\x12\ + \x04\xa5\x02\x0b\x11\n\r\n\x05\x04\t\x02\0\x01\x12\x04\xa5\x02\x12\x16\n\ + \r\n\x05\x04\t\x02\0\x03\x12\x04\xa5\x02\x19\x1a\n\x97\x01\n\x04\x04\t\ + \x02\x01\x12\x04\xa9\x02\x02!\x1a\x88\x01\x20Input\x20and\x20output\x20t\ + ype\x20names.\x20\x20These\x20are\x20resolved\x20in\x20the\x20same\x20wa\ + y\x20as\n\x20FieldDescriptorProto.type_name,\x20but\x20must\x20refer\x20\ + to\x20a\x20message\x20type.\n\n\r\n\x05\x04\t\x02\x01\x04\x12\x04\xa9\ + \x02\x02\n\n\r\n\x05\x04\t\x02\x01\x05\x12\x04\xa9\x02\x0b\x11\n\r\n\x05\ + \x04\t\x02\x01\x01\x12\x04\xa9\x02\x12\x1c\n\r\n\x05\x04\t\x02\x01\x03\ + \x12\x04\xa9\x02\x1f\x20\n\x0c\n\x04\x04\t\x02\x02\x12\x04\xaa\x02\x02\"\ + \n\r\n\x05\x04\t\x02\x02\x04\x12\x04\xaa\x02\x02\n\n\r\n\x05\x04\t\x02\ + \x02\x05\x12\x04\xaa\x02\x0b\x11\n\r\n\x05\x04\t\x02\x02\x01\x12\x04\xaa\ + \x02\x12\x1d\n\r\n\x05\x04\t\x02\x02\x03\x12\x04\xaa\x02\x20!\n\x0c\n\ + \x04\x04\t\x02\x03\x12\x04\xac\x02\x02%\n\r\n\x05\x04\t\x02\x03\x04\x12\ + \x04\xac\x02\x02\n\n\r\n\x05\x04\t\x02\x03\x06\x12\x04\xac\x02\x0b\x18\n\ + \r\n\x05\x04\t\x02\x03\x01\x12\x04\xac\x02\x19\x20\n\r\n\x05\x04\t\x02\ + \x03\x03\x12\x04\xac\x02#$\nE\n\x04\x04\t\x02\x04\x12\x04\xaf\x02\x027\ + \x1a7\x20Identifies\x20if\x20client\x20streams\x20multiple\x20client\x20\ + messages\n\n\r\n\x05\x04\t\x02\x04\x04\x12\x04\xaf\x02\x02\n\n\r\n\x05\ + \x04\t\x02\x04\x05\x12\x04\xaf\x02\x0b\x0f\n\r\n\x05\x04\t\x02\x04\x01\ + \x12\x04\xaf\x02\x10\x20\n\r\n\x05\x04\t\x02\x04\x03\x12\x04\xaf\x02#$\n\ + \r\n\x05\x04\t\x02\x04\x08\x12\x04\xaf\x02%6\n\r\n\x05\x04\t\x02\x04\x07\ + \x12\x04\xaf\x0205\nE\n\x04\x04\t\x02\x05\x12\x04\xb1\x02\x027\x1a7\x20I\ + dentifies\x20if\x20server\x20streams\x20multiple\x20server\x20messages\n\ + \n\r\n\x05\x04\t\x02\x05\x04\x12\x04\xb1\x02\x02\n\n\r\n\x05\x04\t\x02\ + \x05\x05\x12\x04\xb1\x02\x0b\x0f\n\r\n\x05\x04\t\x02\x05\x01\x12\x04\xb1\ + \x02\x10\x20\n\r\n\x05\x04\t\x02\x05\x03\x12\x04\xb1\x02#$\n\r\n\x05\x04\ + \t\x02\x05\x08\x12\x04\xb1\x02%6\n\r\n\x05\x04\t\x02\x05\x07\x12\x04\xb1\ + \x0205\n\xaf\x0e\n\x02\x04\n\x12\x06\xd5\x02\0\xd0\x03\x012N\x20========\ + ===========================================================\n\x20Options\ + \n2\xd0\r\x20Each\x20of\x20the\x20definitions\x20above\x20may\x20have\ + \x20\"options\"\x20attached.\x20\x20These\x20are\n\x20just\x20annotation\ + s\x20which\x20may\x20cause\x20code\x20to\x20be\x20generated\x20slightly\ + \x20differently\n\x20or\x20may\x20contain\x20hints\x20for\x20code\x20tha\ + t\x20manipulates\x20protocol\x20messages.\n\n\x20Clients\x20may\x20defin\ + e\x20custom\x20options\x20as\x20extensions\x20of\x20the\x20*Options\x20m\ + essages.\n\x20These\x20extensions\x20may\x20not\x20yet\x20be\x20known\ + \x20at\x20parsing\x20time,\x20so\x20the\x20parser\x20cannot\n\x20store\ + \x20the\x20values\x20in\x20them.\x20\x20Instead\x20it\x20stores\x20them\ + \x20in\x20a\x20field\x20in\x20the\x20*Options\n\x20message\x20called\x20\ + uninterpreted_option.\x20This\x20field\x20must\x20have\x20the\x20same\ + \x20name\n\x20across\x20all\x20*Options\x20messages.\x20We\x20then\x20us\ + e\x20this\x20field\x20to\x20populate\x20the\n\x20extensions\x20when\x20w\ + e\x20build\x20a\x20descriptor,\x20at\x20which\x20point\x20all\x20protos\ + \x20have\x20been\n\x20parsed\x20and\x20so\x20all\x20extensions\x20are\ + \x20known.\n\n\x20Extension\x20numbers\x20for\x20custom\x20options\x20ma\ + y\x20be\x20chosen\x20as\x20follows:\n\x20*\x20For\x20options\x20which\ + \x20will\x20only\x20be\x20used\x20within\x20a\x20single\x20application\ + \x20or\n\x20\x20\x20organization,\x20or\x20for\x20experimental\x20option\ + s,\x20use\x20field\x20numbers\x2050000\n\x20\x20\x20through\x2099999.\ + \x20\x20It\x20is\x20up\x20to\x20you\x20to\x20ensure\x20that\x20you\x20do\ + \x20not\x20use\x20the\n\x20\x20\x20same\x20number\x20for\x20multiple\x20\ + options.\n\x20*\x20For\x20options\x20which\x20will\x20be\x20published\ + \x20and\x20used\x20publicly\x20by\x20multiple\n\x20\x20\x20independent\ + \x20entities,\x20e-mail\x20protobuf-global-extension-registry@google.com\ + \n\x20\x20\x20to\x20reserve\x20extension\x20numbers.\x20Simply\x20provid\ + e\x20your\x20project\x20name\x20(e.g.\n\x20\x20\x20Objective-C\x20plugin\ + )\x20and\x20your\x20project\x20website\x20(if\x20available)\x20--\x20the\ + re's\x20no\n\x20\x20\x20need\x20to\x20explain\x20how\x20you\x20intend\ + \x20to\x20use\x20them.\x20Usually\x20you\x20only\x20need\x20one\n\x20\ + \x20\x20extension\x20number.\x20You\x20can\x20declare\x20multiple\x20opt\ + ions\x20with\x20only\x20one\x20extension\n\x20\x20\x20number\x20by\x20pu\ + tting\x20them\x20in\x20a\x20sub-message.\x20See\x20the\x20Custom\x20Opti\ + ons\x20section\x20of\n\x20\x20\x20the\x20docs\x20for\x20examples:\n\x20\ + \x20\x20https://developers.google.com/protocol-buffers/docs/proto#option\ + s\n\x20\x20\x20If\x20this\x20turns\x20out\x20to\x20be\x20popular,\x20a\ + \x20web\x20service\x20will\x20be\x20set\x20up\n\x20\x20\x20to\x20automat\ + ically\x20assign\x20option\x20numbers.\n\n\x0b\n\x03\x04\n\x01\x12\x04\ + \xd5\x02\x08\x13\n\xf4\x01\n\x04\x04\n\x02\0\x12\x04\xdb\x02\x02#\x1a\ + \xe5\x01\x20Sets\x20the\x20Java\x20package\x20where\x20classes\x20genera\ + ted\x20from\x20this\x20.proto\x20will\x20be\n\x20placed.\x20\x20By\x20de\ + fault,\x20the\x20proto\x20package\x20is\x20used,\x20but\x20this\x20is\ + \x20often\n\x20inappropriate\x20because\x20proto\x20packages\x20do\x20no\ + t\x20normally\x20start\x20with\x20backwards\n\x20domain\x20names.\n\n\r\ + \n\x05\x04\n\x02\0\x04\x12\x04\xdb\x02\x02\n\n\r\n\x05\x04\n\x02\0\x05\ + \x12\x04\xdb\x02\x0b\x11\n\r\n\x05\x04\n\x02\0\x01\x12\x04\xdb\x02\x12\ + \x1e\n\r\n\x05\x04\n\x02\0\x03\x12\x04\xdb\x02!\"\n\xbf\x02\n\x04\x04\n\ + \x02\x01\x12\x04\xe3\x02\x02+\x1a\xb0\x02\x20If\x20set,\x20all\x20the\ + \x20classes\x20from\x20the\x20.proto\x20file\x20are\x20wrapped\x20in\x20\ + a\x20single\n\x20outer\x20class\x20with\x20the\x20given\x20name.\x20\x20\ + This\x20applies\x20to\x20both\x20Proto1\n\x20(equivalent\x20to\x20the\ + \x20old\x20\"--one_java_file\"\x20option)\x20and\x20Proto2\x20(where\n\ + \x20a\x20.proto\x20always\x20translates\x20to\x20a\x20single\x20class,\ + \x20but\x20you\x20may\x20want\x20to\n\x20explicitly\x20choose\x20the\x20\ + class\x20name).\n\n\r\n\x05\x04\n\x02\x01\x04\x12\x04\xe3\x02\x02\n\n\r\ + \n\x05\x04\n\x02\x01\x05\x12\x04\xe3\x02\x0b\x11\n\r\n\x05\x04\n\x02\x01\ + \x01\x12\x04\xe3\x02\x12&\n\r\n\x05\x04\n\x02\x01\x03\x12\x04\xe3\x02)*\ + \n\xa3\x03\n\x04\x04\n\x02\x02\x12\x04\xeb\x02\x02;\x1a\x94\x03\x20If\ + \x20set\x20true,\x20then\x20the\x20Java\x20code\x20generator\x20will\x20\ + generate\x20a\x20separate\x20.java\n\x20file\x20for\x20each\x20top-level\ + \x20message,\x20enum,\x20and\x20service\x20defined\x20in\x20the\x20.prot\ + o\n\x20file.\x20\x20Thus,\x20these\x20types\x20will\x20*not*\x20be\x20ne\ + sted\x20inside\x20the\x20outer\x20class\n\x20named\x20by\x20java_outer_c\ + lassname.\x20\x20However,\x20the\x20outer\x20class\x20will\x20still\x20b\ + e\n\x20generated\x20to\x20contain\x20the\x20file's\x20getDescriptor()\ + \x20method\x20as\x20well\x20as\x20any\n\x20top-level\x20extensions\x20de\ + fined\x20in\x20the\x20file.\n\n\r\n\x05\x04\n\x02\x02\x04\x12\x04\xeb\ + \x02\x02\n\n\r\n\x05\x04\n\x02\x02\x05\x12\x04\xeb\x02\x0b\x0f\n\r\n\x05\ + \x04\n\x02\x02\x01\x12\x04\xeb\x02\x10#\n\r\n\x05\x04\n\x02\x02\x03\x12\ + \x04\xeb\x02&(\n\r\n\x05\x04\n\x02\x02\x08\x12\x04\xeb\x02):\n\r\n\x05\ + \x04\n\x02\x02\x07\x12\x04\xeb\x0249\n)\n\x04\x04\n\x02\x03\x12\x04\xee\ + \x02\x02E\x1a\x1b\x20This\x20option\x20does\x20nothing.\n\n\r\n\x05\x04\ + \n\x02\x03\x04\x12\x04\xee\x02\x02\n\n\r\n\x05\x04\n\x02\x03\x05\x12\x04\ + \xee\x02\x0b\x0f\n\r\n\x05\x04\n\x02\x03\x01\x12\x04\xee\x02\x10-\n\r\n\ + \x05\x04\n\x02\x03\x03\x12\x04\xee\x0202\n\r\n\x05\x04\n\x02\x03\x08\x12\ + \x04\xee\x023D\n\x0e\n\x06\x04\n\x02\x03\x08\x03\x12\x04\xee\x024C\n\xe6\ + \x02\n\x04\x04\n\x02\x04\x12\x04\xf6\x02\x02>\x1a\xd7\x02\x20If\x20set\ + \x20true,\x20then\x20the\x20Java2\x20code\x20generator\x20will\x20genera\ + te\x20code\x20that\n\x20throws\x20an\x20exception\x20whenever\x20an\x20a\ + ttempt\x20is\x20made\x20to\x20assign\x20a\x20non-UTF-8\n\x20byte\x20sequ\ + ence\x20to\x20a\x20string\x20field.\n\x20Message\x20reflection\x20will\ + \x20do\x20the\x20same.\n\x20However,\x20an\x20extension\x20field\x20stil\ + l\x20accepts\x20non-UTF-8\x20byte\x20sequences.\n\x20This\x20option\x20h\ + as\x20no\x20effect\x20on\x20when\x20used\x20with\x20the\x20lite\x20runti\ + me.\n\n\r\n\x05\x04\n\x02\x04\x04\x12\x04\xf6\x02\x02\n\n\r\n\x05\x04\n\ + \x02\x04\x05\x12\x04\xf6\x02\x0b\x0f\n\r\n\x05\x04\n\x02\x04\x01\x12\x04\ + \xf6\x02\x10&\n\r\n\x05\x04\n\x02\x04\x03\x12\x04\xf6\x02)+\n\r\n\x05\ + \x04\n\x02\x04\x08\x12\x04\xf6\x02,=\n\r\n\x05\x04\n\x02\x04\x07\x12\x04\ + \xf6\x027<\nL\n\x04\x04\n\x04\0\x12\x06\xfa\x02\x02\xff\x02\x03\x1a<\x20\ + Generated\x20classes\x20can\x20be\x20optimized\x20for\x20speed\x20or\x20\ + code\x20size.\n\n\r\n\x05\x04\n\x04\0\x01\x12\x04\xfa\x02\x07\x13\nD\n\ + \x06\x04\n\x04\0\x02\0\x12\x04\xfb\x02\x04\x0e\"4\x20Generate\x20complet\ + e\x20code\x20for\x20parsing,\x20serialization,\n\n\x0f\n\x07\x04\n\x04\0\ + \x02\0\x01\x12\x04\xfb\x02\x04\t\n\x0f\n\x07\x04\n\x04\0\x02\0\x02\x12\ + \x04\xfb\x02\x0c\r\nG\n\x06\x04\n\x04\0\x02\x01\x12\x04\xfd\x02\x04\x12\ + \x1a\x06\x20etc.\n\"/\x20Use\x20ReflectionOps\x20to\x20implement\x20thes\ + e\x20methods.\n\n\x0f\n\x07\x04\n\x04\0\x02\x01\x01\x12\x04\xfd\x02\x04\ + \r\n\x0f\n\x07\x04\n\x04\0\x02\x01\x02\x12\x04\xfd\x02\x10\x11\nG\n\x06\ + \x04\n\x04\0\x02\x02\x12\x04\xfe\x02\x04\x15\"7\x20Generate\x20code\x20u\ + sing\x20MessageLite\x20and\x20the\x20lite\x20runtime.\n\n\x0f\n\x07\x04\ + \n\x04\0\x02\x02\x01\x12\x04\xfe\x02\x04\x10\n\x0f\n\x07\x04\n\x04\0\x02\ + \x02\x02\x12\x04\xfe\x02\x13\x14\n\x0c\n\x04\x04\n\x02\x05\x12\x04\x80\ + \x03\x02;\n\r\n\x05\x04\n\x02\x05\x04\x12\x04\x80\x03\x02\n\n\r\n\x05\ + \x04\n\x02\x05\x06\x12\x04\x80\x03\x0b\x17\n\r\n\x05\x04\n\x02\x05\x01\ + \x12\x04\x80\x03\x18$\n\r\n\x05\x04\n\x02\x05\x03\x12\x04\x80\x03'(\n\r\ + \n\x05\x04\n\x02\x05\x08\x12\x04\x80\x03):\n\r\n\x05\x04\n\x02\x05\x07\ + \x12\x04\x80\x0349\n\xe2\x02\n\x04\x04\n\x02\x06\x12\x04\x87\x03\x02\"\ + \x1a\xd3\x02\x20Sets\x20the\x20Go\x20package\x20where\x20structs\x20gene\ + rated\x20from\x20this\x20.proto\x20will\x20be\n\x20placed.\x20If\x20omit\ + ted,\x20the\x20Go\x20package\x20will\x20be\x20derived\x20from\x20the\x20\ + following:\n\x20\x20\x20-\x20The\x20basename\x20of\x20the\x20package\x20\ + import\x20path,\x20if\x20provided.\n\x20\x20\x20-\x20Otherwise,\x20the\ + \x20package\x20statement\x20in\x20the\x20.proto\x20file,\x20if\x20presen\ + t.\n\x20\x20\x20-\x20Otherwise,\x20the\x20basename\x20of\x20the\x20.prot\ + o\x20file,\x20without\x20extension.\n\n\r\n\x05\x04\n\x02\x06\x04\x12\ + \x04\x87\x03\x02\n\n\r\n\x05\x04\n\x02\x06\x05\x12\x04\x87\x03\x0b\x11\n\ + \r\n\x05\x04\n\x02\x06\x01\x12\x04\x87\x03\x12\x1c\n\r\n\x05\x04\n\x02\ + \x06\x03\x12\x04\x87\x03\x1f!\n\xd4\x04\n\x04\x04\n\x02\x07\x12\x04\x96\ + \x03\x02;\x1a\xc5\x04\x20Should\x20generic\x20services\x20be\x20generate\ + d\x20in\x20each\x20language?\x20\x20\"Generic\"\x20services\n\x20are\x20\ + not\x20specific\x20to\x20any\x20particular\x20RPC\x20system.\x20\x20They\ + \x20are\x20generated\x20by\x20the\n\x20main\x20code\x20generators\x20in\ + \x20each\x20language\x20(without\x20additional\x20plugins).\n\x20Generic\ + \x20services\x20were\x20the\x20only\x20kind\x20of\x20service\x20generati\ + on\x20supported\x20by\n\x20early\x20versions\x20of\x20google.protobuf.\n\ + \n\x20Generic\x20services\x20are\x20now\x20considered\x20deprecated\x20i\ + n\x20favor\x20of\x20using\x20plugins\n\x20that\x20generate\x20code\x20sp\ + ecific\x20to\x20your\x20particular\x20RPC\x20system.\x20\x20Therefore,\n\ + \x20these\x20default\x20to\x20false.\x20\x20Old\x20code\x20which\x20depe\ + nds\x20on\x20generic\x20services\x20should\n\x20explicitly\x20set\x20the\ + m\x20to\x20true.\n\n\r\n\x05\x04\n\x02\x07\x04\x12\x04\x96\x03\x02\n\n\r\ + \n\x05\x04\n\x02\x07\x05\x12\x04\x96\x03\x0b\x0f\n\r\n\x05\x04\n\x02\x07\ + \x01\x12\x04\x96\x03\x10#\n\r\n\x05\x04\n\x02\x07\x03\x12\x04\x96\x03&(\ + \n\r\n\x05\x04\n\x02\x07\x08\x12\x04\x96\x03):\n\r\n\x05\x04\n\x02\x07\ + \x07\x12\x04\x96\x0349\n\x0c\n\x04\x04\n\x02\x08\x12\x04\x97\x03\x02=\n\ + \r\n\x05\x04\n\x02\x08\x04\x12\x04\x97\x03\x02\n\n\r\n\x05\x04\n\x02\x08\ + \x05\x12\x04\x97\x03\x0b\x0f\n\r\n\x05\x04\n\x02\x08\x01\x12\x04\x97\x03\ + \x10%\n\r\n\x05\x04\n\x02\x08\x03\x12\x04\x97\x03(*\n\r\n\x05\x04\n\x02\ + \x08\x08\x12\x04\x97\x03+<\n\r\n\x05\x04\n\x02\x08\x07\x12\x04\x97\x036;\ + \n\x0c\n\x04\x04\n\x02\t\x12\x04\x98\x03\x02;\n\r\n\x05\x04\n\x02\t\x04\ + \x12\x04\x98\x03\x02\n\n\r\n\x05\x04\n\x02\t\x05\x12\x04\x98\x03\x0b\x0f\ + \n\r\n\x05\x04\n\x02\t\x01\x12\x04\x98\x03\x10#\n\r\n\x05\x04\n\x02\t\ + \x03\x12\x04\x98\x03&(\n\r\n\x05\x04\n\x02\t\x08\x12\x04\x98\x03):\n\r\n\ + \x05\x04\n\x02\t\x07\x12\x04\x98\x0349\n\x0c\n\x04\x04\n\x02\n\x12\x04\ + \x99\x03\x02<\n\r\n\x05\x04\n\x02\n\x04\x12\x04\x99\x03\x02\n\n\r\n\x05\ + \x04\n\x02\n\x05\x12\x04\x99\x03\x0b\x0f\n\r\n\x05\x04\n\x02\n\x01\x12\ + \x04\x99\x03\x10$\n\r\n\x05\x04\n\x02\n\x03\x12\x04\x99\x03')\n\r\n\x05\ + \x04\n\x02\n\x08\x12\x04\x99\x03*;\n\r\n\x05\x04\n\x02\n\x07\x12\x04\x99\ + \x035:\n\xf3\x01\n\x04\x04\n\x02\x0b\x12\x04\x9f\x03\x022\x1a\xe4\x01\ + \x20Is\x20this\x20file\x20deprecated?\n\x20Depending\x20on\x20the\x20tar\ + get\x20platform,\x20this\x20can\x20emit\x20Deprecated\x20annotations\n\ + \x20for\x20everything\x20in\x20the\x20file,\x20or\x20it\x20will\x20be\ + \x20completely\x20ignored;\x20in\x20the\x20very\n\x20least,\x20this\x20i\ + s\x20a\x20formalization\x20for\x20deprecating\x20files.\n\n\r\n\x05\x04\ + \n\x02\x0b\x04\x12\x04\x9f\x03\x02\n\n\r\n\x05\x04\n\x02\x0b\x05\x12\x04\ + \x9f\x03\x0b\x0f\n\r\n\x05\x04\n\x02\x0b\x01\x12\x04\x9f\x03\x10\x1a\n\r\ + \n\x05\x04\n\x02\x0b\x03\x12\x04\x9f\x03\x1d\x1f\n\r\n\x05\x04\n\x02\x0b\ + \x08\x12\x04\x9f\x03\x201\n\r\n\x05\x04\n\x02\x0b\x07\x12\x04\x9f\x03+0\ + \n\x7f\n\x04\x04\n\x02\x0c\x12\x04\xa3\x03\x027\x1aq\x20Enables\x20the\ + \x20use\x20of\x20arenas\x20for\x20the\x20proto\x20messages\x20in\x20this\ + \x20file.\x20This\x20applies\n\x20only\x20to\x20generated\x20classes\x20\ + for\x20C++.\n\n\r\n\x05\x04\n\x02\x0c\x04\x12\x04\xa3\x03\x02\n\n\r\n\ + \x05\x04\n\x02\x0c\x05\x12\x04\xa3\x03\x0b\x0f\n\r\n\x05\x04\n\x02\x0c\ + \x01\x12\x04\xa3\x03\x10\x20\n\r\n\x05\x04\n\x02\x0c\x03\x12\x04\xa3\x03\ + #%\n\r\n\x05\x04\n\x02\x0c\x08\x12\x04\xa3\x03&6\n\r\n\x05\x04\n\x02\x0c\ + \x07\x12\x04\xa3\x0315\n\x92\x01\n\x04\x04\n\x02\r\x12\x04\xa8\x03\x02)\ + \x1a\x83\x01\x20Sets\x20the\x20objective\x20c\x20class\x20prefix\x20whic\ + h\x20is\x20prepended\x20to\x20all\x20objective\x20c\n\x20generated\x20cl\ + asses\x20from\x20this\x20.proto.\x20There\x20is\x20no\x20default.\n\n\r\ + \n\x05\x04\n\x02\r\x04\x12\x04\xa8\x03\x02\n\n\r\n\x05\x04\n\x02\r\x05\ + \x12\x04\xa8\x03\x0b\x11\n\r\n\x05\x04\n\x02\r\x01\x12\x04\xa8\x03\x12#\ + \n\r\n\x05\x04\n\x02\r\x03\x12\x04\xa8\x03&(\nI\n\x04\x04\n\x02\x0e\x12\ + \x04\xab\x03\x02(\x1a;\x20Namespace\x20for\x20generated\x20classes;\x20d\ + efaults\x20to\x20the\x20package.\n\n\r\n\x05\x04\n\x02\x0e\x04\x12\x04\ + \xab\x03\x02\n\n\r\n\x05\x04\n\x02\x0e\x05\x12\x04\xab\x03\x0b\x11\n\r\n\ + \x05\x04\n\x02\x0e\x01\x12\x04\xab\x03\x12\"\n\r\n\x05\x04\n\x02\x0e\x03\ + \x12\x04\xab\x03%'\n\x91\x02\n\x04\x04\n\x02\x0f\x12\x04\xb1\x03\x02$\ + \x1a\x82\x02\x20By\x20default\x20Swift\x20generators\x20will\x20take\x20\ + the\x20proto\x20package\x20and\x20CamelCase\x20it\n\x20replacing\x20'.'\ + \x20with\x20underscore\x20and\x20use\x20that\x20to\x20prefix\x20the\x20t\ + ypes/symbols\n\x20defined.\x20When\x20this\x20options\x20is\x20provided,\ + \x20they\x20will\x20use\x20this\x20value\x20instead\n\x20to\x20prefix\ + \x20the\x20types/symbols\x20defined.\n\n\r\n\x05\x04\n\x02\x0f\x04\x12\ + \x04\xb1\x03\x02\n\n\r\n\x05\x04\n\x02\x0f\x05\x12\x04\xb1\x03\x0b\x11\n\ + \r\n\x05\x04\n\x02\x0f\x01\x12\x04\xb1\x03\x12\x1e\n\r\n\x05\x04\n\x02\ + \x0f\x03\x12\x04\xb1\x03!#\n~\n\x04\x04\n\x02\x10\x12\x04\xb5\x03\x02(\ + \x1ap\x20Sets\x20the\x20php\x20class\x20prefix\x20which\x20is\x20prepend\ + ed\x20to\x20all\x20php\x20generated\x20classes\n\x20from\x20this\x20.pro\ + to.\x20Default\x20is\x20empty.\n\n\r\n\x05\x04\n\x02\x10\x04\x12\x04\xb5\ + \x03\x02\n\n\r\n\x05\x04\n\x02\x10\x05\x12\x04\xb5\x03\x0b\x11\n\r\n\x05\ + \x04\n\x02\x10\x01\x12\x04\xb5\x03\x12\"\n\r\n\x05\x04\n\x02\x10\x03\x12\ + \x04\xb5\x03%'\n\xbe\x01\n\x04\x04\n\x02\x11\x12\x04\xba\x03\x02%\x1a\ + \xaf\x01\x20Use\x20this\x20option\x20to\x20change\x20the\x20namespace\ + \x20of\x20php\x20generated\x20classes.\x20Default\n\x20is\x20empty.\x20W\ + hen\x20this\x20option\x20is\x20empty,\x20the\x20package\x20name\x20will\ + \x20be\x20used\x20for\n\x20determining\x20the\x20namespace.\n\n\r\n\x05\ + \x04\n\x02\x11\x04\x12\x04\xba\x03\x02\n\n\r\n\x05\x04\n\x02\x11\x05\x12\ + \x04\xba\x03\x0b\x11\n\r\n\x05\x04\n\x02\x11\x01\x12\x04\xba\x03\x12\x1f\ + \n\r\n\x05\x04\n\x02\x11\x03\x12\x04\xba\x03\"$\n\xca\x01\n\x04\x04\n\ + \x02\x12\x12\x04\xbf\x03\x02.\x1a\xbb\x01\x20Use\x20this\x20option\x20to\ + \x20change\x20the\x20namespace\x20of\x20php\x20generated\x20metadata\x20\ + classes.\n\x20Default\x20is\x20empty.\x20When\x20this\x20option\x20is\ + \x20empty,\x20the\x20proto\x20file\x20name\x20will\x20be\n\x20used\x20fo\ + r\x20determining\x20the\x20namespace.\n\n\r\n\x05\x04\n\x02\x12\x04\x12\ + \x04\xbf\x03\x02\n\n\r\n\x05\x04\n\x02\x12\x05\x12\x04\xbf\x03\x0b\x11\n\ + \r\n\x05\x04\n\x02\x12\x01\x12\x04\xbf\x03\x12(\n\r\n\x05\x04\n\x02\x12\ + \x03\x12\x04\xbf\x03+-\n\xc2\x01\n\x04\x04\n\x02\x13\x12\x04\xc4\x03\x02\ + $\x1a\xb3\x01\x20Use\x20this\x20option\x20to\x20change\x20the\x20package\ + \x20of\x20ruby\x20generated\x20classes.\x20Default\n\x20is\x20empty.\x20\ + When\x20this\x20option\x20is\x20not\x20set,\x20the\x20package\x20name\ + \x20will\x20be\x20used\x20for\n\x20determining\x20the\x20ruby\x20package\ + .\n\n\r\n\x05\x04\n\x02\x13\x04\x12\x04\xc4\x03\x02\n\n\r\n\x05\x04\n\ + \x02\x13\x05\x12\x04\xc4\x03\x0b\x11\n\r\n\x05\x04\n\x02\x13\x01\x12\x04\ + \xc4\x03\x12\x1e\n\r\n\x05\x04\n\x02\x13\x03\x12\x04\xc4\x03!#\n|\n\x04\ + \x04\n\x02\x14\x12\x04\xc9\x03\x02:\x1an\x20The\x20parser\x20stores\x20o\ + ptions\x20it\x20doesn't\x20recognize\x20here.\n\x20See\x20the\x20documen\ + tation\x20for\x20the\x20\"Options\"\x20section\x20above.\n\n\r\n\x05\x04\ + \n\x02\x14\x04\x12\x04\xc9\x03\x02\n\n\r\n\x05\x04\n\x02\x14\x06\x12\x04\ + \xc9\x03\x0b\x1e\n\r\n\x05\x04\n\x02\x14\x01\x12\x04\xc9\x03\x1f3\n\r\n\ + \x05\x04\n\x02\x14\x03\x12\x04\xc9\x0369\n\x87\x01\n\x03\x04\n\x05\x12\ + \x04\xcd\x03\x02\x19\x1az\x20Clients\x20can\x20define\x20custom\x20optio\ + ns\x20in\x20extensions\x20of\x20this\x20message.\n\x20See\x20the\x20docu\ + mentation\x20for\x20the\x20\"Options\"\x20section\x20above.\n\n\x0c\n\ + \x04\x04\n\x05\0\x12\x04\xcd\x03\r\x18\n\r\n\x05\x04\n\x05\0\x01\x12\x04\ + \xcd\x03\r\x11\n\r\n\x05\x04\n\x05\0\x02\x12\x04\xcd\x03\x15\x18\n\x0b\n\ + \x03\x04\n\t\x12\x04\xcf\x03\x02\x0e\n\x0c\n\x04\x04\n\t\0\x12\x04\xcf\ + \x03\x0b\r\n\r\n\x05\x04\n\t\0\x01\x12\x04\xcf\x03\x0b\r\n\r\n\x05\x04\n\ + \t\0\x02\x12\x04\xcf\x03\x0b\r\n\x0c\n\x02\x04\x0b\x12\x06\xd2\x03\0\x92\ + \x04\x01\n\x0b\n\x03\x04\x0b\x01\x12\x04\xd2\x03\x08\x16\n\xd8\x05\n\x04\ + \x04\x0b\x02\0\x12\x04\xe5\x03\x02>\x1a\xc9\x05\x20Set\x20true\x20to\x20\ + use\x20the\x20old\x20proto1\x20MessageSet\x20wire\x20format\x20for\x20ex\ + tensions.\n\x20This\x20is\x20provided\x20for\x20backwards-compatibility\ + \x20with\x20the\x20MessageSet\x20wire\n\x20format.\x20\x20You\x20should\ + \x20not\x20use\x20this\x20for\x20any\x20other\x20reason:\x20\x20It's\x20\ + less\n\x20efficient,\x20has\x20fewer\x20features,\x20and\x20is\x20more\ + \x20complicated.\n\n\x20The\x20message\x20must\x20be\x20defined\x20exact\ + ly\x20as\x20follows:\n\x20\x20\x20message\x20Foo\x20{\n\x20\x20\x20\x20\ + \x20option\x20message_set_wire_format\x20=\x20true;\n\x20\x20\x20\x20\ + \x20extensions\x204\x20to\x20max;\n\x20\x20\x20}\n\x20Note\x20that\x20th\ + e\x20message\x20cannot\x20have\x20any\x20defined\x20fields;\x20MessageSe\ + ts\x20only\n\x20have\x20extensions.\n\n\x20All\x20extensions\x20of\x20yo\ + ur\x20type\x20must\x20be\x20singular\x20messages;\x20e.g.\x20they\x20can\ + not\n\x20be\x20int32s,\x20enums,\x20or\x20repeated\x20messages.\n\n\x20B\ + ecause\x20this\x20is\x20an\x20option,\x20the\x20above\x20two\x20restrict\ + ions\x20are\x20not\x20enforced\x20by\n\x20the\x20protocol\x20compiler.\n\ + \n\r\n\x05\x04\x0b\x02\0\x04\x12\x04\xe5\x03\x02\n\n\r\n\x05\x04\x0b\x02\ + \0\x05\x12\x04\xe5\x03\x0b\x0f\n\r\n\x05\x04\x0b\x02\0\x01\x12\x04\xe5\ + \x03\x10'\n\r\n\x05\x04\x0b\x02\0\x03\x12\x04\xe5\x03*+\n\r\n\x05\x04\ + \x0b\x02\0\x08\x12\x04\xe5\x03,=\n\r\n\x05\x04\x0b\x02\0\x07\x12\x04\xe5\ + \x037<\n\xeb\x01\n\x04\x04\x0b\x02\x01\x12\x04\xea\x03\x02F\x1a\xdc\x01\ + \x20Disables\x20the\x20generation\x20of\x20the\x20standard\x20\"descript\ + or()\"\x20accessor,\x20which\x20can\n\x20conflict\x20with\x20a\x20field\ + \x20of\x20the\x20same\x20name.\x20\x20This\x20is\x20meant\x20to\x20make\ + \x20migration\n\x20from\x20proto1\x20easier;\x20new\x20code\x20should\ + \x20avoid\x20fields\x20named\x20\"descriptor\".\n\n\r\n\x05\x04\x0b\x02\ + \x01\x04\x12\x04\xea\x03\x02\n\n\r\n\x05\x04\x0b\x02\x01\x05\x12\x04\xea\ + \x03\x0b\x0f\n\r\n\x05\x04\x0b\x02\x01\x01\x12\x04\xea\x03\x10/\n\r\n\ + \x05\x04\x0b\x02\x01\x03\x12\x04\xea\x0323\n\r\n\x05\x04\x0b\x02\x01\x08\ + \x12\x04\xea\x034E\n\r\n\x05\x04\x0b\x02\x01\x07\x12\x04\xea\x03?D\n\xee\ + \x01\n\x04\x04\x0b\x02\x02\x12\x04\xf0\x03\x021\x1a\xdf\x01\x20Is\x20thi\ + s\x20message\x20deprecated?\n\x20Depending\x20on\x20the\x20target\x20pla\ + tform,\x20this\x20can\x20emit\x20Deprecated\x20annotations\n\x20for\x20t\ + he\x20message,\x20or\x20it\x20will\x20be\x20completely\x20ignored;\x20in\ + \x20the\x20very\x20least,\n\x20this\x20is\x20a\x20formalization\x20for\ + \x20deprecating\x20messages.\n\n\r\n\x05\x04\x0b\x02\x02\x04\x12\x04\xf0\ + \x03\x02\n\n\r\n\x05\x04\x0b\x02\x02\x05\x12\x04\xf0\x03\x0b\x0f\n\r\n\ + \x05\x04\x0b\x02\x02\x01\x12\x04\xf0\x03\x10\x1a\n\r\n\x05\x04\x0b\x02\ + \x02\x03\x12\x04\xf0\x03\x1d\x1e\n\r\n\x05\x04\x0b\x02\x02\x08\x12\x04\ + \xf0\x03\x1f0\n\r\n\x05\x04\x0b\x02\x02\x07\x12\x04\xf0\x03*/\n\xa0\x06\ + \n\x04\x04\x0b\x02\x03\x12\x04\x87\x04\x02\x1e\x1a\x91\x06\x20Whether\ + \x20the\x20message\x20is\x20an\x20automatically\x20generated\x20map\x20e\ + ntry\x20type\x20for\x20the\n\x20maps\x20field.\n\n\x20For\x20maps\x20fie\ + lds:\n\x20\x20\x20\x20\x20map<KeyType,\x20ValueType>\x20map_field\x20=\ + \x201;\n\x20The\x20parsed\x20descriptor\x20looks\x20like:\n\x20\x20\x20\ + \x20\x20message\x20MapFieldEntry\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\ + \x20option\x20map_entry\x20=\x20true;\n\x20\x20\x20\x20\x20\x20\x20\x20\ + \x20optional\x20KeyType\x20key\x20=\x201;\n\x20\x20\x20\x20\x20\x20\x20\ + \x20\x20optional\x20ValueType\x20value\x20=\x202;\n\x20\x20\x20\x20\x20}\ + \n\x20\x20\x20\x20\x20repeated\x20MapFieldEntry\x20map_field\x20=\x201;\ + \n\n\x20Implementations\x20may\x20choose\x20not\x20to\x20generate\x20the\ + \x20map_entry=true\x20message,\x20but\n\x20use\x20a\x20native\x20map\x20\ + in\x20the\x20target\x20language\x20to\x20hold\x20the\x20keys\x20and\x20v\ + alues.\n\x20The\x20reflection\x20APIs\x20in\x20such\x20implementations\ + \x20still\x20need\x20to\x20work\x20as\n\x20if\x20the\x20field\x20is\x20a\ + \x20repeated\x20message\x20field.\n\n\x20NOTE:\x20Do\x20not\x20set\x20th\ + e\x20option\x20in\x20.proto\x20files.\x20Always\x20use\x20the\x20maps\ + \x20syntax\n\x20instead.\x20The\x20option\x20should\x20only\x20be\x20imp\ + licitly\x20set\x20by\x20the\x20proto\x20compiler\n\x20parser.\n\n\r\n\ + \x05\x04\x0b\x02\x03\x04\x12\x04\x87\x04\x02\n\n\r\n\x05\x04\x0b\x02\x03\ + \x05\x12\x04\x87\x04\x0b\x0f\n\r\n\x05\x04\x0b\x02\x03\x01\x12\x04\x87\ + \x04\x10\x19\n\r\n\x05\x04\x0b\x02\x03\x03\x12\x04\x87\x04\x1c\x1d\n$\n\ + \x03\x04\x0b\t\x12\x04\x89\x04\x02\r\"\x17\x20javalite_serializable\n\n\ + \x0c\n\x04\x04\x0b\t\0\x12\x04\x89\x04\x0b\x0c\n\r\n\x05\x04\x0b\t\0\x01\ + \x12\x04\x89\x04\x0b\x0c\n\r\n\x05\x04\x0b\t\0\x02\x12\x04\x89\x04\x0b\ + \x0c\n\x1f\n\x03\x04\x0b\t\x12\x04\x8a\x04\x02\r\"\x12\x20javanano_as_li\ + te\n\n\x0c\n\x04\x04\x0b\t\x01\x12\x04\x8a\x04\x0b\x0c\n\r\n\x05\x04\x0b\ + \t\x01\x01\x12\x04\x8a\x04\x0b\x0c\n\r\n\x05\x04\x0b\t\x01\x02\x12\x04\ + \x8a\x04\x0b\x0c\nO\n\x04\x04\x0b\x02\x04\x12\x04\x8e\x04\x02:\x1aA\x20T\ + he\x20parser\x20stores\x20options\x20it\x20doesn't\x20recognize\x20here.\ + \x20See\x20above.\n\n\r\n\x05\x04\x0b\x02\x04\x04\x12\x04\x8e\x04\x02\n\ + \n\r\n\x05\x04\x0b\x02\x04\x06\x12\x04\x8e\x04\x0b\x1e\n\r\n\x05\x04\x0b\ + \x02\x04\x01\x12\x04\x8e\x04\x1f3\n\r\n\x05\x04\x0b\x02\x04\x03\x12\x04\ + \x8e\x0469\nZ\n\x03\x04\x0b\x05\x12\x04\x91\x04\x02\x19\x1aM\x20Clients\ + \x20can\x20define\x20custom\x20options\x20in\x20extensions\x20of\x20this\ + \x20message.\x20See\x20above.\n\n\x0c\n\x04\x04\x0b\x05\0\x12\x04\x91\ + \x04\r\x18\n\r\n\x05\x04\x0b\x05\0\x01\x12\x04\x91\x04\r\x11\n\r\n\x05\ + \x04\x0b\x05\0\x02\x12\x04\x91\x04\x15\x18\n\x0c\n\x02\x04\x0c\x12\x06\ + \x94\x04\0\xef\x04\x01\n\x0b\n\x03\x04\x0c\x01\x12\x04\x94\x04\x08\x14\n\ + \xa3\x02\n\x04\x04\x0c\x02\0\x12\x04\x99\x04\x02.\x1a\x94\x02\x20The\x20\ + ctype\x20option\x20instructs\x20the\x20C++\x20code\x20generator\x20to\ + \x20use\x20a\x20different\n\x20representation\x20of\x20the\x20field\x20t\ + han\x20it\x20normally\x20would.\x20\x20See\x20the\x20specific\n\x20optio\ + ns\x20below.\x20\x20This\x20option\x20is\x20not\x20yet\x20implemented\ + \x20in\x20the\x20open\x20source\n\x20release\x20--\x20sorry,\x20we'll\ + \x20try\x20to\x20include\x20it\x20in\x20a\x20future\x20version!\n\n\r\n\ + \x05\x04\x0c\x02\0\x04\x12\x04\x99\x04\x02\n\n\r\n\x05\x04\x0c\x02\0\x06\ + \x12\x04\x99\x04\x0b\x10\n\r\n\x05\x04\x0c\x02\0\x01\x12\x04\x99\x04\x11\ + \x16\n\r\n\x05\x04\x0c\x02\0\x03\x12\x04\x99\x04\x19\x1a\n\r\n\x05\x04\ + \x0c\x02\0\x08\x12\x04\x99\x04\x1b-\n\r\n\x05\x04\x0c\x02\0\x07\x12\x04\ + \x99\x04&,\n\x0e\n\x04\x04\x0c\x04\0\x12\x06\x9a\x04\x02\xa1\x04\x03\n\r\ + \n\x05\x04\x0c\x04\0\x01\x12\x04\x9a\x04\x07\x0c\n\x1f\n\x06\x04\x0c\x04\ + \0\x02\0\x12\x04\x9c\x04\x04\x0f\x1a\x0f\x20Default\x20mode.\n\n\x0f\n\ + \x07\x04\x0c\x04\0\x02\0\x01\x12\x04\x9c\x04\x04\n\n\x0f\n\x07\x04\x0c\ + \x04\0\x02\0\x02\x12\x04\x9c\x04\r\x0e\n\x0e\n\x06\x04\x0c\x04\0\x02\x01\ + \x12\x04\x9e\x04\x04\r\n\x0f\n\x07\x04\x0c\x04\0\x02\x01\x01\x12\x04\x9e\ + \x04\x04\x08\n\x0f\n\x07\x04\x0c\x04\0\x02\x01\x02\x12\x04\x9e\x04\x0b\ + \x0c\n\x0e\n\x06\x04\x0c\x04\0\x02\x02\x12\x04\xa0\x04\x04\x15\n\x0f\n\ + \x07\x04\x0c\x04\0\x02\x02\x01\x12\x04\xa0\x04\x04\x10\n\x0f\n\x07\x04\ + \x0c\x04\0\x02\x02\x02\x12\x04\xa0\x04\x13\x14\n\xda\x02\n\x04\x04\x0c\ + \x02\x01\x12\x04\xa7\x04\x02\x1b\x1a\xcb\x02\x20The\x20packed\x20option\ + \x20can\x20be\x20enabled\x20for\x20repeated\x20primitive\x20fields\x20to\ + \x20enable\n\x20a\x20more\x20efficient\x20representation\x20on\x20the\ + \x20wire.\x20Rather\x20than\x20repeatedly\n\x20writing\x20the\x20tag\x20\ + and\x20type\x20for\x20each\x20element,\x20the\x20entire\x20array\x20is\ + \x20encoded\x20as\n\x20a\x20single\x20length-delimited\x20blob.\x20In\ + \x20proto3,\x20only\x20explicit\x20setting\x20it\x20to\n\x20false\x20wil\ + l\x20avoid\x20using\x20packed\x20encoding.\n\n\r\n\x05\x04\x0c\x02\x01\ + \x04\x12\x04\xa7\x04\x02\n\n\r\n\x05\x04\x0c\x02\x01\x05\x12\x04\xa7\x04\ + \x0b\x0f\n\r\n\x05\x04\x0c\x02\x01\x01\x12\x04\xa7\x04\x10\x16\n\r\n\x05\ + \x04\x0c\x02\x01\x03\x12\x04\xa7\x04\x19\x1a\n\x9a\x05\n\x04\x04\x0c\x02\ + \x02\x12\x04\xb4\x04\x023\x1a\x8b\x05\x20The\x20jstype\x20option\x20dete\ + rmines\x20the\x20JavaScript\x20type\x20used\x20for\x20values\x20of\x20th\ + e\n\x20field.\x20\x20The\x20option\x20is\x20permitted\x20only\x20for\x20\ + 64\x20bit\x20integral\x20and\x20fixed\x20types\n\x20(int64,\x20uint64,\ + \x20sint64,\x20fixed64,\x20sfixed64).\x20\x20A\x20field\x20with\x20jstyp\ + e\x20JS_STRING\n\x20is\x20represented\x20as\x20JavaScript\x20string,\x20\ + which\x20avoids\x20loss\x20of\x20precision\x20that\n\x20can\x20happen\ + \x20when\x20a\x20large\x20value\x20is\x20converted\x20to\x20a\x20floatin\ + g\x20point\x20JavaScript.\n\x20Specifying\x20JS_NUMBER\x20for\x20the\x20\ + jstype\x20causes\x20the\x20generated\x20JavaScript\x20code\x20to\n\x20us\ + e\x20the\x20JavaScript\x20\"number\"\x20type.\x20\x20The\x20behavior\x20\ + of\x20the\x20default\x20option\n\x20JS_NORMAL\x20is\x20implementation\ + \x20dependent.\n\n\x20This\x20option\x20is\x20an\x20enum\x20to\x20permit\ + \x20additional\x20types\x20to\x20be\x20added,\x20e.g.\n\x20goog.math.Int\ + eger.\n\n\r\n\x05\x04\x0c\x02\x02\x04\x12\x04\xb4\x04\x02\n\n\r\n\x05\ + \x04\x0c\x02\x02\x06\x12\x04\xb4\x04\x0b\x11\n\r\n\x05\x04\x0c\x02\x02\ + \x01\x12\x04\xb4\x04\x12\x18\n\r\n\x05\x04\x0c\x02\x02\x03\x12\x04\xb4\ + \x04\x1b\x1c\n\r\n\x05\x04\x0c\x02\x02\x08\x12\x04\xb4\x04\x1d2\n\r\n\ + \x05\x04\x0c\x02\x02\x07\x12\x04\xb4\x04(1\n\x0e\n\x04\x04\x0c\x04\x01\ + \x12\x06\xb5\x04\x02\xbe\x04\x03\n\r\n\x05\x04\x0c\x04\x01\x01\x12\x04\ + \xb5\x04\x07\r\n'\n\x06\x04\x0c\x04\x01\x02\0\x12\x04\xb7\x04\x04\x12\ + \x1a\x17\x20Use\x20the\x20default\x20type.\n\n\x0f\n\x07\x04\x0c\x04\x01\ + \x02\0\x01\x12\x04\xb7\x04\x04\r\n\x0f\n\x07\x04\x0c\x04\x01\x02\0\x02\ + \x12\x04\xb7\x04\x10\x11\n)\n\x06\x04\x0c\x04\x01\x02\x01\x12\x04\xba\ + \x04\x04\x12\x1a\x19\x20Use\x20JavaScript\x20strings.\n\n\x0f\n\x07\x04\ + \x0c\x04\x01\x02\x01\x01\x12\x04\xba\x04\x04\r\n\x0f\n\x07\x04\x0c\x04\ + \x01\x02\x01\x02\x12\x04\xba\x04\x10\x11\n)\n\x06\x04\x0c\x04\x01\x02\ + \x02\x12\x04\xbd\x04\x04\x12\x1a\x19\x20Use\x20JavaScript\x20numbers.\n\ + \n\x0f\n\x07\x04\x0c\x04\x01\x02\x02\x01\x12\x04\xbd\x04\x04\r\n\x0f\n\ + \x07\x04\x0c\x04\x01\x02\x02\x02\x12\x04\xbd\x04\x10\x11\n\xef\x0c\n\x04\ + \x04\x0c\x02\x03\x12\x04\xdc\x04\x02+\x1a\xe0\x0c\x20Should\x20this\x20f\ + ield\x20be\x20parsed\x20lazily?\x20\x20Lazy\x20applies\x20only\x20to\x20\ + message-type\n\x20fields.\x20\x20It\x20means\x20that\x20when\x20the\x20o\ + uter\x20message\x20is\x20initially\x20parsed,\x20the\n\x20inner\x20messa\ + ge's\x20contents\x20will\x20not\x20be\x20parsed\x20but\x20instead\x20sto\ + red\x20in\x20encoded\n\x20form.\x20\x20The\x20inner\x20message\x20will\ + \x20actually\x20be\x20parsed\x20when\x20it\x20is\x20first\x20accessed.\n\ + \n\x20This\x20is\x20only\x20a\x20hint.\x20\x20Implementations\x20are\x20\ + free\x20to\x20choose\x20whether\x20to\x20use\n\x20eager\x20or\x20lazy\ + \x20parsing\x20regardless\x20of\x20the\x20value\x20of\x20this\x20option.\ + \x20\x20However,\n\x20setting\x20this\x20option\x20true\x20suggests\x20t\ + hat\x20the\x20protocol\x20author\x20believes\x20that\n\x20using\x20lazy\ + \x20parsing\x20on\x20this\x20field\x20is\x20worth\x20the\x20additional\ + \x20bookkeeping\n\x20overhead\x20typically\x20needed\x20to\x20implement\ + \x20it.\n\n\x20This\x20option\x20does\x20not\x20affect\x20the\x20public\ + \x20interface\x20of\x20any\x20generated\x20code;\n\x20all\x20method\x20s\ + ignatures\x20remain\x20the\x20same.\x20\x20Furthermore,\x20thread-safety\ + \x20of\x20the\n\x20interface\x20is\x20not\x20affected\x20by\x20this\x20o\ + ption;\x20const\x20methods\x20remain\x20safe\x20to\n\x20call\x20from\x20\ + multiple\x20threads\x20concurrently,\x20while\x20non-const\x20methods\ + \x20continue\n\x20to\x20require\x20exclusive\x20access.\n\n\n\x20Note\ + \x20that\x20implementations\x20may\x20choose\x20not\x20to\x20check\x20re\ + quired\x20fields\x20within\n\x20a\x20lazy\x20sub-message.\x20\x20That\ + \x20is,\x20calling\x20IsInitialized()\x20on\x20the\x20outer\x20message\n\ + \x20may\x20return\x20true\x20even\x20if\x20the\x20inner\x20message\x20ha\ + s\x20missing\x20required\x20fields.\n\x20This\x20is\x20necessary\x20beca\ + use\x20otherwise\x20the\x20inner\x20message\x20would\x20have\x20to\x20be\ + \n\x20parsed\x20in\x20order\x20to\x20perform\x20the\x20check,\x20defeati\ + ng\x20the\x20purpose\x20of\x20lazy\n\x20parsing.\x20\x20An\x20implementa\ + tion\x20which\x20chooses\x20not\x20to\x20check\x20required\x20fields\n\ + \x20must\x20be\x20consistent\x20about\x20it.\x20\x20That\x20is,\x20for\ + \x20any\x20particular\x20sub-message,\x20the\n\x20implementation\x20must\ + \x20either\x20*always*\x20check\x20its\x20required\x20fields,\x20or\x20*\ + never*\n\x20check\x20its\x20required\x20fields,\x20regardless\x20of\x20w\ + hether\x20or\x20not\x20the\x20message\x20has\n\x20been\x20parsed.\n\n\r\ + \n\x05\x04\x0c\x02\x03\x04\x12\x04\xdc\x04\x02\n\n\r\n\x05\x04\x0c\x02\ + \x03\x05\x12\x04\xdc\x04\x0b\x0f\n\r\n\x05\x04\x0c\x02\x03\x01\x12\x04\ + \xdc\x04\x10\x14\n\r\n\x05\x04\x0c\x02\x03\x03\x12\x04\xdc\x04\x17\x18\n\ + \r\n\x05\x04\x0c\x02\x03\x08\x12\x04\xdc\x04\x19*\n\r\n\x05\x04\x0c\x02\ + \x03\x07\x12\x04\xdc\x04$)\n\xe8\x01\n\x04\x04\x0c\x02\x04\x12\x04\xe2\ + \x04\x021\x1a\xd9\x01\x20Is\x20this\x20field\x20deprecated?\n\x20Dependi\ + ng\x20on\x20the\x20target\x20platform,\x20this\x20can\x20emit\x20Depreca\ + ted\x20annotations\n\x20for\x20accessors,\x20or\x20it\x20will\x20be\x20c\ + ompletely\x20ignored;\x20in\x20the\x20very\x20least,\x20this\n\x20is\x20\ + a\x20formalization\x20for\x20deprecating\x20fields.\n\n\r\n\x05\x04\x0c\ + \x02\x04\x04\x12\x04\xe2\x04\x02\n\n\r\n\x05\x04\x0c\x02\x04\x05\x12\x04\ + \xe2\x04\x0b\x0f\n\r\n\x05\x04\x0c\x02\x04\x01\x12\x04\xe2\x04\x10\x1a\n\ + \r\n\x05\x04\x0c\x02\x04\x03\x12\x04\xe2\x04\x1d\x1e\n\r\n\x05\x04\x0c\ + \x02\x04\x08\x12\x04\xe2\x04\x1f0\n\r\n\x05\x04\x0c\x02\x04\x07\x12\x04\ + \xe2\x04*/\n?\n\x04\x04\x0c\x02\x05\x12\x04\xe5\x04\x02,\x1a1\x20For\x20\ + Google-internal\x20migration\x20only.\x20Do\x20not\x20use.\n\n\r\n\x05\ + \x04\x0c\x02\x05\x04\x12\x04\xe5\x04\x02\n\n\r\n\x05\x04\x0c\x02\x05\x05\ + \x12\x04\xe5\x04\x0b\x0f\n\r\n\x05\x04\x0c\x02\x05\x01\x12\x04\xe5\x04\ + \x10\x14\n\r\n\x05\x04\x0c\x02\x05\x03\x12\x04\xe5\x04\x17\x19\n\r\n\x05\ + \x04\x0c\x02\x05\x08\x12\x04\xe5\x04\x1a+\n\r\n\x05\x04\x0c\x02\x05\x07\ + \x12\x04\xe5\x04%*\nO\n\x04\x04\x0c\x02\x06\x12\x04\xe9\x04\x02:\x1aA\ + \x20The\x20parser\x20stores\x20options\x20it\x20doesn't\x20recognize\x20\ + here.\x20See\x20above.\n\n\r\n\x05\x04\x0c\x02\x06\x04\x12\x04\xe9\x04\ + \x02\n\n\r\n\x05\x04\x0c\x02\x06\x06\x12\x04\xe9\x04\x0b\x1e\n\r\n\x05\ + \x04\x0c\x02\x06\x01\x12\x04\xe9\x04\x1f3\n\r\n\x05\x04\x0c\x02\x06\x03\ + \x12\x04\xe9\x0469\nZ\n\x03\x04\x0c\x05\x12\x04\xec\x04\x02\x19\x1aM\x20\ + Clients\x20can\x20define\x20custom\x20options\x20in\x20extensions\x20of\ + \x20this\x20message.\x20See\x20above.\n\n\x0c\n\x04\x04\x0c\x05\0\x12\ + \x04\xec\x04\r\x18\n\r\n\x05\x04\x0c\x05\0\x01\x12\x04\xec\x04\r\x11\n\r\ + \n\x05\x04\x0c\x05\0\x02\x12\x04\xec\x04\x15\x18\n\x1c\n\x03\x04\x0c\t\ + \x12\x04\xee\x04\x02\r\"\x0f\x20removed\x20jtype\n\n\x0c\n\x04\x04\x0c\t\ + \0\x12\x04\xee\x04\x0b\x0c\n\r\n\x05\x04\x0c\t\0\x01\x12\x04\xee\x04\x0b\ + \x0c\n\r\n\x05\x04\x0c\t\0\x02\x12\x04\xee\x04\x0b\x0c\n\x0c\n\x02\x04\r\ + \x12\x06\xf1\x04\0\xf7\x04\x01\n\x0b\n\x03\x04\r\x01\x12\x04\xf1\x04\x08\ + \x14\nO\n\x04\x04\r\x02\0\x12\x04\xf3\x04\x02:\x1aA\x20The\x20parser\x20\ + stores\x20options\x20it\x20doesn't\x20recognize\x20here.\x20See\x20above\ + .\n\n\r\n\x05\x04\r\x02\0\x04\x12\x04\xf3\x04\x02\n\n\r\n\x05\x04\r\x02\ + \0\x06\x12\x04\xf3\x04\x0b\x1e\n\r\n\x05\x04\r\x02\0\x01\x12\x04\xf3\x04\ + \x1f3\n\r\n\x05\x04\r\x02\0\x03\x12\x04\xf3\x0469\nZ\n\x03\x04\r\x05\x12\ + \x04\xf6\x04\x02\x19\x1aM\x20Clients\x20can\x20define\x20custom\x20optio\ + ns\x20in\x20extensions\x20of\x20this\x20message.\x20See\x20above.\n\n\ + \x0c\n\x04\x04\r\x05\0\x12\x04\xf6\x04\r\x18\n\r\n\x05\x04\r\x05\0\x01\ + \x12\x04\xf6\x04\r\x11\n\r\n\x05\x04\r\x05\0\x02\x12\x04\xf6\x04\x15\x18\ + \n\x0c\n\x02\x04\x0e\x12\x06\xf9\x04\0\x8c\x05\x01\n\x0b\n\x03\x04\x0e\ + \x01\x12\x04\xf9\x04\x08\x13\n`\n\x04\x04\x0e\x02\0\x12\x04\xfd\x04\x02\ + \x20\x1aR\x20Set\x20this\x20option\x20to\x20true\x20to\x20allow\x20mappi\ + ng\x20different\x20tag\x20names\x20to\x20the\x20same\n\x20value.\n\n\r\n\ + \x05\x04\x0e\x02\0\x04\x12\x04\xfd\x04\x02\n\n\r\n\x05\x04\x0e\x02\0\x05\ + \x12\x04\xfd\x04\x0b\x0f\n\r\n\x05\x04\x0e\x02\0\x01\x12\x04\xfd\x04\x10\ + \x1b\n\r\n\x05\x04\x0e\x02\0\x03\x12\x04\xfd\x04\x1e\x1f\n\xe5\x01\n\x04\ + \x04\x0e\x02\x01\x12\x04\x83\x05\x021\x1a\xd6\x01\x20Is\x20this\x20enum\ + \x20deprecated?\n\x20Depending\x20on\x20the\x20target\x20platform,\x20th\ + is\x20can\x20emit\x20Deprecated\x20annotations\n\x20for\x20the\x20enum,\ + \x20or\x20it\x20will\x20be\x20completely\x20ignored;\x20in\x20the\x20ver\ + y\x20least,\x20this\n\x20is\x20a\x20formalization\x20for\x20deprecating\ + \x20enums.\n\n\r\n\x05\x04\x0e\x02\x01\x04\x12\x04\x83\x05\x02\n\n\r\n\ + \x05\x04\x0e\x02\x01\x05\x12\x04\x83\x05\x0b\x0f\n\r\n\x05\x04\x0e\x02\ + \x01\x01\x12\x04\x83\x05\x10\x1a\n\r\n\x05\x04\x0e\x02\x01\x03\x12\x04\ + \x83\x05\x1d\x1e\n\r\n\x05\x04\x0e\x02\x01\x08\x12\x04\x83\x05\x1f0\n\r\ + \n\x05\x04\x0e\x02\x01\x07\x12\x04\x83\x05*/\n\x1f\n\x03\x04\x0e\t\x12\ + \x04\x85\x05\x02\r\"\x12\x20javanano_as_lite\n\n\x0c\n\x04\x04\x0e\t\0\ + \x12\x04\x85\x05\x0b\x0c\n\r\n\x05\x04\x0e\t\0\x01\x12\x04\x85\x05\x0b\ + \x0c\n\r\n\x05\x04\x0e\t\0\x02\x12\x04\x85\x05\x0b\x0c\nO\n\x04\x04\x0e\ + \x02\x02\x12\x04\x88\x05\x02:\x1aA\x20The\x20parser\x20stores\x20options\ + \x20it\x20doesn't\x20recognize\x20here.\x20See\x20above.\n\n\r\n\x05\x04\ + \x0e\x02\x02\x04\x12\x04\x88\x05\x02\n\n\r\n\x05\x04\x0e\x02\x02\x06\x12\ + \x04\x88\x05\x0b\x1e\n\r\n\x05\x04\x0e\x02\x02\x01\x12\x04\x88\x05\x1f3\ + \n\r\n\x05\x04\x0e\x02\x02\x03\x12\x04\x88\x0569\nZ\n\x03\x04\x0e\x05\ + \x12\x04\x8b\x05\x02\x19\x1aM\x20Clients\x20can\x20define\x20custom\x20o\ + ptions\x20in\x20extensions\x20of\x20this\x20message.\x20See\x20above.\n\ + \n\x0c\n\x04\x04\x0e\x05\0\x12\x04\x8b\x05\r\x18\n\r\n\x05\x04\x0e\x05\0\ + \x01\x12\x04\x8b\x05\r\x11\n\r\n\x05\x04\x0e\x05\0\x02\x12\x04\x8b\x05\ + \x15\x18\n\x0c\n\x02\x04\x0f\x12\x06\x8e\x05\0\x9a\x05\x01\n\x0b\n\x03\ + \x04\x0f\x01\x12\x04\x8e\x05\x08\x18\n\xf7\x01\n\x04\x04\x0f\x02\0\x12\ + \x04\x93\x05\x021\x1a\xe8\x01\x20Is\x20this\x20enum\x20value\x20deprecat\ + ed?\n\x20Depending\x20on\x20the\x20target\x20platform,\x20this\x20can\ + \x20emit\x20Deprecated\x20annotations\n\x20for\x20the\x20enum\x20value,\ + \x20or\x20it\x20will\x20be\x20completely\x20ignored;\x20in\x20the\x20ver\ + y\x20least,\n\x20this\x20is\x20a\x20formalization\x20for\x20deprecating\ + \x20enum\x20values.\n\n\r\n\x05\x04\x0f\x02\0\x04\x12\x04\x93\x05\x02\n\ + \n\r\n\x05\x04\x0f\x02\0\x05\x12\x04\x93\x05\x0b\x0f\n\r\n\x05\x04\x0f\ + \x02\0\x01\x12\x04\x93\x05\x10\x1a\n\r\n\x05\x04\x0f\x02\0\x03\x12\x04\ + \x93\x05\x1d\x1e\n\r\n\x05\x04\x0f\x02\0\x08\x12\x04\x93\x05\x1f0\n\r\n\ + \x05\x04\x0f\x02\0\x07\x12\x04\x93\x05*/\nO\n\x04\x04\x0f\x02\x01\x12\ + \x04\x96\x05\x02:\x1aA\x20The\x20parser\x20stores\x20options\x20it\x20do\ + esn't\x20recognize\x20here.\x20See\x20above.\n\n\r\n\x05\x04\x0f\x02\x01\ + \x04\x12\x04\x96\x05\x02\n\n\r\n\x05\x04\x0f\x02\x01\x06\x12\x04\x96\x05\ + \x0b\x1e\n\r\n\x05\x04\x0f\x02\x01\x01\x12\x04\x96\x05\x1f3\n\r\n\x05\ + \x04\x0f\x02\x01\x03\x12\x04\x96\x0569\nZ\n\x03\x04\x0f\x05\x12\x04\x99\ + \x05\x02\x19\x1aM\x20Clients\x20can\x20define\x20custom\x20options\x20in\ + \x20extensions\x20of\x20this\x20message.\x20See\x20above.\n\n\x0c\n\x04\ + \x04\x0f\x05\0\x12\x04\x99\x05\r\x18\n\r\n\x05\x04\x0f\x05\0\x01\x12\x04\ + \x99\x05\r\x11\n\r\n\x05\x04\x0f\x05\0\x02\x12\x04\x99\x05\x15\x18\n\x0c\ + \n\x02\x04\x10\x12\x06\x9c\x05\0\xae\x05\x01\n\x0b\n\x03\x04\x10\x01\x12\ + \x04\x9c\x05\x08\x16\n\xd9\x03\n\x04\x04\x10\x02\0\x12\x04\xa7\x05\x022\ + \x1a\xdf\x01\x20Is\x20this\x20service\x20deprecated?\n\x20Depending\x20o\ + n\x20the\x20target\x20platform,\x20this\x20can\x20emit\x20Deprecated\x20\ + annotations\n\x20for\x20the\x20service,\x20or\x20it\x20will\x20be\x20com\ + pletely\x20ignored;\x20in\x20the\x20very\x20least,\n\x20this\x20is\x20a\ + \x20formalization\x20for\x20deprecating\x20services.\n2\xe8\x01\x20Note:\ + \x20\x20Field\x20numbers\x201\x20through\x2032\x20are\x20reserved\x20for\ + \x20Google's\x20internal\x20RPC\n\x20\x20\x20framework.\x20\x20We\x20apo\ + logize\x20for\x20hoarding\x20these\x20numbers\x20to\x20ourselves,\x20but\ + \n\x20\x20\x20we\x20were\x20already\x20using\x20them\x20long\x20before\ + \x20we\x20decided\x20to\x20release\x20Protocol\n\x20\x20\x20Buffers.\n\n\ + \r\n\x05\x04\x10\x02\0\x04\x12\x04\xa7\x05\x02\n\n\r\n\x05\x04\x10\x02\0\ + \x05\x12\x04\xa7\x05\x0b\x0f\n\r\n\x05\x04\x10\x02\0\x01\x12\x04\xa7\x05\ + \x10\x1a\n\r\n\x05\x04\x10\x02\0\x03\x12\x04\xa7\x05\x1d\x1f\n\r\n\x05\ + \x04\x10\x02\0\x08\x12\x04\xa7\x05\x201\n\r\n\x05\x04\x10\x02\0\x07\x12\ + \x04\xa7\x05+0\nO\n\x04\x04\x10\x02\x01\x12\x04\xaa\x05\x02:\x1aA\x20The\ + \x20parser\x20stores\x20options\x20it\x20doesn't\x20recognize\x20here.\ + \x20See\x20above.\n\n\r\n\x05\x04\x10\x02\x01\x04\x12\x04\xaa\x05\x02\n\ + \n\r\n\x05\x04\x10\x02\x01\x06\x12\x04\xaa\x05\x0b\x1e\n\r\n\x05\x04\x10\ + \x02\x01\x01\x12\x04\xaa\x05\x1f3\n\r\n\x05\x04\x10\x02\x01\x03\x12\x04\ + \xaa\x0569\nZ\n\x03\x04\x10\x05\x12\x04\xad\x05\x02\x19\x1aM\x20Clients\ + \x20can\x20define\x20custom\x20options\x20in\x20extensions\x20of\x20this\ + \x20message.\x20See\x20above.\n\n\x0c\n\x04\x04\x10\x05\0\x12\x04\xad\ + \x05\r\x18\n\r\n\x05\x04\x10\x05\0\x01\x12\x04\xad\x05\r\x11\n\r\n\x05\ + \x04\x10\x05\0\x02\x12\x04\xad\x05\x15\x18\n\x0c\n\x02\x04\x11\x12\x06\ + \xb0\x05\0\xcd\x05\x01\n\x0b\n\x03\x04\x11\x01\x12\x04\xb0\x05\x08\x15\n\ + \xd6\x03\n\x04\x04\x11\x02\0\x12\x04\xbb\x05\x022\x1a\xdc\x01\x20Is\x20t\ + his\x20method\x20deprecated?\n\x20Depending\x20on\x20the\x20target\x20pl\ + atform,\x20this\x20can\x20emit\x20Deprecated\x20annotations\n\x20for\x20\ + the\x20method,\x20or\x20it\x20will\x20be\x20completely\x20ignored;\x20in\ + \x20the\x20very\x20least,\n\x20this\x20is\x20a\x20formalization\x20for\ + \x20deprecating\x20methods.\n2\xe8\x01\x20Note:\x20\x20Field\x20numbers\ + \x201\x20through\x2032\x20are\x20reserved\x20for\x20Google's\x20internal\ + \x20RPC\n\x20\x20\x20framework.\x20\x20We\x20apologize\x20for\x20hoardin\ + g\x20these\x20numbers\x20to\x20ourselves,\x20but\n\x20\x20\x20we\x20were\ + \x20already\x20using\x20them\x20long\x20before\x20we\x20decided\x20to\ + \x20release\x20Protocol\n\x20\x20\x20Buffers.\n\n\r\n\x05\x04\x11\x02\0\ + \x04\x12\x04\xbb\x05\x02\n\n\r\n\x05\x04\x11\x02\0\x05\x12\x04\xbb\x05\ + \x0b\x0f\n\r\n\x05\x04\x11\x02\0\x01\x12\x04\xbb\x05\x10\x1a\n\r\n\x05\ + \x04\x11\x02\0\x03\x12\x04\xbb\x05\x1d\x1f\n\r\n\x05\x04\x11\x02\0\x08\ + \x12\x04\xbb\x05\x201\n\r\n\x05\x04\x11\x02\0\x07\x12\x04\xbb\x05+0\n\ + \xf0\x01\n\x04\x04\x11\x04\0\x12\x06\xc0\x05\x02\xc4\x05\x03\x1a\xdf\x01\ + \x20Is\x20this\x20method\x20side-effect-free\x20(or\x20safe\x20in\x20HTT\ + P\x20parlance),\x20or\x20idempotent,\n\x20or\x20neither?\x20HTTP\x20base\ + d\x20RPC\x20implementation\x20may\x20choose\x20GET\x20verb\x20for\x20saf\ + e\n\x20methods,\x20and\x20PUT\x20verb\x20for\x20idempotent\x20methods\ + \x20instead\x20of\x20the\x20default\x20POST.\n\n\r\n\x05\x04\x11\x04\0\ + \x01\x12\x04\xc0\x05\x07\x17\n\x0e\n\x06\x04\x11\x04\0\x02\0\x12\x04\xc1\ + \x05\x04\x1c\n\x0f\n\x07\x04\x11\x04\0\x02\0\x01\x12\x04\xc1\x05\x04\x17\ + \n\x0f\n\x07\x04\x11\x04\0\x02\0\x02\x12\x04\xc1\x05\x1a\x1b\n$\n\x06\ + \x04\x11\x04\0\x02\x01\x12\x04\xc2\x05\x04\x18\"\x14\x20implies\x20idemp\ + otent\n\n\x0f\n\x07\x04\x11\x04\0\x02\x01\x01\x12\x04\xc2\x05\x04\x13\n\ + \x0f\n\x07\x04\x11\x04\0\x02\x01\x02\x12\x04\xc2\x05\x16\x17\n7\n\x06\ + \x04\x11\x04\0\x02\x02\x12\x04\xc3\x05\x04\x13\"'\x20idempotent,\x20but\ + \x20may\x20have\x20side\x20effects\n\n\x0f\n\x07\x04\x11\x04\0\x02\x02\ + \x01\x12\x04\xc3\x05\x04\x0e\n\x0f\n\x07\x04\x11\x04\0\x02\x02\x02\x12\ + \x04\xc3\x05\x11\x12\n\x0e\n\x04\x04\x11\x02\x01\x12\x06\xc5\x05\x02\xc6\ + \x05&\n\r\n\x05\x04\x11\x02\x01\x04\x12\x04\xc5\x05\x02\n\n\r\n\x05\x04\ + \x11\x02\x01\x06\x12\x04\xc5\x05\x0b\x1b\n\r\n\x05\x04\x11\x02\x01\x01\ + \x12\x04\xc5\x05\x1c-\n\r\n\x05\x04\x11\x02\x01\x03\x12\x04\xc5\x0502\n\ + \r\n\x05\x04\x11\x02\x01\x08\x12\x04\xc6\x05\x06%\n\r\n\x05\x04\x11\x02\ + \x01\x07\x12\x04\xc6\x05\x11$\nO\n\x04\x04\x11\x02\x02\x12\x04\xc9\x05\ + \x02:\x1aA\x20The\x20parser\x20stores\x20options\x20it\x20doesn't\x20rec\ + ognize\x20here.\x20See\x20above.\n\n\r\n\x05\x04\x11\x02\x02\x04\x12\x04\ + \xc9\x05\x02\n\n\r\n\x05\x04\x11\x02\x02\x06\x12\x04\xc9\x05\x0b\x1e\n\r\ + \n\x05\x04\x11\x02\x02\x01\x12\x04\xc9\x05\x1f3\n\r\n\x05\x04\x11\x02\ + \x02\x03\x12\x04\xc9\x0569\nZ\n\x03\x04\x11\x05\x12\x04\xcc\x05\x02\x19\ + \x1aM\x20Clients\x20can\x20define\x20custom\x20options\x20in\x20extensio\ + ns\x20of\x20this\x20message.\x20See\x20above.\n\n\x0c\n\x04\x04\x11\x05\ + \0\x12\x04\xcc\x05\r\x18\n\r\n\x05\x04\x11\x05\0\x01\x12\x04\xcc\x05\r\ + \x11\n\r\n\x05\x04\x11\x05\0\x02\x12\x04\xcc\x05\x15\x18\n\x8b\x03\n\x02\ + \x04\x12\x12\x06\xd6\x05\0\xea\x05\x01\x1a\xfc\x02\x20A\x20message\x20re\ + presenting\x20a\x20option\x20the\x20parser\x20does\x20not\x20recognize.\ + \x20This\x20only\n\x20appears\x20in\x20options\x20protos\x20created\x20b\ + y\x20the\x20compiler::Parser\x20class.\n\x20DescriptorPool\x20resolves\ + \x20these\x20when\x20building\x20Descriptor\x20objects.\x20Therefore,\n\ + \x20options\x20protos\x20in\x20descriptor\x20objects\x20(e.g.\x20returne\ + d\x20by\x20Descriptor::options(),\n\x20or\x20produced\x20by\x20Descripto\ + r::CopyTo())\x20will\x20never\x20have\x20UninterpretedOptions\n\x20in\ + \x20them.\n\n\x0b\n\x03\x04\x12\x01\x12\x04\xd6\x05\x08\x1b\n\xcb\x02\n\ + \x04\x04\x12\x03\0\x12\x06\xdc\x05\x02\xdf\x05\x03\x1a\xba\x02\x20The\ + \x20name\x20of\x20the\x20uninterpreted\x20option.\x20\x20Each\x20string\ + \x20represents\x20a\x20segment\x20in\n\x20a\x20dot-separated\x20name.\ + \x20\x20is_extension\x20is\x20true\x20iff\x20a\x20segment\x20represents\ + \x20an\n\x20extension\x20(denoted\x20with\x20parentheses\x20in\x20option\ + s\x20specs\x20in\x20.proto\x20files).\n\x20E.g.,{\x20[\"foo\",\x20false]\ + ,\x20[\"bar.baz\",\x20true],\x20[\"qux\",\x20false]\x20}\x20represents\n\ + \x20\"foo.(bar.baz).qux\".\n\n\r\n\x05\x04\x12\x03\0\x01\x12\x04\xdc\x05\ + \n\x12\n\x0e\n\x06\x04\x12\x03\0\x02\0\x12\x04\xdd\x05\x04\"\n\x0f\n\x07\ + \x04\x12\x03\0\x02\0\x04\x12\x04\xdd\x05\x04\x0c\n\x0f\n\x07\x04\x12\x03\ + \0\x02\0\x05\x12\x04\xdd\x05\r\x13\n\x0f\n\x07\x04\x12\x03\0\x02\0\x01\ + \x12\x04\xdd\x05\x14\x1d\n\x0f\n\x07\x04\x12\x03\0\x02\0\x03\x12\x04\xdd\ + \x05\x20!\n\x0e\n\x06\x04\x12\x03\0\x02\x01\x12\x04\xde\x05\x04#\n\x0f\n\ + \x07\x04\x12\x03\0\x02\x01\x04\x12\x04\xde\x05\x04\x0c\n\x0f\n\x07\x04\ + \x12\x03\0\x02\x01\x05\x12\x04\xde\x05\r\x11\n\x0f\n\x07\x04\x12\x03\0\ + \x02\x01\x01\x12\x04\xde\x05\x12\x1e\n\x0f\n\x07\x04\x12\x03\0\x02\x01\ + \x03\x12\x04\xde\x05!\"\n\x0c\n\x04\x04\x12\x02\0\x12\x04\xe0\x05\x02\ + \x1d\n\r\n\x05\x04\x12\x02\0\x04\x12\x04\xe0\x05\x02\n\n\r\n\x05\x04\x12\ + \x02\0\x06\x12\x04\xe0\x05\x0b\x13\n\r\n\x05\x04\x12\x02\0\x01\x12\x04\ + \xe0\x05\x14\x18\n\r\n\x05\x04\x12\x02\0\x03\x12\x04\xe0\x05\x1b\x1c\n\ + \x9c\x01\n\x04\x04\x12\x02\x01\x12\x04\xe4\x05\x02'\x1a\x8d\x01\x20The\ + \x20value\x20of\x20the\x20uninterpreted\x20option,\x20in\x20whatever\x20\ + type\x20the\x20tokenizer\n\x20identified\x20it\x20as\x20during\x20parsin\ + g.\x20Exactly\x20one\x20of\x20these\x20should\x20be\x20set.\n\n\r\n\x05\ + \x04\x12\x02\x01\x04\x12\x04\xe4\x05\x02\n\n\r\n\x05\x04\x12\x02\x01\x05\ + \x12\x04\xe4\x05\x0b\x11\n\r\n\x05\x04\x12\x02\x01\x01\x12\x04\xe4\x05\ + \x12\"\n\r\n\x05\x04\x12\x02\x01\x03\x12\x04\xe4\x05%&\n\x0c\n\x04\x04\ + \x12\x02\x02\x12\x04\xe5\x05\x02)\n\r\n\x05\x04\x12\x02\x02\x04\x12\x04\ + \xe5\x05\x02\n\n\r\n\x05\x04\x12\x02\x02\x05\x12\x04\xe5\x05\x0b\x11\n\r\ + \n\x05\x04\x12\x02\x02\x01\x12\x04\xe5\x05\x12$\n\r\n\x05\x04\x12\x02\ + \x02\x03\x12\x04\xe5\x05'(\n\x0c\n\x04\x04\x12\x02\x03\x12\x04\xe6\x05\ + \x02(\n\r\n\x05\x04\x12\x02\x03\x04\x12\x04\xe6\x05\x02\n\n\r\n\x05\x04\ + \x12\x02\x03\x05\x12\x04\xe6\x05\x0b\x10\n\r\n\x05\x04\x12\x02\x03\x01\ + \x12\x04\xe6\x05\x11#\n\r\n\x05\x04\x12\x02\x03\x03\x12\x04\xe6\x05&'\n\ + \x0c\n\x04\x04\x12\x02\x04\x12\x04\xe7\x05\x02#\n\r\n\x05\x04\x12\x02\ + \x04\x04\x12\x04\xe7\x05\x02\n\n\r\n\x05\x04\x12\x02\x04\x05\x12\x04\xe7\ + \x05\x0b\x11\n\r\n\x05\x04\x12\x02\x04\x01\x12\x04\xe7\x05\x12\x1e\n\r\n\ + \x05\x04\x12\x02\x04\x03\x12\x04\xe7\x05!\"\n\x0c\n\x04\x04\x12\x02\x05\ + \x12\x04\xe8\x05\x02\"\n\r\n\x05\x04\x12\x02\x05\x04\x12\x04\xe8\x05\x02\ + \n\n\r\n\x05\x04\x12\x02\x05\x05\x12\x04\xe8\x05\x0b\x10\n\r\n\x05\x04\ + \x12\x02\x05\x01\x12\x04\xe8\x05\x11\x1d\n\r\n\x05\x04\x12\x02\x05\x03\ + \x12\x04\xe8\x05\x20!\n\x0c\n\x04\x04\x12\x02\x06\x12\x04\xe9\x05\x02&\n\ + \r\n\x05\x04\x12\x02\x06\x04\x12\x04\xe9\x05\x02\n\n\r\n\x05\x04\x12\x02\ + \x06\x05\x12\x04\xe9\x05\x0b\x11\n\r\n\x05\x04\x12\x02\x06\x01\x12\x04\ + \xe9\x05\x12!\n\r\n\x05\x04\x12\x02\x06\x03\x12\x04\xe9\x05$%\n\xda\x01\ + \n\x02\x04\x13\x12\x06\xf1\x05\0\xf2\x06\x01\x1aj\x20Encapsulates\x20inf\ + ormation\x20about\x20the\x20original\x20source\x20file\x20from\x20which\ + \x20a\n\x20FileDescriptorProto\x20was\x20generated.\n2`\x20=============\ + ======================================================\n\x20Optional\x20\ + source\x20code\x20info\n\n\x0b\n\x03\x04\x13\x01\x12\x04\xf1\x05\x08\x16\ + \n\x82\x11\n\x04\x04\x13\x02\0\x12\x04\x9d\x06\x02!\x1a\xf3\x10\x20A\x20\ + Location\x20identifies\x20a\x20piece\x20of\x20source\x20code\x20in\x20a\ + \x20.proto\x20file\x20which\n\x20corresponds\x20to\x20a\x20particular\ + \x20definition.\x20\x20This\x20information\x20is\x20intended\n\x20to\x20\ + be\x20useful\x20to\x20IDEs,\x20code\x20indexers,\x20documentation\x20gen\ + erators,\x20and\x20similar\n\x20tools.\n\n\x20For\x20example,\x20say\x20\ + we\x20have\x20a\x20file\x20like:\n\x20\x20\x20message\x20Foo\x20{\n\x20\ + \x20\x20\x20\x20optional\x20string\x20foo\x20=\x201;\n\x20\x20\x20}\n\ + \x20Let's\x20look\x20at\x20just\x20the\x20field\x20definition:\n\x20\x20\ + \x20optional\x20string\x20foo\x20=\x201;\n\x20\x20\x20^\x20\x20\x20\x20\ + \x20\x20\x20^^\x20\x20\x20\x20\x20^^\x20\x20^\x20\x20^^^\n\x20\x20\x20a\ + \x20\x20\x20\x20\x20\x20\x20bc\x20\x20\x20\x20\x20de\x20\x20f\x20\x20ghi\ + \n\x20We\x20have\x20the\x20following\x20locations:\n\x20\x20\x20span\x20\ + \x20\x20path\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ + represents\n\x20\x20\x20[a,i)\x20\x20[\x204,\x200,\x202,\x200\x20]\x20\ + \x20\x20\x20\x20The\x20whole\x20field\x20definition.\n\x20\x20\x20[a,b)\ + \x20\x20[\x204,\x200,\x202,\x200,\x204\x20]\x20\x20The\x20label\x20(opti\ + onal).\n\x20\x20\x20[c,d)\x20\x20[\x204,\x200,\x202,\x200,\x205\x20]\x20\ + \x20The\x20type\x20(string).\n\x20\x20\x20[e,f)\x20\x20[\x204,\x200,\x20\ + 2,\x200,\x201\x20]\x20\x20The\x20name\x20(foo).\n\x20\x20\x20[g,h)\x20\ + \x20[\x204,\x200,\x202,\x200,\x203\x20]\x20\x20The\x20number\x20(1).\n\n\ + \x20Notes:\n\x20-\x20A\x20location\x20may\x20refer\x20to\x20a\x20repeate\ + d\x20field\x20itself\x20(i.e.\x20not\x20to\x20any\n\x20\x20\x20particula\ + r\x20index\x20within\x20it).\x20\x20This\x20is\x20used\x20whenever\x20a\ + \x20set\x20of\x20elements\x20are\n\x20\x20\x20logically\x20enclosed\x20i\ + n\x20a\x20single\x20code\x20segment.\x20\x20For\x20example,\x20an\x20ent\ + ire\n\x20\x20\x20extend\x20block\x20(possibly\x20containing\x20multiple\ + \x20extension\x20definitions)\x20will\n\x20\x20\x20have\x20an\x20outer\ + \x20location\x20whose\x20path\x20refers\x20to\x20the\x20\"extensions\"\ + \x20repeated\n\x20\x20\x20field\x20without\x20an\x20index.\n\x20-\x20Mul\ + tiple\x20locations\x20may\x20have\x20the\x20same\x20path.\x20\x20This\ + \x20happens\x20when\x20a\x20single\n\x20\x20\x20logical\x20declaration\ + \x20is\x20spread\x20out\x20across\x20multiple\x20places.\x20\x20The\x20m\ + ost\n\x20\x20\x20obvious\x20example\x20is\x20the\x20\"extend\"\x20block\ + \x20again\x20--\x20there\x20may\x20be\x20multiple\n\x20\x20\x20extend\ + \x20blocks\x20in\x20the\x20same\x20scope,\x20each\x20of\x20which\x20will\ + \x20have\x20the\x20same\x20path.\n\x20-\x20A\x20location's\x20span\x20is\ + \x20not\x20always\x20a\x20subset\x20of\x20its\x20parent's\x20span.\x20\ + \x20For\n\x20\x20\x20example,\x20the\x20\"extendee\"\x20of\x20an\x20exte\ + nsion\x20declaration\x20appears\x20at\x20the\n\x20\x20\x20beginning\x20o\ + f\x20the\x20\"extend\"\x20block\x20and\x20is\x20shared\x20by\x20all\x20e\ + xtensions\x20within\n\x20\x20\x20the\x20block.\n\x20-\x20Just\x20because\ + \x20a\x20location's\x20span\x20is\x20a\x20subset\x20of\x20some\x20other\ + \x20location's\x20span\n\x20\x20\x20does\x20not\x20mean\x20that\x20it\ + \x20is\x20a\x20descendant.\x20\x20For\x20example,\x20a\x20\"group\"\x20d\ + efines\n\x20\x20\x20both\x20a\x20type\x20and\x20a\x20field\x20in\x20a\ + \x20single\x20declaration.\x20\x20Thus,\x20the\x20locations\n\x20\x20\ + \x20corresponding\x20to\x20the\x20type\x20and\x20field\x20and\x20their\ + \x20components\x20will\x20overlap.\n\x20-\x20Code\x20which\x20tries\x20t\ + o\x20interpret\x20locations\x20should\x20probably\x20be\x20designed\x20t\ + o\n\x20\x20\x20ignore\x20those\x20that\x20it\x20doesn't\x20understand,\ + \x20as\x20more\x20types\x20of\x20locations\x20could\n\x20\x20\x20be\x20r\ + ecorded\x20in\x20the\x20future.\n\n\r\n\x05\x04\x13\x02\0\x04\x12\x04\ + \x9d\x06\x02\n\n\r\n\x05\x04\x13\x02\0\x06\x12\x04\x9d\x06\x0b\x13\n\r\n\ + \x05\x04\x13\x02\0\x01\x12\x04\x9d\x06\x14\x1c\n\r\n\x05\x04\x13\x02\0\ + \x03\x12\x04\x9d\x06\x1f\x20\n\x0e\n\x04\x04\x13\x03\0\x12\x06\x9e\x06\ + \x02\xf1\x06\x03\n\r\n\x05\x04\x13\x03\0\x01\x12\x04\x9e\x06\n\x12\n\x83\ + \x07\n\x06\x04\x13\x03\0\x02\0\x12\x04\xb6\x06\x04,\x1a\xf2\x06\x20Ident\ + ifies\x20which\x20part\x20of\x20the\x20FileDescriptorProto\x20was\x20def\ + ined\x20at\x20this\n\x20location.\n\n\x20Each\x20element\x20is\x20a\x20f\ + ield\x20number\x20or\x20an\x20index.\x20\x20They\x20form\x20a\x20path\ + \x20from\n\x20the\x20root\x20FileDescriptorProto\x20to\x20the\x20place\ + \x20where\x20the\x20definition.\x20\x20For\n\x20example,\x20this\x20path\ + :\n\x20\x20\x20[\x204,\x203,\x202,\x207,\x201\x20]\n\x20refers\x20to:\n\ + \x20\x20\x20file.message_type(3)\x20\x20//\x204,\x203\n\x20\x20\x20\x20\ + \x20\x20\x20.field(7)\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x202,\x207\n\ + \x20\x20\x20\x20\x20\x20\x20.name()\x20\x20\x20\x20\x20\x20\x20\x20\x20\ + \x20\x20//\x201\n\x20This\x20is\x20because\x20FileDescriptorProto.messag\ + e_type\x20has\x20field\x20number\x204:\n\x20\x20\x20repeated\x20Descript\ + orProto\x20message_type\x20=\x204;\n\x20and\x20DescriptorProto.field\x20\ + has\x20field\x20number\x202:\n\x20\x20\x20repeated\x20FieldDescriptorPro\ + to\x20field\x20=\x202;\n\x20and\x20FieldDescriptorProto.name\x20has\x20f\ + ield\x20number\x201:\n\x20\x20\x20optional\x20string\x20name\x20=\x201;\ + \n\n\x20Thus,\x20the\x20above\x20path\x20gives\x20the\x20location\x20of\ + \x20a\x20field\x20name.\x20\x20If\x20we\x20removed\n\x20the\x20last\x20e\ + lement:\n\x20\x20\x20[\x204,\x203,\x202,\x207\x20]\n\x20this\x20path\x20\ + refers\x20to\x20the\x20whole\x20field\x20declaration\x20(from\x20the\x20\ + beginning\n\x20of\x20the\x20label\x20to\x20the\x20terminating\x20semicol\ + on).\n\n\x0f\n\x07\x04\x13\x03\0\x02\0\x04\x12\x04\xb6\x06\x04\x0c\n\x0f\ + \n\x07\x04\x13\x03\0\x02\0\x05\x12\x04\xb6\x06\r\x12\n\x0f\n\x07\x04\x13\ + \x03\0\x02\0\x01\x12\x04\xb6\x06\x13\x17\n\x0f\n\x07\x04\x13\x03\0\x02\0\ + \x03\x12\x04\xb6\x06\x1a\x1b\n\x0f\n\x07\x04\x13\x03\0\x02\0\x08\x12\x04\ + \xb6\x06\x1c+\n\x10\n\x08\x04\x13\x03\0\x02\0\x08\x02\x12\x04\xb6\x06\ + \x1d*\n\xd2\x02\n\x06\x04\x13\x03\0\x02\x01\x12\x04\xbd\x06\x04,\x1a\xc1\ + \x02\x20Always\x20has\x20exactly\x20three\x20or\x20four\x20elements:\x20\ + start\x20line,\x20start\x20column,\n\x20end\x20line\x20(optional,\x20oth\ + erwise\x20assumed\x20same\x20as\x20start\x20line),\x20end\x20column.\n\ + \x20These\x20are\x20packed\x20into\x20a\x20single\x20field\x20for\x20eff\ + iciency.\x20\x20Note\x20that\x20line\n\x20and\x20column\x20numbers\x20ar\ + e\x20zero-based\x20--\x20typically\x20you\x20will\x20want\x20to\x20add\n\ + \x201\x20to\x20each\x20before\x20displaying\x20to\x20a\x20user.\n\n\x0f\ + \n\x07\x04\x13\x03\0\x02\x01\x04\x12\x04\xbd\x06\x04\x0c\n\x0f\n\x07\x04\ + \x13\x03\0\x02\x01\x05\x12\x04\xbd\x06\r\x12\n\x0f\n\x07\x04\x13\x03\0\ + \x02\x01\x01\x12\x04\xbd\x06\x13\x17\n\x0f\n\x07\x04\x13\x03\0\x02\x01\ + \x03\x12\x04\xbd\x06\x1a\x1b\n\x0f\n\x07\x04\x13\x03\0\x02\x01\x08\x12\ + \x04\xbd\x06\x1c+\n\x10\n\x08\x04\x13\x03\0\x02\x01\x08\x02\x12\x04\xbd\ + \x06\x1d*\n\xa5\x0c\n\x06\x04\x13\x03\0\x02\x02\x12\x04\xee\x06\x04)\x1a\ + \x94\x0c\x20If\x20this\x20SourceCodeInfo\x20represents\x20a\x20complete\ + \x20declaration,\x20these\x20are\x20any\n\x20comments\x20appearing\x20be\ + fore\x20and\x20after\x20the\x20declaration\x20which\x20appear\x20to\x20b\ + e\n\x20attached\x20to\x20the\x20declaration.\n\n\x20A\x20series\x20of\ + \x20line\x20comments\x20appearing\x20on\x20consecutive\x20lines,\x20with\ + \x20no\x20other\n\x20tokens\x20appearing\x20on\x20those\x20lines,\x20wil\ + l\x20be\x20treated\x20as\x20a\x20single\x20comment.\n\n\x20leading_detac\ + hed_comments\x20will\x20keep\x20paragraphs\x20of\x20comments\x20that\x20\ + appear\n\x20before\x20(but\x20not\x20connected\x20to)\x20the\x20current\ + \x20element.\x20Each\x20paragraph,\n\x20separated\x20by\x20empty\x20line\ + s,\x20will\x20be\x20one\x20comment\x20element\x20in\x20the\x20repeated\n\ + \x20field.\n\n\x20Only\x20the\x20comment\x20content\x20is\x20provided;\ + \x20comment\x20markers\x20(e.g.\x20//)\x20are\n\x20stripped\x20out.\x20\ + \x20For\x20block\x20comments,\x20leading\x20whitespace\x20and\x20an\x20a\ + sterisk\n\x20will\x20be\x20stripped\x20from\x20the\x20beginning\x20of\ + \x20each\x20line\x20other\x20than\x20the\x20first.\n\x20Newlines\x20are\ + \x20included\x20in\x20the\x20output.\n\n\x20Examples:\n\n\x20\x20\x20opt\ + ional\x20int32\x20foo\x20=\x201;\x20\x20//\x20Comment\x20attached\x20to\ + \x20foo.\n\x20\x20\x20//\x20Comment\x20attached\x20to\x20bar.\n\x20\x20\ + \x20optional\x20int32\x20bar\x20=\x202;\n\n\x20\x20\x20optional\x20strin\ + g\x20baz\x20=\x203;\n\x20\x20\x20//\x20Comment\x20attached\x20to\x20baz.\ + \n\x20\x20\x20//\x20Another\x20line\x20attached\x20to\x20baz.\n\n\x20\ + \x20\x20//\x20Comment\x20attached\x20to\x20qux.\n\x20\x20\x20//\n\x20\ + \x20\x20//\x20Another\x20line\x20attached\x20to\x20qux.\n\x20\x20\x20opt\ + ional\x20double\x20qux\x20=\x204;\n\n\x20\x20\x20//\x20Detached\x20comme\ + nt\x20for\x20corge.\x20This\x20is\x20not\x20leading\x20or\x20trailing\ + \x20comments\n\x20\x20\x20//\x20to\x20qux\x20or\x20corge\x20because\x20t\ + here\x20are\x20blank\x20lines\x20separating\x20it\x20from\n\x20\x20\x20/\ + /\x20both.\n\n\x20\x20\x20//\x20Detached\x20comment\x20for\x20corge\x20p\ + aragraph\x202.\n\n\x20\x20\x20optional\x20string\x20corge\x20=\x205;\n\ + \x20\x20\x20/*\x20Block\x20comment\x20attached\n\x20\x20\x20\x20*\x20to\ + \x20corge.\x20\x20Leading\x20asterisks\n\x20\x20\x20\x20*\x20will\x20be\ + \x20removed.\x20*/\n\x20\x20\x20/*\x20Block\x20comment\x20attached\x20to\ + \n\x20\x20\x20\x20*\x20grault.\x20*/\n\x20\x20\x20optional\x20int32\x20g\ + rault\x20=\x206;\n\n\x20\x20\x20//\x20ignored\x20detached\x20comments.\n\ + \n\x0f\n\x07\x04\x13\x03\0\x02\x02\x04\x12\x04\xee\x06\x04\x0c\n\x0f\n\ + \x07\x04\x13\x03\0\x02\x02\x05\x12\x04\xee\x06\r\x13\n\x0f\n\x07\x04\x13\ + \x03\0\x02\x02\x01\x12\x04\xee\x06\x14$\n\x0f\n\x07\x04\x13\x03\0\x02\ + \x02\x03\x12\x04\xee\x06'(\n\x0e\n\x06\x04\x13\x03\0\x02\x03\x12\x04\xef\ + \x06\x04*\n\x0f\n\x07\x04\x13\x03\0\x02\x03\x04\x12\x04\xef\x06\x04\x0c\ + \n\x0f\n\x07\x04\x13\x03\0\x02\x03\x05\x12\x04\xef\x06\r\x13\n\x0f\n\x07\ + \x04\x13\x03\0\x02\x03\x01\x12\x04\xef\x06\x14%\n\x0f\n\x07\x04\x13\x03\ + \0\x02\x03\x03\x12\x04\xef\x06()\n\x0e\n\x06\x04\x13\x03\0\x02\x04\x12\ + \x04\xf0\x06\x042\n\x0f\n\x07\x04\x13\x03\0\x02\x04\x04\x12\x04\xf0\x06\ + \x04\x0c\n\x0f\n\x07\x04\x13\x03\0\x02\x04\x05\x12\x04\xf0\x06\r\x13\n\ + \x0f\n\x07\x04\x13\x03\0\x02\x04\x01\x12\x04\xf0\x06\x14-\n\x0f\n\x07\ + \x04\x13\x03\0\x02\x04\x03\x12\x04\xf0\x0601\n\xee\x01\n\x02\x04\x14\x12\ + \x06\xf7\x06\0\x8c\x07\x01\x1a\xdf\x01\x20Describes\x20the\x20relationsh\ + ip\x20between\x20generated\x20code\x20and\x20its\x20original\x20source\n\ + \x20file.\x20A\x20GeneratedCodeInfo\x20message\x20is\x20associated\x20wi\ + th\x20only\x20one\x20generated\n\x20source\x20file,\x20but\x20may\x20con\ + tain\x20references\x20to\x20different\x20source\x20.proto\x20files.\n\n\ + \x0b\n\x03\x04\x14\x01\x12\x04\xf7\x06\x08\x19\nx\n\x04\x04\x14\x02\0\ + \x12\x04\xfa\x06\x02%\x1aj\x20An\x20Annotation\x20connects\x20some\x20sp\ + an\x20of\x20text\x20in\x20generated\x20code\x20to\x20an\x20element\n\x20\ + of\x20its\x20generating\x20.proto\x20file.\n\n\r\n\x05\x04\x14\x02\0\x04\ + \x12\x04\xfa\x06\x02\n\n\r\n\x05\x04\x14\x02\0\x06\x12\x04\xfa\x06\x0b\ + \x15\n\r\n\x05\x04\x14\x02\0\x01\x12\x04\xfa\x06\x16\x20\n\r\n\x05\x04\ + \x14\x02\0\x03\x12\x04\xfa\x06#$\n\x0e\n\x04\x04\x14\x03\0\x12\x06\xfb\ + \x06\x02\x8b\x07\x03\n\r\n\x05\x04\x14\x03\0\x01\x12\x04\xfb\x06\n\x14\n\ + \x8f\x01\n\x06\x04\x14\x03\0\x02\0\x12\x04\xfe\x06\x04,\x1a\x7f\x20Ident\ + ifies\x20the\x20element\x20in\x20the\x20original\x20source\x20.proto\x20\ + file.\x20This\x20field\n\x20is\x20formatted\x20the\x20same\x20as\x20Sour\ + ceCodeInfo.Location.path.\n\n\x0f\n\x07\x04\x14\x03\0\x02\0\x04\x12\x04\ + \xfe\x06\x04\x0c\n\x0f\n\x07\x04\x14\x03\0\x02\0\x05\x12\x04\xfe\x06\r\ + \x12\n\x0f\n\x07\x04\x14\x03\0\x02\0\x01\x12\x04\xfe\x06\x13\x17\n\x0f\n\ + \x07\x04\x14\x03\0\x02\0\x03\x12\x04\xfe\x06\x1a\x1b\n\x0f\n\x07\x04\x14\ + \x03\0\x02\0\x08\x12\x04\xfe\x06\x1c+\n\x10\n\x08\x04\x14\x03\0\x02\0\ + \x08\x02\x12\x04\xfe\x06\x1d*\nO\n\x06\x04\x14\x03\0\x02\x01\x12\x04\x81\ + \x07\x04$\x1a?\x20Identifies\x20the\x20filesystem\x20path\x20to\x20the\ + \x20original\x20source\x20.proto.\n\n\x0f\n\x07\x04\x14\x03\0\x02\x01\ + \x04\x12\x04\x81\x07\x04\x0c\n\x0f\n\x07\x04\x14\x03\0\x02\x01\x05\x12\ + \x04\x81\x07\r\x13\n\x0f\n\x07\x04\x14\x03\0\x02\x01\x01\x12\x04\x81\x07\ + \x14\x1f\n\x0f\n\x07\x04\x14\x03\0\x02\x01\x03\x12\x04\x81\x07\"#\nw\n\ + \x06\x04\x14\x03\0\x02\x02\x12\x04\x85\x07\x04\x1d\x1ag\x20Identifies\ + \x20the\x20starting\x20offset\x20in\x20bytes\x20in\x20the\x20generated\ + \x20code\n\x20that\x20relates\x20to\x20the\x20identified\x20object.\n\n\ + \x0f\n\x07\x04\x14\x03\0\x02\x02\x04\x12\x04\x85\x07\x04\x0c\n\x0f\n\x07\ + \x04\x14\x03\0\x02\x02\x05\x12\x04\x85\x07\r\x12\n\x0f\n\x07\x04\x14\x03\ + \0\x02\x02\x01\x12\x04\x85\x07\x13\x18\n\x0f\n\x07\x04\x14\x03\0\x02\x02\ + \x03\x12\x04\x85\x07\x1b\x1c\n\xdb\x01\n\x06\x04\x14\x03\0\x02\x03\x12\ + \x04\x8a\x07\x04\x1b\x1a\xca\x01\x20Identifies\x20the\x20ending\x20offse\ + t\x20in\x20bytes\x20in\x20the\x20generated\x20code\x20that\n\x20relates\ + \x20to\x20the\x20identified\x20offset.\x20The\x20end\x20offset\x20should\ + \x20be\x20one\x20past\n\x20the\x20last\x20relevant\x20byte\x20(so\x20the\ + \x20length\x20of\x20the\x20text\x20=\x20end\x20-\x20begin).\n\n\x0f\n\ + \x07\x04\x14\x03\0\x02\x03\x04\x12\x04\x8a\x07\x04\x0c\n\x0f\n\x07\x04\ + \x14\x03\0\x02\x03\x05\x12\x04\x8a\x07\r\x12\n\x0f\n\x07\x04\x14\x03\0\ + \x02\x03\x01\x12\x04\x8a\x07\x13\x16\n\x0f\n\x07\x04\x14\x03\0\x02\x03\ + \x03\x12\x04\x8a\x07\x19\x1a\ +"; + +static file_descriptor_proto_lazy: crate::rt::LazyV2<crate::descriptor::FileDescriptorProto> = crate::rt::LazyV2::INIT; + +fn parse_descriptor_proto() -> crate::descriptor::FileDescriptorProto { + crate::Message::parse_from_bytes(file_descriptor_proto_data).unwrap() +} + +pub fn file_descriptor_proto() -> &'static crate::descriptor::FileDescriptorProto { + file_descriptor_proto_lazy.get(|| { + parse_descriptor_proto() + }) +} diff --git a/2.27.1/src/descriptorx.rs b/2.27.1/src/descriptorx.rs new file mode 100644 index 0000000..7b046ec --- /dev/null +++ b/2.27.1/src/descriptorx.rs @@ -0,0 +1,656 @@ +// Should not be a part of public API +#![doc(hidden)] + +use crate::descriptor::DescriptorProto; +use crate::descriptor::EnumDescriptorProto; +use crate::descriptor::EnumValueDescriptorProto; +use crate::descriptor::FieldDescriptorProto; +/// utilities to work with descriptor +use crate::descriptor::FileDescriptorProto; +use crate::descriptor::OneofDescriptorProto; +use crate::rust; +use crate::strx; + +// Copy-pasted from libsyntax. +fn ident_start(c: char) -> bool { + (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_' +} + +// Copy-pasted from libsyntax. +fn ident_continue(c: char) -> bool { + (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_' +} + +pub fn proto_path_to_rust_mod(path: &str) -> String { + let without_dir = strx::remove_to(path, '/'); + let without_suffix = strx::remove_suffix(without_dir, ".proto"); + + let name = without_suffix + .chars() + .enumerate() + .map(|(i, c)| { + let valid = if i == 0 { + ident_start(c) + } else { + ident_continue(c) + }; + if valid { + c + } else { + '_' + } + }) + .collect::<String>(); + + let name = if rust::is_rust_keyword(&name) { + format!("{}_pb", name) + } else { + name + }; + name +} + +pub struct RootScope<'a> { + pub file_descriptors: &'a [FileDescriptorProto], +} + +impl<'a> RootScope<'a> { + fn packages(&'a self) -> Vec<FileScope<'a>> { + self.file_descriptors + .iter() + .map(|fd| FileScope { + file_descriptor: fd, + }) + .collect() + } + + // find enum by fully qualified name + pub fn find_enum(&'a self, fqn: &str) -> EnumWithScope<'a> { + match self.find_message_or_enum(fqn) { + MessageOrEnumWithScope::Enum(e) => e, + _ => panic!("not an enum: {}", fqn), + } + } + + // find message by fully qualified name + pub fn find_message(&'a self, fqn: &str) -> MessageWithScope<'a> { + match self.find_message_or_enum(fqn) { + MessageOrEnumWithScope::Message(m) => m, + _ => panic!("not a message: {}", fqn), + } + } + + // find message or enum by fully qualified name + pub fn find_message_or_enum(&'a self, fqn: &str) -> MessageOrEnumWithScope<'a> { + assert!(fqn.starts_with("."), "name must start with dot: {}", fqn); + let fqn1 = &fqn[1..]; + self.packages() + .into_iter() + .flat_map(|p| { + (if p.get_package().is_empty() { + p.find_message_or_enum(fqn1) + } else if fqn1.starts_with(&(p.get_package().to_string() + ".")) { + let remaining = &fqn1[(p.get_package().len() + 1)..]; + p.find_message_or_enum(remaining) + } else { + None + }) + .into_iter() + }) + .next() + .expect(&format!("enum not found by name: {}", fqn)) + } +} + +#[derive(Debug, Copy, Clone, PartialEq, Eq)] +pub enum Syntax { + PROTO2, + PROTO3, +} + +impl Syntax { + pub fn parse(s: &str) -> Self { + match s { + "" | "proto2" => Syntax::PROTO2, + "proto3" => Syntax::PROTO3, + _ => panic!("unsupported syntax value: {:?}", s), + } + } +} + +#[derive(Clone)] +pub struct FileScope<'a> { + pub file_descriptor: &'a FileDescriptorProto, +} + +impl<'a> FileScope<'a> { + fn get_package(&self) -> &'a str { + self.file_descriptor.get_package() + } + + pub fn syntax(&self) -> Syntax { + Syntax::parse(self.file_descriptor.get_syntax()) + } + + pub fn to_scope(&self) -> Scope<'a> { + Scope { + file_scope: self.clone(), + path: Vec::new(), + } + } + + fn find_message_or_enum(&self, name: &str) -> Option<MessageOrEnumWithScope<'a>> { + assert!(!name.starts_with(".")); + self.find_messages_and_enums() + .into_iter() + .filter(|e| e.name_to_package() == name) + .next() + } + + // find all enums in given file descriptor + pub fn find_enums(&self) -> Vec<EnumWithScope<'a>> { + let mut r = Vec::new(); + + self.to_scope().walk_scopes(|scope| { + r.extend(scope.get_enums()); + }); + + r + } + + // find all messages in given file descriptor + pub fn find_messages(&self) -> Vec<MessageWithScope<'a>> { + let mut r = Vec::new(); + + self.to_scope().walk_scopes(|scope| { + r.extend(scope.get_messages()); + }); + + r + } + + // find all messages and enums in given file descriptor + pub fn find_messages_and_enums(&self) -> Vec<MessageOrEnumWithScope<'a>> { + let mut r = Vec::new(); + + self.to_scope().walk_scopes(|scope| { + r.extend(scope.get_messages_and_enums()); + }); + + r + } +} + +#[derive(Clone)] +pub struct Scope<'a> { + pub file_scope: FileScope<'a>, + pub path: Vec<&'a DescriptorProto>, +} + +impl<'a> Scope<'a> { + pub fn get_file_descriptor(&self) -> &'a FileDescriptorProto { + self.file_scope.file_descriptor + } + + // get message descriptors in this scope + fn get_message_descriptors(&self) -> &'a [DescriptorProto] { + if self.path.is_empty() { + self.file_scope.file_descriptor.get_message_type() + } else { + self.path.last().unwrap().get_nested_type() + } + } + + // get enum descriptors in this scope + fn get_enum_descriptors(&self) -> &'a [EnumDescriptorProto] { + if self.path.is_empty() { + self.file_scope.file_descriptor.get_enum_type() + } else { + self.path.last().unwrap().get_enum_type() + } + } + + // get messages with attached scopes in this scope + pub fn get_messages(&self) -> Vec<MessageWithScope<'a>> { + self.get_message_descriptors() + .iter() + .map(|m| MessageWithScope { + scope: self.clone(), + message: m, + }) + .collect() + } + + // get enums with attached scopes in this scope + pub fn get_enums(&self) -> Vec<EnumWithScope<'a>> { + self.get_enum_descriptors() + .iter() + .map(|e| EnumWithScope { + scope: self.clone(), + en: e, + }) + .collect() + } + + // get messages and enums with attached scopes in this scope + pub fn get_messages_and_enums(&self) -> Vec<MessageOrEnumWithScope<'a>> { + self.get_messages() + .into_iter() + .map(|m| MessageOrEnumWithScope::Message(m)) + .chain( + self.get_enums() + .into_iter() + .map(|m| MessageOrEnumWithScope::Enum(m)), + ) + .collect() + } + + // nested scopes, i. e. scopes of nested messages + fn nested_scopes(&self) -> Vec<Scope<'a>> { + self.get_message_descriptors() + .iter() + .map(|m| { + let mut nested = self.clone(); + nested.path.push(m); + nested + }) + .collect() + } + + fn walk_scopes_impl<F: FnMut(&Scope<'a>)>(&self, callback: &mut F) { + (*callback)(self); + + for nested in self.nested_scopes() { + nested.walk_scopes_impl(callback); + } + } + + // apply callback for this scope and all nested scopes + fn walk_scopes<F>(&self, mut callback: F) + where + F: FnMut(&Scope<'a>), + { + self.walk_scopes_impl(&mut callback); + } + + pub fn prefix(&self) -> String { + if self.path.is_empty() { + "".to_string() + } else { + let v: Vec<&'a str> = self.path.iter().map(|m| m.get_name()).collect(); + let mut r = v.join("."); + r.push_str("."); + r + } + } + + // rust type name prefix for this scope + pub fn rust_prefix(&self) -> String { + self.prefix().replace(".", "_") + } +} + +pub trait WithScope<'a> { + fn get_scope(&self) -> &Scope<'a>; + + fn get_file_descriptor(&self) -> &'a FileDescriptorProto { + self.get_scope().get_file_descriptor() + } + + // message or enum name + fn get_name(&self) -> &'a str; + + fn escape_prefix(&self) -> &'static str; + + fn name_to_package(&self) -> String { + let mut r = self.get_scope().prefix(); + r.push_str(self.get_name()); + r + } + + /// Return absolute name starting with dot + fn name_absolute(&self) -> String { + let mut r = String::new(); + r.push_str("."); + let package = self.get_file_descriptor().get_package(); + if !package.is_empty() { + r.push_str(package); + r.push_str("."); + } + r.push_str(&self.name_to_package()); + r + } + + // rust type name of this descriptor + fn rust_name(&self) -> String { + let mut r = self.get_scope().rust_prefix(); + // Only escape if prefix is not empty + if r.is_empty() && rust::is_rust_keyword(self.get_name()) { + r.push_str(self.escape_prefix()); + } + r.push_str(self.get_name()); + r + } + + // fully-qualified name of this type + fn rust_fq_name(&self) -> String { + format!( + "{}::{}", + proto_path_to_rust_mod(self.get_scope().get_file_descriptor().get_name()), + self.rust_name() + ) + } +} + +#[derive(Clone)] +pub struct MessageWithScope<'a> { + pub scope: Scope<'a>, + pub message: &'a DescriptorProto, +} + +impl<'a> WithScope<'a> for MessageWithScope<'a> { + fn get_scope(&self) -> &Scope<'a> { + &self.scope + } + + fn escape_prefix(&self) -> &'static str { + "message_" + } + + fn get_name(&self) -> &'a str { + self.message.get_name() + } +} + +impl<'a> MessageWithScope<'a> { + pub fn into_scope(mut self) -> Scope<'a> { + self.scope.path.push(self.message); + self.scope + } + + pub fn to_scope(&self) -> Scope<'a> { + self.clone().into_scope() + } + + pub fn fields(&self) -> Vec<FieldWithContext<'a>> { + self.message + .get_field() + .iter() + .map(|f| FieldWithContext { + field: f, + message: self.clone(), + }) + .collect() + } + + pub fn oneofs(&self) -> Vec<OneofWithContext<'a>> { + self.message + .get_oneof_decl() + .iter() + .enumerate() + .map(|(index, oneof)| OneofWithContext { + message: self.clone(), + oneof: &oneof, + index: index as u32, + }) + .collect() + } + + pub fn oneof_by_index(&self, index: u32) -> OneofWithContext<'a> { + self.oneofs().swap_remove(index as usize) + } + + /// Pair of (key, value) if this message is map entry + pub fn map_entry(&'a self) -> Option<(FieldWithContext<'a>, FieldWithContext<'a>)> { + if self.message.get_options().get_map_entry() { + let key = self + .fields() + .into_iter() + .find(|f| f.field.get_number() == 1) + .unwrap(); + let value = self + .fields() + .into_iter() + .find(|f| f.field.get_number() == 2) + .unwrap(); + Some((key, value)) + } else { + None + } + } +} + +#[derive(Clone)] +pub struct EnumWithScope<'a> { + pub scope: Scope<'a>, + pub en: &'a EnumDescriptorProto, +} + +impl<'a> EnumWithScope<'a> { + // enum values + pub fn values(&'a self) -> &'a [EnumValueDescriptorProto] { + self.en.get_value() + } + + // find enum value by name + pub fn value_by_name(&'a self, name: &str) -> &'a EnumValueDescriptorProto { + self.en + .get_value() + .into_iter() + .find(|v| v.get_name() == name) + .unwrap() + } +} + +pub trait EnumValueDescriptorEx { + fn rust_name(&self) -> String; +} + +impl EnumValueDescriptorEx for EnumValueDescriptorProto { + fn rust_name(&self) -> String { + let mut r = String::new(); + if rust::is_rust_keyword(self.get_name()) { + r.push_str("value_"); + } + r.push_str(self.get_name()); + r + } +} + +impl<'a> WithScope<'a> for EnumWithScope<'a> { + fn get_scope(&self) -> &Scope<'a> { + &self.scope + } + + fn escape_prefix(&self) -> &'static str { + "enum_" + } + + fn get_name(&self) -> &'a str { + self.en.get_name() + } +} + +pub enum MessageOrEnumWithScope<'a> { + Message(MessageWithScope<'a>), + Enum(EnumWithScope<'a>), +} + +impl<'a> WithScope<'a> for MessageOrEnumWithScope<'a> { + fn get_scope(&self) -> &Scope<'a> { + match self { + &MessageOrEnumWithScope::Message(ref m) => m.get_scope(), + &MessageOrEnumWithScope::Enum(ref e) => e.get_scope(), + } + } + + fn escape_prefix(&self) -> &'static str { + match self { + &MessageOrEnumWithScope::Message(ref m) => m.escape_prefix(), + &MessageOrEnumWithScope::Enum(ref e) => e.escape_prefix(), + } + } + + fn get_name(&self) -> &'a str { + match self { + &MessageOrEnumWithScope::Message(ref m) => m.get_name(), + &MessageOrEnumWithScope::Enum(ref e) => e.get_name(), + } + } +} + +pub trait FieldDescriptorProtoExt { + fn rust_name(&self) -> String; +} + +impl FieldDescriptorProtoExt for FieldDescriptorProto { + fn rust_name(&self) -> String { + if rust::is_rust_keyword(self.get_name()) { + format!("field_{}", self.get_name()) + } else { + self.get_name().to_string() + } + } +} + +#[derive(Clone)] +pub struct FieldWithContext<'a> { + pub field: &'a FieldDescriptorProto, + pub message: MessageWithScope<'a>, +} + +impl<'a> FieldWithContext<'a> { + #[doc(hidden)] + pub fn is_oneof(&self) -> bool { + self.field.has_oneof_index() + } + + pub fn oneof(&self) -> Option<OneofWithContext<'a>> { + if self.is_oneof() { + Some( + self.message + .oneof_by_index(self.field.get_oneof_index() as u32), + ) + } else { + None + } + } + + pub fn number(&self) -> u32 { + self.field.get_number() as u32 + } + + /// Shortcut + pub fn name(&self) -> &str { + self.field.get_name() + } + + // field name in generated code + #[deprecated] + pub fn rust_name(&self) -> String { + self.field.rust_name() + } + + // From field to file root + pub fn containing_messages(&self) -> Vec<&'a DescriptorProto> { + let mut r = Vec::new(); + r.push(self.message.message); + r.extend(self.message.scope.path.iter().rev()); + r + } +} + +#[derive(Clone)] +pub struct OneofVariantWithContext<'a> { + pub oneof: &'a OneofWithContext<'a>, + pub field: &'a FieldDescriptorProto, +} + +#[derive(Clone)] +pub struct OneofWithContext<'a> { + pub oneof: &'a OneofDescriptorProto, + pub index: u32, + pub message: MessageWithScope<'a>, +} + +impl<'a> OneofWithContext<'a> { + /// Oneof rust name + pub fn name(&'a self) -> &'a str { + match self.oneof.get_name() { + "type" => "field_type", + "box" => "field_box", + x => x, + } + } + + /// rust type name of enum + pub fn rust_name(&self) -> String { + format!( + "{}_oneof_{}", + self.message.rust_name(), + self.oneof.get_name() + ) + } + + /// Oneof variants + pub fn variants(&'a self) -> Vec<OneofVariantWithContext<'a>> { + self.message + .fields() + .iter() + .filter(|f| f.field.has_oneof_index() && f.field.get_oneof_index() == self.index as i32) + .map(|f| OneofVariantWithContext { + oneof: self, + field: &f.field, + }) + .collect() + } +} + +/// Find message by rust type name +pub fn find_message_by_rust_name<'a>( + fd: &'a FileDescriptorProto, + rust_name: &str, +) -> MessageWithScope<'a> { + FileScope { + file_descriptor: fd, + } + .find_messages() + .into_iter() + .find(|m| m.rust_name() == rust_name) + .unwrap() +} + +/// Find enum by rust type name +pub fn find_enum_by_rust_name<'a>( + fd: &'a FileDescriptorProto, + rust_name: &str, +) -> EnumWithScope<'a> { + FileScope { + file_descriptor: fd, + } + .find_enums() + .into_iter() + .find(|e| e.rust_name() == rust_name) + .unwrap() +} + +#[cfg(test)] +mod test { + + use super::proto_path_to_rust_mod; + + #[test] + fn test_mod_path_proto_ext() { + assert_eq!("proto", proto_path_to_rust_mod("proto.proto")); + } + + #[test] + fn test_mod_path_unknown_ext() { + assert_eq!("proto_proto3", proto_path_to_rust_mod("proto.proto3")); + } + + #[test] + fn test_mod_path_empty_ext() { + assert_eq!("proto", proto_path_to_rust_mod("proto")); + } +} diff --git a/2.27.1/src/enums.rs b/2.27.1/src/enums.rs new file mode 100644 index 0000000..558d6ff --- /dev/null +++ b/2.27.1/src/enums.rs @@ -0,0 +1,32 @@ +use crate::reflect::EnumDescriptor; +use crate::reflect::EnumValueDescriptor; + +/// Trait implemented by all protobuf enum types. +pub trait ProtobufEnum: Eq + Sized + Copy + 'static { + /// Get enum `i32` value. + fn value(&self) -> i32; + + /// Try to create an enum from `i32` value. + /// Return `None` if value is unknown. + fn from_i32(v: i32) -> Option<Self>; + + /// Get all enum values for enum type. + fn values() -> &'static [Self] { + panic!(); + } + + /// Get enum value descriptor. + fn descriptor(&self) -> &'static EnumValueDescriptor { + self.enum_descriptor().value_by_number(self.value()) + } + + /// Get enum descriptor. + fn enum_descriptor(&self) -> &'static EnumDescriptor { + Self::enum_descriptor_static() + } + + /// Get enum descriptor by type. + fn enum_descriptor_static() -> &'static EnumDescriptor { + panic!(); + } +} diff --git a/2.27.1/src/error.rs b/2.27.1/src/error.rs new file mode 100644 index 0000000..3f06909 --- /dev/null +++ b/2.27.1/src/error.rs @@ -0,0 +1,151 @@ +//! Protobuf error type + +use std::error::Error; +use std::fmt; +use std::io; +use std::str; + +use crate::wire_format::WireType; + +/// `Result` alias for `ProtobufError` +pub type ProtobufResult<T> = Result<T, ProtobufError>; + +/// Enum values added here for diagnostic purposes. +/// Users should not depend on specific values. +#[derive(Debug)] +pub enum WireError { + /// Could not read complete message because stream is EOF + UnexpectedEof, + /// Wrong wire type for given field + UnexpectedWireType(WireType), + /// Incorrect tag value + IncorrectTag(u32), + /// Malformed map field + IncompleteMap, + /// Malformed varint + IncorrectVarint, + /// String is not valid UTD-8 + Utf8Error, + /// Enum value is unknown + InvalidEnumValue(i32), + /// Message is too nested + OverRecursionLimit, + /// Could not read complete message because stream is EOF + TruncatedMessage, + /// Other error + Other, +} + +impl fmt::Display for WireError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + WireError::Utf8Error => write!(f, "invalid UTF-8 sequence"), + WireError::UnexpectedWireType(..) => write!(f, "unexpected wire type"), + WireError::InvalidEnumValue(..) => write!(f, "invalid enum value"), + WireError::IncorrectTag(..) => write!(f, "incorrect tag"), + WireError::IncorrectVarint => write!(f, "incorrect varint"), + WireError::IncompleteMap => write!(f, "incomplete map"), + WireError::UnexpectedEof => write!(f, "unexpected EOF"), + WireError::OverRecursionLimit => write!(f, "over recursion limit"), + WireError::TruncatedMessage => write!(f, "truncated message"), + WireError::Other => write!(f, "other error"), + } + } +} + +/// Generic protobuf error +#[derive(Debug)] +pub enum ProtobufError { + /// I/O error when reading or writing + IoError(io::Error), + /// Malformed input + WireError(WireError), + /// Protocol contains a string which is not valid UTF-8 string + Utf8(str::Utf8Error), + /// Not all required fields set + MessageNotInitialized { + /// Message name + message: &'static str, + }, +} + +impl ProtobufError { + /// Create message not initialized error. + #[doc(hidden)] + pub fn message_not_initialized(message: &'static str) -> ProtobufError { + ProtobufError::MessageNotInitialized { message: message } + } +} + +impl fmt::Display for ProtobufError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + // not sure that cause should be included in message + &ProtobufError::IoError(ref e) => write!(f, "IO error: {}", e), + &ProtobufError::WireError(ref e) => fmt::Display::fmt(e, f), + &ProtobufError::Utf8(ref e) => write!(f, "{}", e), + &ProtobufError::MessageNotInitialized { .. } => write!(f, "not all message fields set"), + } + } +} + +impl Error for ProtobufError { + #[allow(deprecated)] // call to `description` + fn description(&self) -> &str { + match self { + // not sure that cause should be included in message + &ProtobufError::IoError(ref e) => e.description(), + &ProtobufError::WireError(ref e) => match *e { + WireError::Utf8Error => "invalid UTF-8 sequence", + WireError::UnexpectedWireType(..) => "unexpected wire type", + WireError::InvalidEnumValue(..) => "invalid enum value", + WireError::IncorrectTag(..) => "incorrect tag", + WireError::IncorrectVarint => "incorrect varint", + WireError::IncompleteMap => "incomplete map", + WireError::UnexpectedEof => "unexpected EOF", + WireError::OverRecursionLimit => "over recursion limit", + WireError::TruncatedMessage => "truncated message", + WireError::Other => "other error", + }, + &ProtobufError::Utf8(ref e) => &e.description(), + &ProtobufError::MessageNotInitialized { .. } => "not all message fields set", + } + } + + fn cause(&self) -> Option<&dyn Error> { + match self { + &ProtobufError::IoError(ref e) => Some(e), + &ProtobufError::Utf8(ref e) => Some(e), + &ProtobufError::WireError(..) => None, + &ProtobufError::MessageNotInitialized { .. } => None, + } + } +} + +impl From<io::Error> for ProtobufError { + fn from(err: io::Error) -> Self { + ProtobufError::IoError(err) + } +} + +impl From<str::Utf8Error> for ProtobufError { + fn from(err: str::Utf8Error) -> Self { + ProtobufError::Utf8(err) + } +} + +impl From<ProtobufError> for io::Error { + fn from(err: ProtobufError) -> Self { + match err { + ProtobufError::IoError(e) => e, + ProtobufError::WireError(e) => { + io::Error::new(io::ErrorKind::InvalidData, ProtobufError::WireError(e)) + } + ProtobufError::MessageNotInitialized { message: msg } => io::Error::new( + io::ErrorKind::InvalidInput, + ProtobufError::MessageNotInitialized { message: msg }, + ), + e => io::Error::new(io::ErrorKind::Other, Box::new(e)), + } + } +} diff --git a/2.27.1/src/ext.rs b/2.27.1/src/ext.rs new file mode 100644 index 0000000..a1c18f6 --- /dev/null +++ b/2.27.1/src/ext.rs @@ -0,0 +1,47 @@ +//! Utilities to support "extension" fields. +//! +//! Extensions are [described in the official protobuf documentation][exts]. +//! +//! [exts]: https://developers.google.com/protocol-buffers/docs/proto#extensions + +use std::marker::PhantomData; + +use crate::message::Message; +use crate::types::ProtobufType; + +/// Optional ext field +pub struct ExtFieldOptional<M: Message, T: ProtobufType> { + /// Extension field number + pub field_number: u32, + /// Marker + // TODO: hide + pub phantom: PhantomData<(M, T)>, +} + +/// Repeated ext field +pub struct ExtFieldRepeated<M: Message, T: ProtobufType> { + /// Extension field number + pub field_number: u32, + /// Extension field number + // TODO: hide + pub phantom: PhantomData<(M, T)>, +} + +impl<M: Message, T: ProtobufType> ExtFieldOptional<M, T> { + /// Get a copy of value from a message. + /// + /// Extension data is stored in [`UnknownFields`](crate::UnknownFields). + pub fn get(&self, m: &M) -> Option<T::Value> { + m.get_unknown_fields() + .get(self.field_number) + .and_then(T::get_from_unknown) + } +} + +impl<M: Message, T: ProtobufType> ExtFieldRepeated<M, T> { + /// Get a copy of value from a message (**not implemented**). + pub fn get(&self, _m: &M) -> Vec<T::Value> { + // TODO + unimplemented!() + } +} diff --git a/2.27.1/src/json/json_name.rs b/2.27.1/src/json/json_name.rs new file mode 100644 index 0000000..f5c9364 --- /dev/null +++ b/2.27.1/src/json/json_name.rs @@ -0,0 +1,19 @@ +/// Implementation must match exactly +/// `ToJsonName()` function in C++ `descriptor.cc`. +pub fn json_name(input: &str) -> String { + let mut capitalize_next = false; + let mut result = String::with_capacity(input.len()); + + for c in input.chars() { + if c == '_' { + capitalize_next = true; + } else if capitalize_next { + result.extend(c.to_uppercase()); + capitalize_next = false; + } else { + result.push(c); + } + } + + result +} diff --git a/2.27.1/src/json/mod.rs b/2.27.1/src/json/mod.rs new file mode 100644 index 0000000..2755aad --- /dev/null +++ b/2.27.1/src/json/mod.rs @@ -0,0 +1,8 @@ +//! JSON serialization and deserialization. +//! +//! (Implemented in master, but not ported to stable branch yet). + +mod json_name; + +#[doc(hidden)] +pub use self::json_name::json_name; diff --git a/2.27.1/src/lazy.rs b/2.27.1/src/lazy.rs new file mode 100644 index 0000000..3575dd0 --- /dev/null +++ b/2.27.1/src/lazy.rs @@ -0,0 +1,113 @@ +//! Lazily initialized data. +//! Used in generated code. + +// Avoid deprecation warnings when compiling rust-protobuf +#![allow(deprecated)] + +use std::mem; +use std::sync; + +/// Lasily initialized data. +#[deprecated( + since = "2.16", + note = "Please regenerate .rs files from .proto files to use newer APIs" +)] +pub struct Lazy<T> { + #[doc(hidden)] + pub lock: sync::Once, + #[doc(hidden)] + pub ptr: *const T, +} + +impl<T> Lazy<T> { + /// Uninitialized `Lazy` object. + /// + /// The initializer is added in rust-protobuf 2.11, for compatibility with + /// previously generated code, existing fields are kept public. + pub const INIT: Lazy<T> = Lazy { + lock: sync::Once::new(), + ptr: 0 as *const T, + }; + + /// Get lazy field value, initialize it with given function if not yet. + pub fn get<F>(&'static mut self, init: F) -> &'static T + where + F: FnOnce() -> T, + { + // ~ decouple the lifetimes of 'self' and 'self.lock' such we + // can initialize self.ptr in the call_once closure (note: we + // do have to initialize self.ptr in the closure to guarantee + // the ptr is valid for all calling threads at any point in + // time) + let lock: &sync::Once = unsafe { mem::transmute(&self.lock) }; + lock.call_once(|| unsafe { + self.ptr = mem::transmute(Box::new(init())); + }); + unsafe { &*self.ptr } + } +} + +/// Used to initialize `lock` field in `Lazy` struct. +#[deprecated( + since = "2.11", + note = "Regenerate .proto files to use safer initializer" +)] +pub const ONCE_INIT: sync::Once = sync::Once::new(); + +#[cfg(test)] +mod test { + use std::sync::atomic::AtomicIsize; + use std::sync::atomic::Ordering; + use std::sync::Arc; + use std::sync::Barrier; + use std::thread; + + use super::Lazy; + + #[test] + fn many_threads_calling_get() { + const N_THREADS: usize = 32; + const N_ITERS_IN_THREAD: usize = 32; + const N_ITERS: usize = 16; + + static mut LAZY: Lazy<String> = Lazy::INIT; + static CALL_COUNT: AtomicIsize = AtomicIsize::new(0); + + let value = "Hello, world!".to_owned(); + + for _ in 0..N_ITERS { + // Reset mutable state. + unsafe { + LAZY = Lazy::INIT; + } + CALL_COUNT.store(0, Ordering::SeqCst); + + // Create a bunch of threads, all calling .get() at the same time. + let mut threads = vec![]; + let barrier = Arc::new(Barrier::new(N_THREADS)); + + for _ in 0..N_THREADS { + let cloned_value_thread = value.clone(); + let cloned_barrier = barrier.clone(); + threads.push(thread::spawn(move || { + // Ensure all threads start at once to maximise contention. + cloned_barrier.wait(); + for _ in 0..N_ITERS_IN_THREAD { + assert_eq!(&cloned_value_thread, unsafe { + LAZY.get(|| { + CALL_COUNT.fetch_add(1, Ordering::SeqCst); + cloned_value_thread.clone() + }) + }); + } + })); + } + + for thread in threads { + thread.join().unwrap(); + } + + assert_eq!(CALL_COUNT.load(Ordering::SeqCst), 1); + } + } +} diff --git a/2.27.1/src/lazy_v2.rs b/2.27.1/src/lazy_v2.rs new file mode 100644 index 0000000..6f9ac1e --- /dev/null +++ b/2.27.1/src/lazy_v2.rs @@ -0,0 +1,90 @@ +//! Lazily initialized data. +//! Used in generated code. + +use std::cell::UnsafeCell; +use std::sync; + +/// Lazily initialized data. +pub struct LazyV2<T: Sync> { + lock: sync::Once, + ptr: UnsafeCell<*const T>, +} + +unsafe impl<T: Sync> Sync for LazyV2<T> {} + +impl<T: Sync> LazyV2<T> { + /// Uninitialized `Lazy` object. + pub const INIT: LazyV2<T> = LazyV2 { + lock: sync::Once::new(), + ptr: UnsafeCell::new(0 as *const T), + }; + + /// Get lazy field value, initialize it with given function if not yet. + pub fn get<F>(&'static self, init: F) -> &'static T + where + F: FnOnce() -> T, + { + self.lock.call_once(|| unsafe { + *self.ptr.get() = Box::into_raw(Box::new(init())); + }); + unsafe { &**self.ptr.get() } + } +} + +#[cfg(test)] +mod test { + use std::sync::atomic::AtomicIsize; + use std::sync::atomic::Ordering; + use std::sync::Arc; + use std::sync::Barrier; + use std::thread; + + use super::LazyV2; + + #[test] + fn many_threads_calling_get() { + const N_THREADS: usize = 32; + const N_ITERS_IN_THREAD: usize = 32; + const N_ITERS: usize = 16; + + static mut LAZY: LazyV2<String> = LazyV2::INIT; + static CALL_COUNT: AtomicIsize = AtomicIsize::new(0); + + let value = "Hello, world!".to_owned(); + + for _ in 0..N_ITERS { + // Reset mutable state. + unsafe { + LAZY = LazyV2::INIT; + } + CALL_COUNT.store(0, Ordering::SeqCst); + + // Create a bunch of threads, all calling .get() at the same time. + let mut threads = vec![]; + let barrier = Arc::new(Barrier::new(N_THREADS)); + + for _ in 0..N_THREADS { + let cloned_value_thread = value.clone(); + let cloned_barrier = barrier.clone(); + threads.push(thread::spawn(move || { + // Ensure all threads start at once to maximise contention. + cloned_barrier.wait(); + for _ in 0..N_ITERS_IN_THREAD { + assert_eq!(&cloned_value_thread, unsafe { + LAZY.get(|| { + CALL_COUNT.fetch_add(1, Ordering::SeqCst); + cloned_value_thread.clone() + }) + }); + } + })); + } + + for thread in threads { + thread.join().unwrap(); + } + + assert_eq!(CALL_COUNT.load(Ordering::SeqCst), 1); + } + } +} diff --git a/2.27.1/src/lib.rs b/2.27.1/src/lib.rs new file mode 100644 index 0000000..d88e029 --- /dev/null +++ b/2.27.1/src/lib.rs @@ -0,0 +1,192 @@ +//! # Library to read and write protocol buffers data +//! +//! # Version 2 is stable +//! +//! Currently developed branch of rust-protobuf [is 3](https://docs.rs/protobuf/%3E=3.0.0-alpha). +//! It has the same spirit as version 2, but contains numerous improvements like: +//! * runtime reflection for mutability, not just for access +//! * protobuf text format and JSON parsing (which rely on reflection) +//! * dynamic message support: work with protobuf data without generating code from schema +//! +//! Stable version of rust-protobuf will be supported until version 3 released. +//! +//! [Tracking issue for version 3](https://github.com/stepancheg/rust-protobuf/issues/518). +//! +//! # How to generate rust code +//! +//! There are several ways to generate rust code from `.proto` files +//! +//! ## Invoke `protoc` programmatically with protoc-rust crate (recommended) +//! +//! Have a look at readme in [protoc-rust crate](https://docs.rs/protoc-rust/=2). +//! +//! ## Use pure rust protobuf parser and code generator +//! +//! Readme should be in +//! [protobuf-codegen-pure crate](https://docs.rs/protobuf-codegen-pure/=2). +//! +//! ## Use protoc-gen-rust plugin +//! +//! Readme is [here](https://docs.rs/protobuf-codegen/=2). +//! +//! ## Generated code +//! +//! Have a look at generated files (for current development version), +//! used internally in rust-protobuf: +//! +//! * [descriptor.rs](https://github.com/stepancheg/rust-protobuf/blob/master/protobuf/src/descriptor.rs) +//! for [descriptor.proto](https://github.com/stepancheg/rust-protobuf/blob/master/protoc-bin-vendored/include/google/protobuf/descriptor.proto) +//! (that is part of Google protobuf) +//! +//! # Copy on write +//! +//! Rust-protobuf can be used with [bytes crate](https://github.com/tokio-rs/bytes). +//! +//! To enable `Bytes` you need to: +//! +//! 1. Enable `with-bytes` feature in rust-protobuf: +//! +//! ``` +//! [dependencies] +//! protobuf = { version = "~2.0", features = ["with-bytes"] } +//! ``` +//! +//! 2. Enable bytes option +//! +//! with `Customize` when codegen is invoked programmatically: +//! +//! ```ignore +//! protoc_rust::run(protoc_rust::Args { +//! ... +//! customize: Customize { +//! carllerche_bytes_for_bytes: Some(true), +//! carllerche_bytes_for_string: Some(true), +//! ..Default::default() +//! }, +//! }); +//! ``` +//! +//! or in `.proto` file: +//! +//! ```ignore +//! import "rustproto.proto"; +//! +//! option (rustproto.carllerche_bytes_for_bytes_all) = true; +//! option (rustproto.carllerche_bytes_for_string_all) = true; +//! ``` +//! +//! With these options enabled, fields of type `bytes` or `string` are +//! generated as `Bytes` or `Chars` respectively. When `CodedInputStream` is constructed +//! from `Bytes` object, fields of these types get subslices of original `Bytes` object, +//! instead of being allocated on heap. +//! +//! # Accompanying crates +//! +//! * [`protoc-rust`](https://docs.rs/protoc-rust/=2) +//! and [`protobuf-codegen-pure`](https://docs.rs/protobuf-codegen-pure/=2) +//! can be used to rust code from `.proto` crates. +//! * [`protobuf-codegen`](https://docs.rs/protobuf-codegen/=2) for `protoc-gen-rust` protoc plugin. +//! * [`protoc`](https://docs.rs/protoc/=2) crate can be used to invoke `protoc` programmatically. +//! * [`protoc-bin-vendored`](https://docs.rs/protoc-bin-vendored/=2) contains `protoc` command +//! packed into the crate. + +#![deny(missing_docs)] +#![deny(rustdoc::broken_intra_doc_links)] + +#[cfg(feature = "bytes")] +extern crate bytes; +#[cfg(feature = "with-serde")] +extern crate serde; +#[macro_use] +#[cfg(feature = "with-serde")] +extern crate serde_derive; +pub use crate::cached_size::CachedSize; +#[cfg(feature = "bytes")] +pub use crate::chars::Chars; +pub use crate::clear::Clear; +pub use crate::coded_input_stream::CodedInputStream; +pub use crate::coded_output_stream::CodedOutputStream; +pub use crate::enums::ProtobufEnum; +pub use crate::error::ProtobufError; +pub use crate::error::ProtobufResult; +#[allow(deprecated)] +pub use crate::message::parse_from_bytes; +#[cfg(feature = "bytes")] +#[allow(deprecated)] +pub use crate::message::parse_from_carllerche_bytes; +#[allow(deprecated)] +pub use crate::message::parse_from_reader; +#[allow(deprecated)] +pub use crate::message::parse_length_delimited_from; +#[allow(deprecated)] +pub use crate::message::parse_length_delimited_from_bytes; +#[allow(deprecated)] +pub use crate::message::parse_length_delimited_from_reader; +pub use crate::message::Message; +pub use crate::repeated::RepeatedField; +pub use crate::singular::SingularField; +pub use crate::singular::SingularPtrField; +pub use crate::unknown::UnknownFields; +pub use crate::unknown::UnknownFieldsIter; +pub use crate::unknown::UnknownValue; +pub use crate::unknown::UnknownValueRef; +pub use crate::unknown::UnknownValues; +pub use crate::unknown::UnknownValuesIter; + +// generated +pub mod descriptor; +pub mod plugin; +pub mod rustproto; + +pub mod wire_format; + +mod clear; +mod coded_input_stream; +mod coded_output_stream; +pub mod compiler_plugin; +mod enums; +pub mod error; +pub mod ext; +pub mod json; +pub mod lazy; +mod lazy_v2; +mod message; +pub mod reflect; +mod repeated; +pub mod rt; +mod singular; +pub mod text_format; +pub mod types; +pub mod well_known_types; +mod well_known_types_util; + +// used by test +#[cfg(test)] +#[path = "../../protobuf-test-common/src/hex.rs"] +mod hex; + +// used by rust-grpc +pub mod descriptorx; + +mod cached_size; +mod chars; +#[doc(hidden)] // used by codegen +pub mod rust; +mod strx; +mod unknown; +mod varint; +mod zigzag; + +mod misc; + +mod buf_read_iter; +mod buf_read_or_reader; + +/// This symbol is in generated `version.rs`, include here for IDE +#[cfg(never)] +pub const VERSION: &str = ""; +/// This symbol is in generated `version.rs`, include here for IDE +#[cfg(never)] +#[doc(hidden)] +pub const VERSION_IDENT: &str = ""; +include!(concat!(env!("OUT_DIR"), "/version.rs")); diff --git a/2.27.1/src/message.rs b/2.27.1/src/message.rs new file mode 100644 index 0000000..e9d6b30 --- /dev/null +++ b/2.27.1/src/message.rs @@ -0,0 +1,312 @@ +use std::any::Any; +use std::any::TypeId; +use std::fmt; +use std::io::Read; +use std::io::Write; + +#[cfg(feature = "bytes")] +use bytes::Bytes; + +use crate::clear::Clear; +use crate::coded_input_stream::CodedInputStream; +use crate::coded_input_stream::WithCodedInputStream; +use crate::coded_output_stream::with_coded_output_stream_to_bytes; +use crate::coded_output_stream::CodedOutputStream; +use crate::coded_output_stream::WithCodedOutputStream; +use crate::error::ProtobufError; +use crate::error::ProtobufResult; +use crate::reflect::MessageDescriptor; +use crate::unknown::UnknownFields; + +/// Trait implemented for all generated structs for protobuf messages. +/// +/// Also, generated messages implement `Clone + Default + PartialEq` +pub trait Message: fmt::Debug + Clear + Any + Send + Sync { + /// Message descriptor for this message, used for reflection. + fn descriptor(&self) -> &'static MessageDescriptor; + + /// True iff all required fields are initialized. + /// Always returns `true` for protobuf 3. + fn is_initialized(&self) -> bool; + + /// Update this message object with fields read from given stream. + fn merge_from(&mut self, is: &mut CodedInputStream) -> ProtobufResult<()>; + + /// Parse message from stream. + fn parse_from(is: &mut CodedInputStream) -> ProtobufResult<Self> + where + Self: Sized, + { + let mut r: Self = Message::new(); + r.merge_from(is)?; + r.check_initialized()?; + Ok(r) + } + + /// Write message to the stream. + /// + /// Sizes of this messages and nested messages must be cached + /// by calling `compute_size` prior to this call. + fn write_to_with_cached_sizes(&self, os: &mut CodedOutputStream) -> ProtobufResult<()>; + + /// Compute and cache size of this message and all nested messages + fn compute_size(&self) -> u32; + + /// Get size previously computed by `compute_size`. + fn get_cached_size(&self) -> u32; + + /// Write the message to the stream. + /// + /// Results in error if message is not fully initialized. + fn write_to(&self, os: &mut CodedOutputStream) -> ProtobufResult<()> { + self.check_initialized()?; + + // cache sizes + self.compute_size(); + // TODO: reserve additional + self.write_to_with_cached_sizes(os)?; + + Ok(()) + } + + /// Write the message to the stream prepending the message with message length + /// encoded as varint. + fn write_length_delimited_to(&self, os: &mut CodedOutputStream) -> ProtobufResult<()> { + let size = self.compute_size(); + os.write_raw_varint32(size)?; + self.write_to_with_cached_sizes(os)?; + + // TODO: assert we've written same number of bytes as computed + + Ok(()) + } + + /// Write the message to the vec, prepend the message with message length + /// encoded as varint. + fn write_length_delimited_to_vec(&self, vec: &mut Vec<u8>) -> ProtobufResult<()> { + let mut os = CodedOutputStream::vec(vec); + self.write_length_delimited_to(&mut os)?; + os.flush()?; + Ok(()) + } + + /// Update this message object with fields read from given stream. + fn merge_from_bytes(&mut self, bytes: &[u8]) -> ProtobufResult<()> { + let mut is = CodedInputStream::from_bytes(bytes); + self.merge_from(&mut is) + } + + /// Parse message from reader. + /// Parse stops on EOF or when error encountered. + fn parse_from_reader(reader: &mut dyn Read) -> ProtobufResult<Self> + where + Self: Sized, + { + let mut is = CodedInputStream::new(reader); + let r = Message::parse_from(&mut is)?; + is.check_eof()?; + Ok(r) + } + + /// Parse message from byte array. + fn parse_from_bytes(bytes: &[u8]) -> ProtobufResult<Self> + where + Self: Sized, + { + let mut is = CodedInputStream::from_bytes(bytes); + let r = Message::parse_from(&mut is)?; + is.check_eof()?; + Ok(r) + } + + /// Parse message from `Bytes` object. + /// Resulting message may share references to the passed bytes object. + #[cfg(feature = "bytes")] + fn parse_from_carllerche_bytes(bytes: &Bytes) -> ProtobufResult<Self> + where + Self: Sized, + { + let mut is = CodedInputStream::from_carllerche_bytes(bytes); + let r = Self::parse_from(&mut is)?; + is.check_eof()?; + Ok(r) + } + + /// Check if all required fields of this object are initialized. + fn check_initialized(&self) -> ProtobufResult<()> { + if !self.is_initialized() { + Err(ProtobufError::message_not_initialized( + self.descriptor().name(), + )) + } else { + Ok(()) + } + } + + /// Write the message to the writer. + fn write_to_writer(&self, w: &mut dyn Write) -> ProtobufResult<()> { + w.with_coded_output_stream(|os| self.write_to(os)) + } + + /// Write the message to bytes vec. + fn write_to_vec(&self, v: &mut Vec<u8>) -> ProtobufResult<()> { + v.with_coded_output_stream(|os| self.write_to(os)) + } + + /// Write the message to bytes vec. + fn write_to_bytes(&self) -> ProtobufResult<Vec<u8>> { + self.check_initialized()?; + + let size = self.compute_size() as usize; + let mut v = Vec::with_capacity(size); + // skip zerofill + unsafe { + v.set_len(size); + } + { + let mut os = CodedOutputStream::bytes(&mut v); + self.write_to_with_cached_sizes(&mut os)?; + os.check_eof(); + } + Ok(v) + } + + /// Write the message to the writer, prepend the message with message length + /// encoded as varint. + fn write_length_delimited_to_writer(&self, w: &mut dyn Write) -> ProtobufResult<()> { + w.with_coded_output_stream(|os| self.write_length_delimited_to(os)) + } + + /// Write the message to the bytes vec, prepend the message with message length + /// encoded as varint. + fn write_length_delimited_to_bytes(&self) -> ProtobufResult<Vec<u8>> { + with_coded_output_stream_to_bytes(|os| self.write_length_delimited_to(os)) + } + + /// Get a reference to unknown fields. + fn get_unknown_fields<'s>(&'s self) -> &'s UnknownFields; + /// Get a mutable reference to unknown fields. + fn mut_unknown_fields<'s>(&'s mut self) -> &'s mut UnknownFields; + + /// Get type id for downcasting. + fn type_id(&self) -> TypeId { + TypeId::of::<Self>() + } + + /// View self as `Any`. + fn as_any(&self) -> &dyn Any; + + /// View self as mutable `Any`. + fn as_any_mut(&mut self) -> &mut dyn Any { + panic!() + } + + /// Convert boxed self to boxed `Any`. + fn into_any(self: Box<Self>) -> Box<dyn Any> { + panic!() + } + + // Rust does not allow implementation of trait for trait: + // impl<M : Message> fmt::Debug for M { + // ... + // } + + /// Create an empty message object. + /// + /// + /// ``` + /// # use protobuf::Message; + /// # fn foo<MyMessage: Message>() { + /// let m = MyMessage::new(); + /// # } + /// ``` + fn new() -> Self + where + Self: Sized; + + /// Get message descriptor for message type. + /// + /// ``` + /// # use protobuf::Message; + /// # fn foo<MyMessage: Message>() { + /// let descriptor = MyMessage::descriptor_static(); + /// assert_eq!("MyMessage", descriptor.name()); + /// # } + /// ``` + fn descriptor_static() -> &'static MessageDescriptor + where + Self: Sized, + { + panic!( + "descriptor_static is not implemented for message, \ + LITE_RUNTIME must be used" + ); + } + + /// Return a pointer to default immutable message with static lifetime. + /// + /// ``` + /// # use protobuf::Message; + /// # fn foo<MyMessage: Message>() { + /// let m: &MyMessage = MyMessage::default_instance(); + /// # } + /// ``` + fn default_instance() -> &'static Self + where + Self: Sized; +} + +pub fn message_down_cast<'a, M: Message + 'a>(m: &'a dyn Message) -> &'a M { + m.as_any().downcast_ref::<M>().unwrap() +} + +/// Parse message from reader. +/// Parse stops on EOF or when error encountered. +#[deprecated(since = "2.19", note = "Use Message::parse_from_reader instead")] +pub fn parse_from_reader<M: Message>(reader: &mut dyn Read) -> ProtobufResult<M> { + M::parse_from_reader(reader) +} + +/// Parse message from byte array. +#[deprecated(since = "2.19", note = "Use Message::parse_from_bytes instead")] +pub fn parse_from_bytes<M: Message>(bytes: &[u8]) -> ProtobufResult<M> { + M::parse_from_bytes(bytes) +} + +/// Parse message from `Bytes` object. +/// Resulting message may share references to the passed bytes object. +#[cfg(feature = "bytes")] +#[deprecated( + since = "2.19", + note = "Use Message::parse_from_carllerche_bytes instead" +)] +pub fn parse_from_carllerche_bytes<M: Message>(bytes: &Bytes) -> ProtobufResult<M> { + M::parse_from_carllerche_bytes(bytes) +} + +/// Parse length-delimited message from stream. +/// +/// Read varint length first, and read messages of that length then. +/// +/// This function is deprecated and will be removed in the next major release. +#[deprecated] +pub fn parse_length_delimited_from<M: Message>(is: &mut CodedInputStream) -> ProtobufResult<M> { + is.read_message::<M>() +} + +/// Parse length-delimited message from `Read`. +/// +/// This function is deprecated and will be removed in the next major release. +#[deprecated] +pub fn parse_length_delimited_from_reader<M: Message>(r: &mut dyn Read) -> ProtobufResult<M> { + // TODO: wrong: we may read length first, and then read exact number of bytes needed + r.with_coded_input_stream(|is| is.read_message::<M>()) +} + +/// Parse length-delimited message from bytes. +/// +/// This function is deprecated and will be removed in the next major release. +#[deprecated] +pub fn parse_length_delimited_from_bytes<M: Message>(bytes: &[u8]) -> ProtobufResult<M> { + bytes.with_coded_input_stream(|is| is.read_message::<M>()) +} diff --git a/2.27.1/src/misc.rs b/2.27.1/src/misc.rs new file mode 100644 index 0000000..faef34f --- /dev/null +++ b/2.27.1/src/misc.rs @@ -0,0 +1,52 @@ +use std::mem; +use std::mem::MaybeUninit; +use std::slice; + +/// `Vec::spare_capacity_mut` is not stable until Rust 1.60. +pub(crate) fn vec_spare_capacity_mut<A>(vec: &mut Vec<A>) -> &mut [MaybeUninit<A>] { + // SAFETY: copy-paste from rust stdlib. + unsafe { + slice::from_raw_parts_mut( + vec.as_mut_ptr().add(vec.len()) as *mut MaybeUninit<A>, + vec.capacity() - vec.len(), + ) + } +} + +/// `MaybeUninit::write_slice` is not stable. +pub(crate) fn maybe_uninit_write_slice<'a, T>( + this: &'a mut [MaybeUninit<T>], + src: &[T], +) -> &'a mut [T] +where + T: Copy, +{ + // SAFETY: copy-paste from rust stdlib. + + let uninit_src: &[MaybeUninit<T>] = unsafe { mem::transmute(src) }; + + this.copy_from_slice(uninit_src); + + unsafe { &mut *(this as *mut [MaybeUninit<T>] as *mut [T]) } +} + +/// `MaybeUninit::array_assume_init` is not stable. +#[inline] +pub(crate) unsafe fn maybe_ununit_array_assume_init<T, const N: usize>( + array: [MaybeUninit<T>; N], +) -> [T; N] { + // SAFETY: + // * The caller guarantees that all elements of the array are initialized + // * `MaybeUninit<T>` and T are guaranteed to have the same layout + // * `MaybeUninit` does not drop, so there are no double-frees + // And thus the conversion is safe + (&array as *const _ as *const [T; N]).read() +} + +/// `MaybeUninit::write` is stable since 1.55. +#[inline] +pub(crate) fn maybe_uninit_write<T>(uninit: &mut MaybeUninit<T>, val: T) -> &mut T { + // SAFETY: copy-paste from rust stdlib. + *uninit = MaybeUninit::new(val); + unsafe { &mut *uninit.as_mut_ptr() } +} diff --git a/2.27.1/src/plugin.rs b/2.27.1/src/plugin.rs new file mode 100644 index 0000000..93f2ca8 --- /dev/null +++ b/2.27.1/src/plugin.rs @@ -0,0 +1,1528 @@ +// This file is generated by rust-protobuf 2.26.0. Do not edit +// @generated + +// https://github.com/rust-lang/rust-clippy/issues/702 +#![allow(unknown_lints)] +#![allow(clippy::all)] + +#![allow(unused_attributes)] +#![cfg_attr(rustfmt, rustfmt::skip)] + +#![allow(box_pointers)] +#![allow(dead_code)] +#![allow(missing_docs)] +#![allow(non_camel_case_types)] +#![allow(non_snake_case)] +#![allow(non_upper_case_globals)] +#![allow(trivial_casts)] +#![allow(unused_imports)] +#![allow(unused_results)] +//! Generated file from `google/protobuf/compiler/plugin.proto` + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct Version { + // message fields + major: ::std::option::Option<i32>, + minor: ::std::option::Option<i32>, + patch: ::std::option::Option<i32>, + suffix: crate::SingularField<::std::string::String>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a Version { + fn default() -> &'a Version { + <Version as crate::Message>::default_instance() + } +} + +impl Version { + pub fn new() -> Version { + ::std::default::Default::default() + } + + // optional int32 major = 1; + + + pub fn get_major(&self) -> i32 { + self.major.unwrap_or(0) + } + pub fn clear_major(&mut self) { + self.major = ::std::option::Option::None; + } + + pub fn has_major(&self) -> bool { + self.major.is_some() + } + + // Param is passed by value, moved + pub fn set_major(&mut self, v: i32) { + self.major = ::std::option::Option::Some(v); + } + + // optional int32 minor = 2; + + + pub fn get_minor(&self) -> i32 { + self.minor.unwrap_or(0) + } + pub fn clear_minor(&mut self) { + self.minor = ::std::option::Option::None; + } + + pub fn has_minor(&self) -> bool { + self.minor.is_some() + } + + // Param is passed by value, moved + pub fn set_minor(&mut self, v: i32) { + self.minor = ::std::option::Option::Some(v); + } + + // optional int32 patch = 3; + + + pub fn get_patch(&self) -> i32 { + self.patch.unwrap_or(0) + } + pub fn clear_patch(&mut self) { + self.patch = ::std::option::Option::None; + } + + pub fn has_patch(&self) -> bool { + self.patch.is_some() + } + + // Param is passed by value, moved + pub fn set_patch(&mut self, v: i32) { + self.patch = ::std::option::Option::Some(v); + } + + // optional string suffix = 4; + + + pub fn get_suffix(&self) -> &str { + match self.suffix.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_suffix(&mut self) { + self.suffix.clear(); + } + + pub fn has_suffix(&self) -> bool { + self.suffix.is_some() + } + + // Param is passed by value, moved + pub fn set_suffix(&mut self, v: ::std::string::String) { + self.suffix = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_suffix(&mut self) -> &mut ::std::string::String { + if self.suffix.is_none() { + self.suffix.set_default(); + } + self.suffix.as_mut().unwrap() + } + + // Take field + pub fn take_suffix(&mut self) -> ::std::string::String { + self.suffix.take().unwrap_or_else(|| ::std::string::String::new()) + } +} + +impl crate::Message for Version { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int32()?; + self.major = ::std::option::Option::Some(tmp); + }, + 2 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int32()?; + self.minor = ::std::option::Option::Some(tmp); + }, + 3 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int32()?; + self.patch = ::std::option::Option::Some(tmp); + }, + 4 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.suffix)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(v) = self.major { + my_size += crate::rt::value_size(1, v, crate::wire_format::WireTypeVarint); + } + if let Some(v) = self.minor { + my_size += crate::rt::value_size(2, v, crate::wire_format::WireTypeVarint); + } + if let Some(v) = self.patch { + my_size += crate::rt::value_size(3, v, crate::wire_format::WireTypeVarint); + } + if let Some(ref v) = self.suffix.as_ref() { + my_size += crate::rt::string_size(4, &v); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(v) = self.major { + os.write_int32(1, v)?; + } + if let Some(v) = self.minor { + os.write_int32(2, v)?; + } + if let Some(v) = self.patch { + os.write_int32(3, v)?; + } + if let Some(ref v) = self.suffix.as_ref() { + os.write_string(4, &v)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> Version { + Version::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeInt32>( + "major", + |m: &Version| { &m.major }, + |m: &mut Version| { &mut m.major }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeInt32>( + "minor", + |m: &Version| { &m.minor }, + |m: &mut Version| { &mut m.minor }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeInt32>( + "patch", + |m: &Version| { &m.patch }, + |m: &mut Version| { &mut m.patch }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "suffix", + |m: &Version| { &m.suffix }, + |m: &mut Version| { &mut m.suffix }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<Version>( + "Version", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static Version { + static instance: crate::rt::LazyV2<Version> = crate::rt::LazyV2::INIT; + instance.get(Version::new) + } +} + +impl crate::Clear for Version { + fn clear(&mut self) { + self.major = ::std::option::Option::None; + self.minor = ::std::option::Option::None; + self.patch = ::std::option::Option::None; + self.suffix.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for Version { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for Version { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct CodeGeneratorRequest { + // message fields + pub file_to_generate: crate::RepeatedField<::std::string::String>, + parameter: crate::SingularField<::std::string::String>, + pub proto_file: crate::RepeatedField<crate::descriptor::FileDescriptorProto>, + pub compiler_version: crate::SingularPtrField<Version>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a CodeGeneratorRequest { + fn default() -> &'a CodeGeneratorRequest { + <CodeGeneratorRequest as crate::Message>::default_instance() + } +} + +impl CodeGeneratorRequest { + pub fn new() -> CodeGeneratorRequest { + ::std::default::Default::default() + } + + // repeated string file_to_generate = 1; + + + pub fn get_file_to_generate(&self) -> &[::std::string::String] { + &self.file_to_generate + } + pub fn clear_file_to_generate(&mut self) { + self.file_to_generate.clear(); + } + + // Param is passed by value, moved + pub fn set_file_to_generate(&mut self, v: crate::RepeatedField<::std::string::String>) { + self.file_to_generate = v; + } + + // Mutable pointer to the field. + pub fn mut_file_to_generate(&mut self) -> &mut crate::RepeatedField<::std::string::String> { + &mut self.file_to_generate + } + + // Take field + pub fn take_file_to_generate(&mut self) -> crate::RepeatedField<::std::string::String> { + ::std::mem::replace(&mut self.file_to_generate, crate::RepeatedField::new()) + } + + // optional string parameter = 2; + + + pub fn get_parameter(&self) -> &str { + match self.parameter.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_parameter(&mut self) { + self.parameter.clear(); + } + + pub fn has_parameter(&self) -> bool { + self.parameter.is_some() + } + + // Param is passed by value, moved + pub fn set_parameter(&mut self, v: ::std::string::String) { + self.parameter = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_parameter(&mut self) -> &mut ::std::string::String { + if self.parameter.is_none() { + self.parameter.set_default(); + } + self.parameter.as_mut().unwrap() + } + + // Take field + pub fn take_parameter(&mut self) -> ::std::string::String { + self.parameter.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // repeated .google.protobuf.FileDescriptorProto proto_file = 15; + + + pub fn get_proto_file(&self) -> &[crate::descriptor::FileDescriptorProto] { + &self.proto_file + } + pub fn clear_proto_file(&mut self) { + self.proto_file.clear(); + } + + // Param is passed by value, moved + pub fn set_proto_file(&mut self, v: crate::RepeatedField<crate::descriptor::FileDescriptorProto>) { + self.proto_file = v; + } + + // Mutable pointer to the field. + pub fn mut_proto_file(&mut self) -> &mut crate::RepeatedField<crate::descriptor::FileDescriptorProto> { + &mut self.proto_file + } + + // Take field + pub fn take_proto_file(&mut self) -> crate::RepeatedField<crate::descriptor::FileDescriptorProto> { + ::std::mem::replace(&mut self.proto_file, crate::RepeatedField::new()) + } + + // optional .google.protobuf.compiler.Version compiler_version = 3; + + + pub fn get_compiler_version(&self) -> &Version { + self.compiler_version.as_ref().unwrap_or_else(|| <Version as crate::Message>::default_instance()) + } + pub fn clear_compiler_version(&mut self) { + self.compiler_version.clear(); + } + + pub fn has_compiler_version(&self) -> bool { + self.compiler_version.is_some() + } + + // Param is passed by value, moved + pub fn set_compiler_version(&mut self, v: Version) { + self.compiler_version = crate::SingularPtrField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_compiler_version(&mut self) -> &mut Version { + if self.compiler_version.is_none() { + self.compiler_version.set_default(); + } + self.compiler_version.as_mut().unwrap() + } + + // Take field + pub fn take_compiler_version(&mut self) -> Version { + self.compiler_version.take().unwrap_or_else(|| Version::new()) + } +} + +impl crate::Message for CodeGeneratorRequest { + fn is_initialized(&self) -> bool { + for v in &self.proto_file { + if !v.is_initialized() { + return false; + } + }; + for v in &self.compiler_version { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_repeated_string_into(wire_type, is, &mut self.file_to_generate)?; + }, + 2 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.parameter)?; + }, + 15 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.proto_file)?; + }, + 3 => { + crate::rt::read_singular_message_into(wire_type, is, &mut self.compiler_version)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + for value in &self.file_to_generate { + my_size += crate::rt::string_size(1, &value); + }; + if let Some(ref v) = self.parameter.as_ref() { + my_size += crate::rt::string_size(2, &v); + } + for value in &self.proto_file { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + if let Some(ref v) = self.compiler_version.as_ref() { + let len = v.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + for v in &self.file_to_generate { + os.write_string(1, &v)?; + }; + if let Some(ref v) = self.parameter.as_ref() { + os.write_string(2, &v)?; + } + for v in &self.proto_file { + os.write_tag(15, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + if let Some(ref v) = self.compiler_version.as_ref() { + os.write_tag(3, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> CodeGeneratorRequest { + CodeGeneratorRequest::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeString>( + "file_to_generate", + |m: &CodeGeneratorRequest| { &m.file_to_generate }, + |m: &mut CodeGeneratorRequest| { &mut m.file_to_generate }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "parameter", + |m: &CodeGeneratorRequest| { &m.parameter }, + |m: &mut CodeGeneratorRequest| { &mut m.parameter }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<crate::descriptor::FileDescriptorProto>>( + "proto_file", + |m: &CodeGeneratorRequest| { &m.proto_file }, + |m: &mut CodeGeneratorRequest| { &mut m.proto_file }, + )); + fields.push(crate::reflect::accessor::make_singular_ptr_field_accessor::<_, crate::types::ProtobufTypeMessage<Version>>( + "compiler_version", + |m: &CodeGeneratorRequest| { &m.compiler_version }, + |m: &mut CodeGeneratorRequest| { &mut m.compiler_version }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<CodeGeneratorRequest>( + "CodeGeneratorRequest", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static CodeGeneratorRequest { + static instance: crate::rt::LazyV2<CodeGeneratorRequest> = crate::rt::LazyV2::INIT; + instance.get(CodeGeneratorRequest::new) + } +} + +impl crate::Clear for CodeGeneratorRequest { + fn clear(&mut self) { + self.file_to_generate.clear(); + self.parameter.clear(); + self.proto_file.clear(); + self.compiler_version.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for CodeGeneratorRequest { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for CodeGeneratorRequest { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct CodeGeneratorResponse { + // message fields + error: crate::SingularField<::std::string::String>, + supported_features: ::std::option::Option<u64>, + pub file: crate::RepeatedField<CodeGeneratorResponse_File>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a CodeGeneratorResponse { + fn default() -> &'a CodeGeneratorResponse { + <CodeGeneratorResponse as crate::Message>::default_instance() + } +} + +impl CodeGeneratorResponse { + pub fn new() -> CodeGeneratorResponse { + ::std::default::Default::default() + } + + // optional string error = 1; + + + pub fn get_error(&self) -> &str { + match self.error.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_error(&mut self) { + self.error.clear(); + } + + pub fn has_error(&self) -> bool { + self.error.is_some() + } + + // Param is passed by value, moved + pub fn set_error(&mut self, v: ::std::string::String) { + self.error = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_error(&mut self) -> &mut ::std::string::String { + if self.error.is_none() { + self.error.set_default(); + } + self.error.as_mut().unwrap() + } + + // Take field + pub fn take_error(&mut self) -> ::std::string::String { + self.error.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional uint64 supported_features = 2; + + + pub fn get_supported_features(&self) -> u64 { + self.supported_features.unwrap_or(0) + } + pub fn clear_supported_features(&mut self) { + self.supported_features = ::std::option::Option::None; + } + + pub fn has_supported_features(&self) -> bool { + self.supported_features.is_some() + } + + // Param is passed by value, moved + pub fn set_supported_features(&mut self, v: u64) { + self.supported_features = ::std::option::Option::Some(v); + } + + // repeated .google.protobuf.compiler.CodeGeneratorResponse.File file = 15; + + + pub fn get_file(&self) -> &[CodeGeneratorResponse_File] { + &self.file + } + pub fn clear_file(&mut self) { + self.file.clear(); + } + + // Param is passed by value, moved + pub fn set_file(&mut self, v: crate::RepeatedField<CodeGeneratorResponse_File>) { + self.file = v; + } + + // Mutable pointer to the field. + pub fn mut_file(&mut self) -> &mut crate::RepeatedField<CodeGeneratorResponse_File> { + &mut self.file + } + + // Take field + pub fn take_file(&mut self) -> crate::RepeatedField<CodeGeneratorResponse_File> { + ::std::mem::replace(&mut self.file, crate::RepeatedField::new()) + } +} + +impl crate::Message for CodeGeneratorResponse { + fn is_initialized(&self) -> bool { + for v in &self.file { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.error)?; + }, + 2 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_uint64()?; + self.supported_features = ::std::option::Option::Some(tmp); + }, + 15 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.file)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(ref v) = self.error.as_ref() { + my_size += crate::rt::string_size(1, &v); + } + if let Some(v) = self.supported_features { + my_size += crate::rt::value_size(2, v, crate::wire_format::WireTypeVarint); + } + for value in &self.file { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(ref v) = self.error.as_ref() { + os.write_string(1, &v)?; + } + if let Some(v) = self.supported_features { + os.write_uint64(2, v)?; + } + for v in &self.file { + os.write_tag(15, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> CodeGeneratorResponse { + CodeGeneratorResponse::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "error", + |m: &CodeGeneratorResponse| { &m.error }, + |m: &mut CodeGeneratorResponse| { &mut m.error }, + )); + fields.push(crate::reflect::accessor::make_option_accessor::<_, crate::types::ProtobufTypeUint64>( + "supported_features", + |m: &CodeGeneratorResponse| { &m.supported_features }, + |m: &mut CodeGeneratorResponse| { &mut m.supported_features }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<CodeGeneratorResponse_File>>( + "file", + |m: &CodeGeneratorResponse| { &m.file }, + |m: &mut CodeGeneratorResponse| { &mut m.file }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<CodeGeneratorResponse>( + "CodeGeneratorResponse", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static CodeGeneratorResponse { + static instance: crate::rt::LazyV2<CodeGeneratorResponse> = crate::rt::LazyV2::INIT; + instance.get(CodeGeneratorResponse::new) + } +} + +impl crate::Clear for CodeGeneratorResponse { + fn clear(&mut self) { + self.error.clear(); + self.supported_features = ::std::option::Option::None; + self.file.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for CodeGeneratorResponse { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for CodeGeneratorResponse { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct CodeGeneratorResponse_File { + // message fields + name: crate::SingularField<::std::string::String>, + insertion_point: crate::SingularField<::std::string::String>, + content: crate::SingularField<::std::string::String>, + pub generated_code_info: crate::SingularPtrField<crate::descriptor::GeneratedCodeInfo>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a CodeGeneratorResponse_File { + fn default() -> &'a CodeGeneratorResponse_File { + <CodeGeneratorResponse_File as crate::Message>::default_instance() + } +} + +impl CodeGeneratorResponse_File { + pub fn new() -> CodeGeneratorResponse_File { + ::std::default::Default::default() + } + + // optional string name = 1; + + + pub fn get_name(&self) -> &str { + match self.name.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_name(&mut self) { + self.name.clear(); + } + + pub fn has_name(&self) -> bool { + self.name.is_some() + } + + // Param is passed by value, moved + pub fn set_name(&mut self, v: ::std::string::String) { + self.name = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_name(&mut self) -> &mut ::std::string::String { + if self.name.is_none() { + self.name.set_default(); + } + self.name.as_mut().unwrap() + } + + // Take field + pub fn take_name(&mut self) -> ::std::string::String { + self.name.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional string insertion_point = 2; + + + pub fn get_insertion_point(&self) -> &str { + match self.insertion_point.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_insertion_point(&mut self) { + self.insertion_point.clear(); + } + + pub fn has_insertion_point(&self) -> bool { + self.insertion_point.is_some() + } + + // Param is passed by value, moved + pub fn set_insertion_point(&mut self, v: ::std::string::String) { + self.insertion_point = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_insertion_point(&mut self) -> &mut ::std::string::String { + if self.insertion_point.is_none() { + self.insertion_point.set_default(); + } + self.insertion_point.as_mut().unwrap() + } + + // Take field + pub fn take_insertion_point(&mut self) -> ::std::string::String { + self.insertion_point.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional string content = 15; + + + pub fn get_content(&self) -> &str { + match self.content.as_ref() { + Some(v) => &v, + None => "", + } + } + pub fn clear_content(&mut self) { + self.content.clear(); + } + + pub fn has_content(&self) -> bool { + self.content.is_some() + } + + // Param is passed by value, moved + pub fn set_content(&mut self, v: ::std::string::String) { + self.content = crate::SingularField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_content(&mut self) -> &mut ::std::string::String { + if self.content.is_none() { + self.content.set_default(); + } + self.content.as_mut().unwrap() + } + + // Take field + pub fn take_content(&mut self) -> ::std::string::String { + self.content.take().unwrap_or_else(|| ::std::string::String::new()) + } + + // optional .google.protobuf.GeneratedCodeInfo generated_code_info = 16; + + + pub fn get_generated_code_info(&self) -> &crate::descriptor::GeneratedCodeInfo { + self.generated_code_info.as_ref().unwrap_or_else(|| <crate::descriptor::GeneratedCodeInfo as crate::Message>::default_instance()) + } + pub fn clear_generated_code_info(&mut self) { + self.generated_code_info.clear(); + } + + pub fn has_generated_code_info(&self) -> bool { + self.generated_code_info.is_some() + } + + // Param is passed by value, moved + pub fn set_generated_code_info(&mut self, v: crate::descriptor::GeneratedCodeInfo) { + self.generated_code_info = crate::SingularPtrField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_generated_code_info(&mut self) -> &mut crate::descriptor::GeneratedCodeInfo { + if self.generated_code_info.is_none() { + self.generated_code_info.set_default(); + } + self.generated_code_info.as_mut().unwrap() + } + + // Take field + pub fn take_generated_code_info(&mut self) -> crate::descriptor::GeneratedCodeInfo { + self.generated_code_info.take().unwrap_or_else(|| crate::descriptor::GeneratedCodeInfo::new()) + } +} + +impl crate::Message for CodeGeneratorResponse_File { + fn is_initialized(&self) -> bool { + for v in &self.generated_code_info { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.name)?; + }, + 2 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.insertion_point)?; + }, + 15 => { + crate::rt::read_singular_string_into(wire_type, is, &mut self.content)?; + }, + 16 => { + crate::rt::read_singular_message_into(wire_type, is, &mut self.generated_code_info)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let Some(ref v) = self.name.as_ref() { + my_size += crate::rt::string_size(1, &v); + } + if let Some(ref v) = self.insertion_point.as_ref() { + my_size += crate::rt::string_size(2, &v); + } + if let Some(ref v) = self.content.as_ref() { + my_size += crate::rt::string_size(15, &v); + } + if let Some(ref v) = self.generated_code_info.as_ref() { + let len = v.compute_size(); + my_size += 2 + crate::rt::compute_raw_varint32_size(len) + len; + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let Some(ref v) = self.name.as_ref() { + os.write_string(1, &v)?; + } + if let Some(ref v) = self.insertion_point.as_ref() { + os.write_string(2, &v)?; + } + if let Some(ref v) = self.content.as_ref() { + os.write_string(15, &v)?; + } + if let Some(ref v) = self.generated_code_info.as_ref() { + os.write_tag(16, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> CodeGeneratorResponse_File { + CodeGeneratorResponse_File::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "name", + |m: &CodeGeneratorResponse_File| { &m.name }, + |m: &mut CodeGeneratorResponse_File| { &mut m.name }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "insertion_point", + |m: &CodeGeneratorResponse_File| { &m.insertion_point }, + |m: &mut CodeGeneratorResponse_File| { &mut m.insertion_point }, + )); + fields.push(crate::reflect::accessor::make_singular_field_accessor::<_, crate::types::ProtobufTypeString>( + "content", + |m: &CodeGeneratorResponse_File| { &m.content }, + |m: &mut CodeGeneratorResponse_File| { &mut m.content }, + )); + fields.push(crate::reflect::accessor::make_singular_ptr_field_accessor::<_, crate::types::ProtobufTypeMessage<crate::descriptor::GeneratedCodeInfo>>( + "generated_code_info", + |m: &CodeGeneratorResponse_File| { &m.generated_code_info }, + |m: &mut CodeGeneratorResponse_File| { &mut m.generated_code_info }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<CodeGeneratorResponse_File>( + "CodeGeneratorResponse.File", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static CodeGeneratorResponse_File { + static instance: crate::rt::LazyV2<CodeGeneratorResponse_File> = crate::rt::LazyV2::INIT; + instance.get(CodeGeneratorResponse_File::new) + } +} + +impl crate::Clear for CodeGeneratorResponse_File { + fn clear(&mut self) { + self.name.clear(); + self.insertion_point.clear(); + self.content.clear(); + self.generated_code_info.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for CodeGeneratorResponse_File { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for CodeGeneratorResponse_File { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(Clone,PartialEq,Eq,Debug,Hash)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub enum CodeGeneratorResponse_Feature { + FEATURE_NONE = 0, + FEATURE_PROTO3_OPTIONAL = 1, +} + +impl crate::ProtobufEnum for CodeGeneratorResponse_Feature { + fn value(&self) -> i32 { + *self as i32 + } + + fn from_i32(value: i32) -> ::std::option::Option<CodeGeneratorResponse_Feature> { + match value { + 0 => ::std::option::Option::Some(CodeGeneratorResponse_Feature::FEATURE_NONE), + 1 => ::std::option::Option::Some(CodeGeneratorResponse_Feature::FEATURE_PROTO3_OPTIONAL), + _ => ::std::option::Option::None + } + } + + fn values() -> &'static [Self] { + static values: &'static [CodeGeneratorResponse_Feature] = &[ + CodeGeneratorResponse_Feature::FEATURE_NONE, + CodeGeneratorResponse_Feature::FEATURE_PROTO3_OPTIONAL, + ]; + values + } + + fn enum_descriptor_static() -> &'static crate::reflect::EnumDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::EnumDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + crate::reflect::EnumDescriptor::new_pb_name::<CodeGeneratorResponse_Feature>("CodeGeneratorResponse.Feature", file_descriptor_proto()) + }) + } +} + +impl ::std::marker::Copy for CodeGeneratorResponse_Feature { +} + +impl ::std::default::Default for CodeGeneratorResponse_Feature { + fn default() -> Self { + CodeGeneratorResponse_Feature::FEATURE_NONE + } +} + +impl crate::reflect::ProtobufValue for CodeGeneratorResponse_Feature { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Enum(crate::ProtobufEnum::descriptor(self)) + } +} + +static file_descriptor_proto_data: &'static [u8] = b"\ + \n%google/protobuf/compiler/plugin.proto\x12\x18google.protobuf.compiler\ + \x1a\x20google/protobuf/descriptor.proto\"c\n\x07Version\x12\x14\n\x05ma\ + jor\x18\x01\x20\x01(\x05R\x05major\x12\x14\n\x05minor\x18\x02\x20\x01(\ + \x05R\x05minor\x12\x14\n\x05patch\x18\x03\x20\x01(\x05R\x05patch\x12\x16\ + \n\x06suffix\x18\x04\x20\x01(\tR\x06suffix\"\xf1\x01\n\x14CodeGeneratorR\ + equest\x12(\n\x10file_to_generate\x18\x01\x20\x03(\tR\x0efileToGenerate\ + \x12\x1c\n\tparameter\x18\x02\x20\x01(\tR\tparameter\x12C\n\nproto_file\ + \x18\x0f\x20\x03(\x0b2$.google.protobuf.FileDescriptorProtoR\tprotoFile\ + \x12L\n\x10compiler_version\x18\x03\x20\x01(\x0b2!.google.protobuf.compi\ + ler.VersionR\x0fcompilerVersion\"\x94\x03\n\x15CodeGeneratorResponse\x12\ + \x14\n\x05error\x18\x01\x20\x01(\tR\x05error\x12-\n\x12supported_feature\ + s\x18\x02\x20\x01(\x04R\x11supportedFeatures\x12H\n\x04file\x18\x0f\x20\ + \x03(\x0b24.google.protobuf.compiler.CodeGeneratorResponse.FileR\x04file\ + \x1a\xb1\x01\n\x04File\x12\x12\n\x04name\x18\x01\x20\x01(\tR\x04name\x12\ + '\n\x0finsertion_point\x18\x02\x20\x01(\tR\x0einsertionPoint\x12\x18\n\ + \x07content\x18\x0f\x20\x01(\tR\x07content\x12R\n\x13generated_code_info\ + \x18\x10\x20\x01(\x0b2\".google.protobuf.GeneratedCodeInfoR\x11generated\ + CodeInfo\"8\n\x07Feature\x12\x10\n\x0cFEATURE_NONE\x10\0\x12\x1b\n\x17FE\ + ATURE_PROTO3_OPTIONAL\x10\x01BW\n\x1ccom.google.protobuf.compilerB\x0cPl\ + uginProtosZ)google.golang.org/protobuf/types/pluginpbJ\xf9C\n\x07\x12\ + \x05.\0\xb6\x01\x01\n\xca\x11\n\x01\x0c\x12\x03.\0\x122\xc1\x0c\x20Proto\ + col\x20Buffers\x20-\x20Google's\x20data\x20interchange\x20format\n\x20Co\ + pyright\x202008\x20Google\x20Inc.\x20\x20All\x20rights\x20reserved.\n\ + \x20https://developers.google.com/protocol-buffers/\n\n\x20Redistributio\ + n\x20and\x20use\x20in\x20source\x20and\x20binary\x20forms,\x20with\x20or\ + \x20without\n\x20modification,\x20are\x20permitted\x20provided\x20that\ + \x20the\x20following\x20conditions\x20are\n\x20met:\n\n\x20\x20\x20\x20\ + \x20*\x20Redistributions\x20of\x20source\x20code\x20must\x20retain\x20th\ + e\x20above\x20copyright\n\x20notice,\x20this\x20list\x20of\x20conditions\ + \x20and\x20the\x20following\x20disclaimer.\n\x20\x20\x20\x20\x20*\x20Red\ + istributions\x20in\x20binary\x20form\x20must\x20reproduce\x20the\x20abov\ + e\n\x20copyright\x20notice,\x20this\x20list\x20of\x20conditions\x20and\ + \x20the\x20following\x20disclaimer\n\x20in\x20the\x20documentation\x20an\ + d/or\x20other\x20materials\x20provided\x20with\x20the\n\x20distribution.\ + \n\x20\x20\x20\x20\x20*\x20Neither\x20the\x20name\x20of\x20Google\x20Inc\ + .\x20nor\x20the\x20names\x20of\x20its\n\x20contributors\x20may\x20be\x20\ + used\x20to\x20endorse\x20or\x20promote\x20products\x20derived\x20from\n\ + \x20this\x20software\x20without\x20specific\x20prior\x20written\x20permi\ + ssion.\n\n\x20THIS\x20SOFTWARE\x20IS\x20PROVIDED\x20BY\x20THE\x20COPYRIG\ + HT\x20HOLDERS\x20AND\x20CONTRIBUTORS\n\x20\"AS\x20IS\"\x20AND\x20ANY\x20\ + EXPRESS\x20OR\x20IMPLIED\x20WARRANTIES,\x20INCLUDING,\x20BUT\x20NOT\n\ + \x20LIMITED\x20TO,\x20THE\x20IMPLIED\x20WARRANTIES\x20OF\x20MERCHANTABIL\ + ITY\x20AND\x20FITNESS\x20FOR\n\x20A\x20PARTICULAR\x20PURPOSE\x20ARE\x20D\ + ISCLAIMED.\x20IN\x20NO\x20EVENT\x20SHALL\x20THE\x20COPYRIGHT\n\x20OWNER\ + \x20OR\x20CONTRIBUTORS\x20BE\x20LIABLE\x20FOR\x20ANY\x20DIRECT,\x20INDIR\ + ECT,\x20INCIDENTAL,\n\x20SPECIAL,\x20EXEMPLARY,\x20OR\x20CONSEQUENTIAL\ + \x20DAMAGES\x20(INCLUDING,\x20BUT\x20NOT\n\x20LIMITED\x20TO,\x20PROCUREM\ + ENT\x20OF\x20SUBSTITUTE\x20GOODS\x20OR\x20SERVICES;\x20LOSS\x20OF\x20USE\ + ,\n\x20DATA,\x20OR\x20PROFITS;\x20OR\x20BUSINESS\x20INTERRUPTION)\x20HOW\ + EVER\x20CAUSED\x20AND\x20ON\x20ANY\n\x20THEORY\x20OF\x20LIABILITY,\x20WH\ + ETHER\x20IN\x20CONTRACT,\x20STRICT\x20LIABILITY,\x20OR\x20TORT\n\x20(INC\ + LUDING\x20NEGLIGENCE\x20OR\x20OTHERWISE)\x20ARISING\x20IN\x20ANY\x20WAY\ + \x20OUT\x20OF\x20THE\x20USE\n\x20OF\x20THIS\x20SOFTWARE,\x20EVEN\x20IF\ + \x20ADVISED\x20OF\x20THE\x20POSSIBILITY\x20OF\x20SUCH\x20DAMAGE.\n2\xfb\ + \x04\x20Author:\x20kenton@google.com\x20(Kenton\x20Varda)\n\n\x20WARNING\ + :\x20\x20The\x20plugin\x20interface\x20is\x20currently\x20EXPERIMENTAL\ + \x20and\x20is\x20subject\x20to\n\x20\x20\x20change.\n\n\x20protoc\x20(ak\ + a\x20the\x20Protocol\x20Compiler)\x20can\x20be\x20extended\x20via\x20plu\ + gins.\x20\x20A\x20plugin\x20is\n\x20just\x20a\x20program\x20that\x20read\ + s\x20a\x20CodeGeneratorRequest\x20from\x20stdin\x20and\x20writes\x20a\n\ + \x20CodeGeneratorResponse\x20to\x20stdout.\n\n\x20Plugins\x20written\x20\ + using\x20C++\x20can\x20use\x20google/protobuf/compiler/plugin.h\x20inste\ + ad\n\x20of\x20dealing\x20with\x20the\x20raw\x20protocol\x20defined\x20he\ + re.\n\n\x20A\x20plugin\x20executable\x20needs\x20only\x20to\x20be\x20pla\ + ced\x20somewhere\x20in\x20the\x20path.\x20\x20The\n\x20plugin\x20should\ + \x20be\x20named\x20\"protoc-gen-$NAME\",\x20and\x20will\x20then\x20be\ + \x20used\x20when\x20the\n\x20flag\x20\"--${NAME}_out\"\x20is\x20passed\ + \x20to\x20protoc.\n\n\x08\n\x01\x02\x12\x030\0!\n\x08\n\x01\x08\x12\x031\ + \05\n\t\n\x02\x08\x01\x12\x031\05\n\x08\n\x01\x08\x12\x032\0-\n\t\n\x02\ + \x08\x08\x12\x032\0-\n\x08\n\x01\x08\x12\x034\0@\n\t\n\x02\x08\x0b\x12\ + \x034\0@\n\t\n\x02\x03\0\x12\x036\0*\n6\n\x02\x04\0\x12\x049\0@\x01\x1a*\ + \x20The\x20version\x20number\x20of\x20protocol\x20compiler.\n\n\n\n\x03\ + \x04\0\x01\x12\x039\x08\x0f\n\x0b\n\x04\x04\0\x02\0\x12\x03:\x02\x1b\n\ + \x0c\n\x05\x04\0\x02\0\x04\x12\x03:\x02\n\n\x0c\n\x05\x04\0\x02\0\x05\ + \x12\x03:\x0b\x10\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03:\x11\x16\n\x0c\n\ + \x05\x04\0\x02\0\x03\x12\x03:\x19\x1a\n\x0b\n\x04\x04\0\x02\x01\x12\x03;\ + \x02\x1b\n\x0c\n\x05\x04\0\x02\x01\x04\x12\x03;\x02\n\n\x0c\n\x05\x04\0\ + \x02\x01\x05\x12\x03;\x0b\x10\n\x0c\n\x05\x04\0\x02\x01\x01\x12\x03;\x11\ + \x16\n\x0c\n\x05\x04\0\x02\x01\x03\x12\x03;\x19\x1a\n\x0b\n\x04\x04\0\ + \x02\x02\x12\x03<\x02\x1b\n\x0c\n\x05\x04\0\x02\x02\x04\x12\x03<\x02\n\n\ + \x0c\n\x05\x04\0\x02\x02\x05\x12\x03<\x0b\x10\n\x0c\n\x05\x04\0\x02\x02\ + \x01\x12\x03<\x11\x16\n\x0c\n\x05\x04\0\x02\x02\x03\x12\x03<\x19\x1a\n\ + \x80\x01\n\x04\x04\0\x02\x03\x12\x03?\x02\x1d\x1as\x20A\x20suffix\x20for\ + \x20alpha,\x20beta\x20or\x20rc\x20release,\x20e.g.,\x20\"alpha-1\",\x20\ + \"rc2\".\x20It\x20should\n\x20be\x20empty\x20for\x20mainline\x20stable\ + \x20releases.\n\n\x0c\n\x05\x04\0\x02\x03\x04\x12\x03?\x02\n\n\x0c\n\x05\ + \x04\0\x02\x03\x05\x12\x03?\x0b\x11\n\x0c\n\x05\x04\0\x02\x03\x01\x12\ + \x03?\x12\x18\n\x0c\n\x05\x04\0\x02\x03\x03\x12\x03?\x1b\x1c\nO\n\x02\ + \x04\x01\x12\x04C\0_\x01\x1aC\x20An\x20encoded\x20CodeGeneratorRequest\ + \x20is\x20written\x20to\x20the\x20plugin's\x20stdin.\n\n\n\n\x03\x04\x01\ + \x01\x12\x03C\x08\x1c\n\xd1\x01\n\x04\x04\x01\x02\0\x12\x03G\x02'\x1a\ + \xc3\x01\x20The\x20.proto\x20files\x20that\x20were\x20explicitly\x20list\ + ed\x20on\x20the\x20command-line.\x20\x20The\n\x20code\x20generator\x20sh\ + ould\x20generate\x20code\x20only\x20for\x20these\x20files.\x20\x20Each\ + \x20file's\n\x20descriptor\x20will\x20be\x20included\x20in\x20proto_file\ + ,\x20below.\n\n\x0c\n\x05\x04\x01\x02\0\x04\x12\x03G\x02\n\n\x0c\n\x05\ + \x04\x01\x02\0\x05\x12\x03G\x0b\x11\n\x0c\n\x05\x04\x01\x02\0\x01\x12\ + \x03G\x12\"\n\x0c\n\x05\x04\x01\x02\0\x03\x12\x03G%&\nB\n\x04\x04\x01\ + \x02\x01\x12\x03J\x02\x20\x1a5\x20The\x20generator\x20parameter\x20passe\ + d\x20on\x20the\x20command-line.\n\n\x0c\n\x05\x04\x01\x02\x01\x04\x12\ + \x03J\x02\n\n\x0c\n\x05\x04\x01\x02\x01\x05\x12\x03J\x0b\x11\n\x0c\n\x05\ + \x04\x01\x02\x01\x01\x12\x03J\x12\x1b\n\x0c\n\x05\x04\x01\x02\x01\x03\ + \x12\x03J\x1e\x1f\n\x87\x06\n\x04\x04\x01\x02\x02\x12\x03Z\x02/\x1a\xf9\ + \x05\x20FileDescriptorProtos\x20for\x20all\x20files\x20in\x20files_to_ge\ + nerate\x20and\x20everything\n\x20they\x20import.\x20\x20The\x20files\x20\ + will\x20appear\x20in\x20topological\x20order,\x20so\x20each\x20file\n\ + \x20appears\x20before\x20any\x20file\x20that\x20imports\x20it.\n\n\x20pr\ + otoc\x20guarantees\x20that\x20all\x20proto_files\x20will\x20be\x20writte\ + n\x20after\n\x20the\x20fields\x20above,\x20even\x20though\x20this\x20is\ + \x20not\x20technically\x20guaranteed\x20by\x20the\n\x20protobuf\x20wire\ + \x20format.\x20\x20This\x20theoretically\x20could\x20allow\x20a\x20plugi\ + n\x20to\x20stream\n\x20in\x20the\x20FileDescriptorProtos\x20and\x20handl\ + e\x20them\x20one\x20by\x20one\x20rather\x20than\x20read\n\x20the\x20enti\ + re\x20set\x20into\x20memory\x20at\x20once.\x20\x20However,\x20as\x20of\ + \x20this\x20writing,\x20this\n\x20is\x20not\x20similarly\x20optimized\ + \x20on\x20protoc's\x20end\x20--\x20it\x20will\x20store\x20all\x20fields\ + \x20in\n\x20memory\x20at\x20once\x20before\x20sending\x20them\x20to\x20t\ + he\x20plugin.\n\n\x20Type\x20names\x20of\x20fields\x20and\x20extensions\ + \x20in\x20the\x20FileDescriptorProto\x20are\x20always\n\x20fully\x20qual\ + ified.\n\n\x0c\n\x05\x04\x01\x02\x02\x04\x12\x03Z\x02\n\n\x0c\n\x05\x04\ + \x01\x02\x02\x06\x12\x03Z\x0b\x1e\n\x0c\n\x05\x04\x01\x02\x02\x01\x12\ + \x03Z\x1f)\n\x0c\n\x05\x04\x01\x02\x02\x03\x12\x03Z,.\n7\n\x04\x04\x01\ + \x02\x03\x12\x03]\x02(\x1a*\x20The\x20version\x20number\x20of\x20protoco\ + l\x20compiler.\n\n\x0c\n\x05\x04\x01\x02\x03\x04\x12\x03]\x02\n\n\x0c\n\ + \x05\x04\x01\x02\x03\x06\x12\x03]\x0b\x12\n\x0c\n\x05\x04\x01\x02\x03\ + \x01\x12\x03]\x13#\n\x0c\n\x05\x04\x01\x02\x03\x03\x12\x03]&'\nL\n\x02\ + \x04\x02\x12\x05b\0\xb6\x01\x01\x1a?\x20The\x20plugin\x20writes\x20an\ + \x20encoded\x20CodeGeneratorResponse\x20to\x20stdout.\n\n\n\n\x03\x04\ + \x02\x01\x12\x03b\x08\x1d\n\xed\x03\n\x04\x04\x02\x02\0\x12\x03k\x02\x1c\ + \x1a\xdf\x03\x20Error\x20message.\x20\x20If\x20non-empty,\x20code\x20gen\ + eration\x20failed.\x20\x20The\x20plugin\x20process\n\x20should\x20exit\ + \x20with\x20status\x20code\x20zero\x20even\x20if\x20it\x20reports\x20an\ + \x20error\x20in\x20this\x20way.\n\n\x20This\x20should\x20be\x20used\x20t\ + o\x20indicate\x20errors\x20in\x20.proto\x20files\x20which\x20prevent\x20\ + the\n\x20code\x20generator\x20from\x20generating\x20correct\x20code.\x20\ + \x20Errors\x20which\x20indicate\x20a\n\x20problem\x20in\x20protoc\x20its\ + elf\x20--\x20such\x20as\x20the\x20input\x20CodeGeneratorRequest\x20being\ + \n\x20unparseable\x20--\x20should\x20be\x20reported\x20by\x20writing\x20\ + a\x20message\x20to\x20stderr\x20and\n\x20exiting\x20with\x20a\x20non-zer\ + o\x20status\x20code.\n\n\x0c\n\x05\x04\x02\x02\0\x04\x12\x03k\x02\n\n\ + \x0c\n\x05\x04\x02\x02\0\x05\x12\x03k\x0b\x11\n\x0c\n\x05\x04\x02\x02\0\ + \x01\x12\x03k\x12\x17\n\x0c\n\x05\x04\x02\x02\0\x03\x12\x03k\x1a\x1b\n\ + \x89\x01\n\x04\x04\x02\x02\x01\x12\x03o\x02)\x1a|\x20A\x20bitmask\x20of\ + \x20supported\x20features\x20that\x20the\x20code\x20generator\x20support\ + s.\n\x20This\x20is\x20a\x20bitwise\x20\"or\"\x20of\x20values\x20from\x20\ + the\x20Feature\x20enum.\n\n\x0c\n\x05\x04\x02\x02\x01\x04\x12\x03o\x02\n\ + \n\x0c\n\x05\x04\x02\x02\x01\x05\x12\x03o\x0b\x11\n\x0c\n\x05\x04\x02\ + \x02\x01\x01\x12\x03o\x12$\n\x0c\n\x05\x04\x02\x02\x01\x03\x12\x03o'(\n+\ + \n\x04\x04\x02\x04\0\x12\x04r\x02u\x03\x1a\x1d\x20Sync\x20with\x20code_g\ + enerator.h.\n\n\x0c\n\x05\x04\x02\x04\0\x01\x12\x03r\x07\x0e\n\r\n\x06\ + \x04\x02\x04\0\x02\0\x12\x03s\x04\x15\n\x0e\n\x07\x04\x02\x04\0\x02\0\ + \x01\x12\x03s\x04\x10\n\x0e\n\x07\x04\x02\x04\0\x02\0\x02\x12\x03s\x13\ + \x14\n\r\n\x06\x04\x02\x04\0\x02\x01\x12\x03t\x04\x20\n\x0e\n\x07\x04\ + \x02\x04\0\x02\x01\x01\x12\x03t\x04\x1b\n\x0e\n\x07\x04\x02\x04\0\x02\ + \x01\x02\x12\x03t\x1e\x1f\n4\n\x04\x04\x02\x03\0\x12\x05x\x02\xb4\x01\ + \x03\x1a%\x20Represents\x20a\x20single\x20generated\x20file.\n\n\x0c\n\ + \x05\x04\x02\x03\0\x01\x12\x03x\n\x0e\n\xae\x05\n\x06\x04\x02\x03\0\x02\ + \0\x12\x04\x84\x01\x04\x1d\x1a\x9d\x05\x20The\x20file\x20name,\x20relati\ + ve\x20to\x20the\x20output\x20directory.\x20\x20The\x20name\x20must\x20no\ + t\n\x20contain\x20\".\"\x20or\x20\"..\"\x20components\x20and\x20must\x20\ + be\x20relative,\x20not\x20be\x20absolute\x20(so,\n\x20the\x20file\x20can\ + not\x20lie\x20outside\x20the\x20output\x20directory).\x20\x20\"/\"\x20mu\ + st\x20be\x20used\x20as\n\x20the\x20path\x20separator,\x20not\x20\"\\\".\ + \n\n\x20If\x20the\x20name\x20is\x20omitted,\x20the\x20content\x20will\ + \x20be\x20appended\x20to\x20the\x20previous\n\x20file.\x20\x20This\x20al\ + lows\x20the\x20generator\x20to\x20break\x20large\x20files\x20into\x20sma\ + ll\x20chunks,\n\x20and\x20allows\x20the\x20generated\x20text\x20to\x20be\ + \x20streamed\x20back\x20to\x20protoc\x20so\x20that\x20large\n\x20files\ + \x20need\x20not\x20reside\x20completely\x20in\x20memory\x20at\x20one\x20\ + time.\x20\x20Note\x20that\x20as\x20of\n\x20this\x20writing\x20protoc\x20\ + does\x20not\x20optimize\x20for\x20this\x20--\x20it\x20will\x20read\x20th\ + e\x20entire\n\x20CodeGeneratorResponse\x20before\x20writing\x20files\x20\ + to\x20disk.\n\n\x0f\n\x07\x04\x02\x03\0\x02\0\x04\x12\x04\x84\x01\x04\ + \x0c\n\x0f\n\x07\x04\x02\x03\0\x02\0\x05\x12\x04\x84\x01\r\x13\n\x0f\n\ + \x07\x04\x02\x03\0\x02\0\x01\x12\x04\x84\x01\x14\x18\n\x0f\n\x07\x04\x02\ + \x03\0\x02\0\x03\x12\x04\x84\x01\x1b\x1c\n\xae\x10\n\x06\x04\x02\x03\0\ + \x02\x01\x12\x04\xab\x01\x04(\x1a\x9d\x10\x20If\x20non-empty,\x20indicat\ + es\x20that\x20the\x20named\x20file\x20should\x20already\x20exist,\x20and\ + \x20the\n\x20content\x20here\x20is\x20to\x20be\x20inserted\x20into\x20th\ + at\x20file\x20at\x20a\x20defined\x20insertion\n\x20point.\x20\x20This\ + \x20feature\x20allows\x20a\x20code\x20generator\x20to\x20extend\x20the\ + \x20output\n\x20produced\x20by\x20another\x20code\x20generator.\x20\x20T\ + he\x20original\x20generator\x20may\x20provide\n\x20insertion\x20points\ + \x20by\x20placing\x20special\x20annotations\x20in\x20the\x20file\x20that\ + \x20look\n\x20like:\n\x20\x20\x20@@protoc_insertion_point(NAME)\n\x20The\ + \x20annotation\x20can\x20have\x20arbitrary\x20text\x20before\x20and\x20a\ + fter\x20it\x20on\x20the\x20line,\n\x20which\x20allows\x20it\x20to\x20be\ + \x20placed\x20in\x20a\x20comment.\x20\x20NAME\x20should\x20be\x20replace\ + d\x20with\n\x20an\x20identifier\x20naming\x20the\x20point\x20--\x20this\ + \x20is\x20what\x20other\x20generators\x20will\x20use\n\x20as\x20the\x20i\ + nsertion_point.\x20\x20Code\x20inserted\x20at\x20this\x20point\x20will\ + \x20be\x20placed\n\x20immediately\x20above\x20the\x20line\x20containing\ + \x20the\x20insertion\x20point\x20(thus\x20multiple\n\x20insertions\x20to\ + \x20the\x20same\x20point\x20will\x20come\x20out\x20in\x20the\x20order\ + \x20they\x20were\x20added).\n\x20The\x20double-@\x20is\x20intended\x20to\ + \x20make\x20it\x20unlikely\x20that\x20the\x20generated\x20code\n\x20coul\ + d\x20contain\x20things\x20that\x20look\x20like\x20insertion\x20points\ + \x20by\x20accident.\n\n\x20For\x20example,\x20the\x20C++\x20code\x20gene\ + rator\x20places\x20the\x20following\x20line\x20in\x20the\n\x20.pb.h\x20f\ + iles\x20that\x20it\x20generates:\n\x20\x20\x20//\x20@@protoc_insertion_p\ + oint(namespace_scope)\n\x20This\x20line\x20appears\x20within\x20the\x20s\ + cope\x20of\x20the\x20file's\x20package\x20namespace,\x20but\n\x20outside\ + \x20of\x20any\x20particular\x20class.\x20\x20Another\x20plugin\x20can\ + \x20then\x20specify\x20the\n\x20insertion_point\x20\"namespace_scope\"\ + \x20to\x20generate\x20additional\x20classes\x20or\n\x20other\x20declarat\ + ions\x20that\x20should\x20be\x20placed\x20in\x20this\x20scope.\n\n\x20No\ + te\x20that\x20if\x20the\x20line\x20containing\x20the\x20insertion\x20poi\ + nt\x20begins\x20with\n\x20whitespace,\x20the\x20same\x20whitespace\x20wi\ + ll\x20be\x20added\x20to\x20every\x20line\x20of\x20the\n\x20inserted\x20t\ + ext.\x20\x20This\x20is\x20useful\x20for\x20languages\x20like\x20Python,\ + \x20where\n\x20indentation\x20matters.\x20\x20In\x20these\x20languages,\ + \x20the\x20insertion\x20point\x20comment\n\x20should\x20be\x20indented\ + \x20the\x20same\x20amount\x20as\x20any\x20inserted\x20code\x20will\x20ne\ + ed\x20to\x20be\n\x20in\x20order\x20to\x20work\x20correctly\x20in\x20that\ + \x20context.\n\n\x20The\x20code\x20generator\x20that\x20generates\x20the\ + \x20initial\x20file\x20and\x20the\x20one\x20which\n\x20inserts\x20into\ + \x20it\x20must\x20both\x20run\x20as\x20part\x20of\x20a\x20single\x20invo\ + cation\x20of\x20protoc.\n\x20Code\x20generators\x20are\x20executed\x20in\ + \x20the\x20order\x20in\x20which\x20they\x20appear\x20on\x20the\n\x20comm\ + and\x20line.\n\n\x20If\x20|insertion_point|\x20is\x20present,\x20|name|\ + \x20must\x20also\x20be\x20present.\n\n\x0f\n\x07\x04\x02\x03\0\x02\x01\ + \x04\x12\x04\xab\x01\x04\x0c\n\x0f\n\x07\x04\x02\x03\0\x02\x01\x05\x12\ + \x04\xab\x01\r\x13\n\x0f\n\x07\x04\x02\x03\0\x02\x01\x01\x12\x04\xab\x01\ + \x14#\n\x0f\n\x07\x04\x02\x03\0\x02\x01\x03\x12\x04\xab\x01&'\n$\n\x06\ + \x04\x02\x03\0\x02\x02\x12\x04\xae\x01\x04!\x1a\x14\x20The\x20file\x20co\ + ntents.\n\n\x0f\n\x07\x04\x02\x03\0\x02\x02\x04\x12\x04\xae\x01\x04\x0c\ + \n\x0f\n\x07\x04\x02\x03\0\x02\x02\x05\x12\x04\xae\x01\r\x13\n\x0f\n\x07\ + \x04\x02\x03\0\x02\x02\x01\x12\x04\xae\x01\x14\x1b\n\x0f\n\x07\x04\x02\ + \x03\0\x02\x02\x03\x12\x04\xae\x01\x1e\x20\n\xe1\x01\n\x06\x04\x02\x03\0\ + \x02\x03\x12\x04\xb3\x01\x048\x1a\xd0\x01\x20Information\x20describing\ + \x20the\x20file\x20content\x20being\x20inserted.\x20If\x20an\x20insertio\ + n\n\x20point\x20is\x20used,\x20this\x20information\x20will\x20be\x20appr\ + opriately\x20offset\x20and\x20inserted\n\x20into\x20the\x20code\x20gener\ + ation\x20metadata\x20for\x20the\x20generated\x20files.\n\n\x0f\n\x07\x04\ + \x02\x03\0\x02\x03\x04\x12\x04\xb3\x01\x04\x0c\n\x0f\n\x07\x04\x02\x03\0\ + \x02\x03\x06\x12\x04\xb3\x01\r\x1e\n\x0f\n\x07\x04\x02\x03\0\x02\x03\x01\ + \x12\x04\xb3\x01\x1f2\n\x0f\n\x07\x04\x02\x03\0\x02\x03\x03\x12\x04\xb3\ + \x0157\n\x0c\n\x04\x04\x02\x02\x02\x12\x04\xb5\x01\x02\x1a\n\r\n\x05\x04\ + \x02\x02\x02\x04\x12\x04\xb5\x01\x02\n\n\r\n\x05\x04\x02\x02\x02\x06\x12\ + \x04\xb5\x01\x0b\x0f\n\r\n\x05\x04\x02\x02\x02\x01\x12\x04\xb5\x01\x10\ + \x14\n\r\n\x05\x04\x02\x02\x02\x03\x12\x04\xb5\x01\x17\x19\ +"; + +static file_descriptor_proto_lazy: crate::rt::LazyV2<crate::descriptor::FileDescriptorProto> = crate::rt::LazyV2::INIT; + +fn parse_descriptor_proto() -> crate::descriptor::FileDescriptorProto { + crate::Message::parse_from_bytes(file_descriptor_proto_data).unwrap() +} + +pub fn file_descriptor_proto() -> &'static crate::descriptor::FileDescriptorProto { + file_descriptor_proto_lazy.get(|| { + parse_descriptor_proto() + }) +} diff --git a/2.27.1/src/reflect/acc/mod.rs b/2.27.1/src/reflect/acc/mod.rs new file mode 100644 index 0000000..288c183 --- /dev/null +++ b/2.27.1/src/reflect/acc/mod.rs @@ -0,0 +1,31 @@ +#![doc(hidden)] + +use crate::reflect::acc::v1::FieldAccessorFunctions; +use crate::reflect::acc::v1::FieldAccessorImpl; +use crate::reflect::acc::v1::FieldAccessorTrait; +use crate::Message; + +pub(crate) mod v1; + +pub(crate) enum Accessor { + V1(Box<dyn FieldAccessorTrait + 'static>), +} + +/// Accessor object is constructed in generated code. +/// Should not be used directly. +pub struct FieldAccessor { + pub(crate) name: &'static str, + pub(crate) accessor: Accessor, +} + +impl FieldAccessor { + pub(crate) fn new_v1<M: Message>( + name: &'static str, + fns: FieldAccessorFunctions<M>, + ) -> FieldAccessor { + FieldAccessor { + name, + accessor: Accessor::V1(Box::new(FieldAccessorImpl { fns })), + } + } +} diff --git a/2.27.1/src/reflect/acc/v1.rs b/2.27.1/src/reflect/acc/v1.rs new file mode 100644 index 0000000..4c55f8f --- /dev/null +++ b/2.27.1/src/reflect/acc/v1.rs @@ -0,0 +1,792 @@ +#![doc(hidden)] + +//! Version 1 reflection accessors. + +use std::collections::HashMap; +use std::fmt; +use std::hash::Hash; + +use crate::enums::ProtobufEnum; +use crate::message::message_down_cast; +use crate::message::Message; +use crate::reflect::map::ReflectMap; +use crate::reflect::optional::ReflectOptional; +use crate::reflect::repeated::ReflectRepeated; +use crate::reflect::repeated::ReflectRepeatedEnum; +use crate::reflect::repeated::ReflectRepeatedMessage; +use crate::reflect::rt::FieldAccessor; +use crate::reflect::EnumValueDescriptor; +use crate::reflect::ProtobufValue; +use crate::reflect::ReflectFieldRef; +use crate::reflect::ReflectValueRef; +use crate::repeated::RepeatedField; +use crate::singular::SingularField; +use crate::singular::SingularPtrField; +use crate::types::*; + +/// this trait should not be used directly, use `FieldDescriptor` instead +pub trait FieldAccessorTrait: Sync + 'static { + fn has_field_generic(&self, m: &dyn Message) -> bool; + fn len_field_generic(&self, m: &dyn Message) -> usize; + // TODO: should it return default value or panic on unset field? + fn get_message_generic<'a>(&self, m: &'a dyn Message) -> &'a dyn Message; + fn get_enum_generic(&self, m: &dyn Message) -> &'static EnumValueDescriptor; + fn get_str_generic<'a>(&self, m: &'a dyn Message) -> &'a str; + fn get_bytes_generic<'a>(&self, m: &'a dyn Message) -> &'a [u8]; + fn get_u32_generic(&self, m: &dyn Message) -> u32; + fn get_u64_generic(&self, m: &dyn Message) -> u64; + fn get_i32_generic(&self, m: &dyn Message) -> i32; + fn get_i64_generic(&self, m: &dyn Message) -> i64; + fn get_bool_generic(&self, m: &dyn Message) -> bool; + fn get_f32_generic(&self, m: &dyn Message) -> f32; + fn get_f64_generic(&self, m: &dyn Message) -> f64; + + fn get_reflect<'a>(&self, m: &'a dyn Message) -> ReflectFieldRef<'a>; +} + +pub(crate) trait GetSingularMessage<M>: Sync { + fn get_message<'a>(&self, m: &'a M) -> &'a dyn Message; +} + +struct GetSingularMessageImpl<M, N> { + get: for<'a> fn(&'a M) -> &'a N, +} + +impl<M: Message, N: Message + 'static> GetSingularMessage<M> for GetSingularMessageImpl<M, N> { + fn get_message<'a>(&self, m: &'a M) -> &'a dyn Message { + (self.get)(m) + } +} + +pub(crate) trait GetSingularEnum<M>: Sync { + fn get_enum(&self, m: &M) -> &'static EnumValueDescriptor; +} + +struct GetSingularEnumImpl<M, E> { + get: fn(&M) -> E, +} + +impl<M: Message, E: ProtobufEnum> GetSingularEnum<M> for GetSingularEnumImpl<M, E> { + fn get_enum(&self, m: &M) -> &'static EnumValueDescriptor { + (self.get)(m).descriptor() + } +} + +trait GetRepeatedMessage<M>: Sync { + fn len_field(&self, m: &M) -> usize; + fn get_message_item<'a>(&self, m: &'a M, index: usize) -> &'a dyn Message; + fn reflect_repeated_message<'a>(&self, m: &'a M) -> Box<dyn ReflectRepeatedMessage<'a> + 'a>; +} + +trait GetRepeatedEnum<M: Message + 'static>: Sync { + fn len_field(&self, m: &M) -> usize; + fn get_enum_item(&self, m: &M, index: usize) -> &'static EnumValueDescriptor; + fn reflect_repeated_enum<'a>(&self, m: &'a M) -> Box<dyn ReflectRepeatedEnum<'a> + 'a>; +} + +pub(crate) trait GetSetCopyFns<M>: Sync { + fn get_field<'a>(&self, m: &'a M) -> ReflectValueRef<'a>; +} + +struct GetSetCopyFnsImpl<M, V: ProtobufValue + Copy> { + get: fn(&M) -> V, + _set: fn(&mut M, V), +} + +impl<M, V: ProtobufValue + Copy> GetSetCopyFns<M> for GetSetCopyFnsImpl<M, V> { + fn get_field<'a>(&self, m: &'a M) -> ReflectValueRef<'a> { + (&(self.get)(m) as &dyn ProtobufValue).as_ref_copy() + } +} + +pub(crate) enum SingularGetSet<M> { + Copy(Box<dyn GetSetCopyFns<M>>), + String(for<'a> fn(&'a M) -> &'a str, fn(&mut M, String)), + Bytes(for<'a> fn(&'a M) -> &'a [u8], fn(&mut M, Vec<u8>)), + Enum(Box<dyn GetSingularEnum<M> + 'static>), + Message(Box<dyn GetSingularMessage<M> + 'static>), +} + +impl<M: Message + 'static> SingularGetSet<M> { + fn get_ref<'a>(&self, m: &'a M) -> ReflectValueRef<'a> { + match self { + &SingularGetSet::Copy(ref copy) => copy.get_field(m), + &SingularGetSet::String(get, _) => ReflectValueRef::String(get(m)), + &SingularGetSet::Bytes(get, _) => ReflectValueRef::Bytes(get(m)), + &SingularGetSet::Enum(ref get) => ReflectValueRef::Enum(get.get_enum(m)), + &SingularGetSet::Message(ref get) => ReflectValueRef::Message(get.get_message(m)), + } + } +} + +pub(crate) trait FieldAccessor2<M, R: ?Sized>: Sync +where + M: Message + 'static, +{ + fn get_field<'a>(&self, _: &'a M) -> &'a R; + fn mut_field<'a>(&self, _: &'a mut M) -> &'a mut R; +} + +struct MessageGetMut<M, L> +where + M: Message + 'static, +{ + get_field: for<'a> fn(&'a M) -> &'a L, + mut_field: for<'a> fn(&'a mut M) -> &'a mut L, +} + +pub(crate) enum FieldAccessorFunctions<M> { + // up to 1.0.24 optional or required + SingularHasGetSet { + has: fn(&M) -> bool, + get_set: SingularGetSet<M>, + }, + // protobuf 3 simple field + Simple(Box<dyn FieldAccessor2<M, dyn ProtobufValue>>), + // optional, required or message + Optional(Box<dyn FieldAccessor2<M, dyn ReflectOptional>>), + // repeated + Repeated(Box<dyn FieldAccessor2<M, dyn ReflectRepeated>>), + // protobuf 3 map + Map(Box<dyn FieldAccessor2<M, dyn ReflectMap>>), +} + +impl<M> fmt::Debug for FieldAccessorFunctions<M> { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + &FieldAccessorFunctions::SingularHasGetSet { .. } => { + write!(f, "SingularHasGetSet {{ .. }}") + } + &FieldAccessorFunctions::Simple(..) => write!(f, "Simple(..)"), + &FieldAccessorFunctions::Optional(..) => write!(f, "Optional(..)"), + &FieldAccessorFunctions::Repeated(..) => write!(f, "Repeated(..)"), + &FieldAccessorFunctions::Map(..) => write!(f, "Map(..)"), + } + } +} + +pub(crate) struct FieldAccessorImpl<M> { + pub(crate) fns: FieldAccessorFunctions<M>, +} + +impl<M: Message> FieldAccessorImpl<M> { + fn get_value_option<'a>(&self, m: &'a M) -> Option<ReflectValueRef<'a>> { + match self.fns { + FieldAccessorFunctions::Repeated(..) | FieldAccessorFunctions::Map(..) => { + panic!("repeated") + } + FieldAccessorFunctions::Simple(ref a) => Some(a.get_field(m).as_ref()), + FieldAccessorFunctions::Optional(ref a) => { + a.get_field(m).to_option().map(|v| v.as_ref()) + } + FieldAccessorFunctions::SingularHasGetSet { + ref has, + ref get_set, + } => { + if !has(m) { + None + } else { + Some(get_set.get_ref(m)) + } + } + } + } +} + +impl<M: Message + 'static> FieldAccessorTrait for FieldAccessorImpl<M> { + fn has_field_generic(&self, m: &dyn Message) -> bool { + match self.fns { + FieldAccessorFunctions::SingularHasGetSet { has, .. } => has(message_down_cast(m)), + FieldAccessorFunctions::Optional(ref a) => { + a.get_field(message_down_cast(m)).to_option().is_some() + } + FieldAccessorFunctions::Simple(ref a) => { + a.get_field(message_down_cast(m)).is_non_zero() + } + FieldAccessorFunctions::Map(..) | FieldAccessorFunctions::Repeated(..) => { + panic!("has_xxx is not implemented for repeated"); + } + } + } + + fn len_field_generic(&self, m: &dyn Message) -> usize { + match self.fns { + FieldAccessorFunctions::Repeated(ref a) => a.get_field(message_down_cast(m)).len(), + FieldAccessorFunctions::Map(ref a) => a.get_field(message_down_cast(m)).len(), + FieldAccessorFunctions::Simple(..) + | FieldAccessorFunctions::SingularHasGetSet { .. } + | FieldAccessorFunctions::Optional(..) => { + panic!("not a repeated field"); + } + } + } + + fn get_message_generic<'a>(&self, m: &'a dyn Message) -> &'a dyn Message { + match self.fns { + FieldAccessorFunctions::SingularHasGetSet { + get_set: SingularGetSet::Message(ref get), + .. + } => get.get_message(message_down_cast(m)), + FieldAccessorFunctions::Optional(ref t) => { + match t + .get_field(message_down_cast(m)) + .to_option() + .expect("field unset") + .as_ref() + { + ReflectValueRef::Message(m) => m, + _ => panic!("not a message"), + } + } + ref fns => panic!("unknown accessor type: {:?}", fns), + } + } + + fn get_enum_generic(&self, m: &dyn Message) -> &'static EnumValueDescriptor { + match self.fns { + FieldAccessorFunctions::SingularHasGetSet { + get_set: SingularGetSet::Enum(ref get), + .. + } => get.get_enum(message_down_cast(m)), + FieldAccessorFunctions::Optional(ref t) => { + match t + .get_field(message_down_cast(m)) + .to_option() + .expect("field unset") + .as_ref() + { + ReflectValueRef::Enum(e) => e, + _ => panic!("not an enum"), + } + } + FieldAccessorFunctions::Simple(ref t) => { + match t.get_field(message_down_cast(m)).as_ref() { + ReflectValueRef::Enum(e) => e, + _ => panic!("not an enum"), + } + } + ref fns => panic!("unknown accessor type: {:?}", fns), + } + } + + fn get_str_generic<'a>(&self, m: &'a dyn Message) -> &'a str { + match self.get_value_option(message_down_cast(m)) { + Some(ReflectValueRef::String(v)) => v, + Some(_) => panic!("wrong type"), + None => "", // TODO: check type + } + } + + fn get_bytes_generic<'a>(&self, m: &'a dyn Message) -> &'a [u8] { + match self.get_value_option(message_down_cast(m)) { + Some(ReflectValueRef::Bytes(v)) => v, + Some(_) => panic!("wrong type"), + None => b"", // TODO: check type + } + } + + fn get_u32_generic(&self, m: &dyn Message) -> u32 { + match self.get_value_option(message_down_cast(m)) { + Some(ReflectValueRef::U32(v)) => v, + Some(_) => panic!("wrong type"), + None => 0, // TODO: check type + } + } + + fn get_u64_generic(&self, m: &dyn Message) -> u64 { + match self.get_value_option(message_down_cast(m)) { + Some(ReflectValueRef::U64(v)) => v, + Some(_) => panic!("wrong type"), + None => 0, // TODO: check type + } + } + + fn get_i32_generic(&self, m: &dyn Message) -> i32 { + match self.get_value_option(message_down_cast(m)) { + Some(ReflectValueRef::I32(v)) => v, + Some(_) => panic!("wrong type"), + None => 0, // TODO: check type + } + } + + fn get_i64_generic(&self, m: &dyn Message) -> i64 { + match self.get_value_option(message_down_cast(m)) { + Some(ReflectValueRef::I64(v)) => v, + Some(_) => panic!("wrong type"), + None => 0, // TODO: check type + } + } + + fn get_bool_generic(&self, m: &dyn Message) -> bool { + match self.get_value_option(message_down_cast(m)) { + Some(ReflectValueRef::Bool(v)) => v, + Some(_) => panic!("wrong type"), + None => false, // TODO: check type + } + } + + fn get_f32_generic(&self, m: &dyn Message) -> f32 { + match self.get_value_option(message_down_cast(m)) { + Some(ReflectValueRef::F32(v)) => v, + Some(_) => panic!("wrong type"), + None => 0.0, // TODO: check type + } + } + + fn get_f64_generic(&self, m: &dyn Message) -> f64 { + match self.get_value_option(message_down_cast(m)) { + Some(ReflectValueRef::F64(v)) => v, + Some(_) => panic!("wrong type"), + None => 0.0, // TODO: check type + } + } + + fn get_reflect<'a>(&self, m: &'a dyn Message) -> ReflectFieldRef<'a> { + match self.fns { + FieldAccessorFunctions::Repeated(ref accessor2) => { + ReflectFieldRef::Repeated(accessor2.get_field(message_down_cast(m))) + } + FieldAccessorFunctions::Map(ref accessor2) => { + ReflectFieldRef::Map(accessor2.get_field(message_down_cast(m))) + } + FieldAccessorFunctions::Optional(ref accessor2) => ReflectFieldRef::Optional( + accessor2 + .get_field(message_down_cast(m)) + .to_option() + .map(|v| v.as_ref()), + ), + FieldAccessorFunctions::Simple(ref accessor2) => ReflectFieldRef::Optional({ + let v = accessor2.get_field(message_down_cast(m)); + if v.is_non_zero() { + Some(v.as_ref()) + } else { + None + } + }), + FieldAccessorFunctions::SingularHasGetSet { + ref has, + ref get_set, + } => ReflectFieldRef::Optional(if has(message_down_cast(m)) { + Some(get_set.get_ref(message_down_cast(m))) + } else { + None + }), + } + } +} + +// singular + +fn set_panic<A, B>(_: &mut A, _: B) { + panic!() +} + +// TODO: make_singular_xxx_accessor are used only for oneof fields +// oneof codegen should be changed + +pub fn make_singular_u32_accessor<M: Message + 'static>( + name: &'static str, + has: fn(&M) -> bool, + get: fn(&M) -> u32, +) -> FieldAccessor { + FieldAccessor::new_v1( + name, + FieldAccessorFunctions::SingularHasGetSet { + has, + get_set: SingularGetSet::Copy(Box::new(GetSetCopyFnsImpl { + get, + _set: set_panic, + })), + }, + ) +} + +pub fn make_singular_i32_accessor<M: Message + 'static>( + name: &'static str, + has: fn(&M) -> bool, + get: fn(&M) -> i32, +) -> FieldAccessor { + FieldAccessor::new_v1( + name, + FieldAccessorFunctions::SingularHasGetSet { + has, + get_set: SingularGetSet::Copy(Box::new(GetSetCopyFnsImpl { + get, + _set: set_panic, + })), + }, + ) +} + +pub fn make_singular_u64_accessor<M: Message + 'static>( + name: &'static str, + has: fn(&M) -> bool, + get: fn(&M) -> u64, +) -> FieldAccessor { + FieldAccessor::new_v1( + name, + FieldAccessorFunctions::SingularHasGetSet { + has, + get_set: SingularGetSet::Copy(Box::new(GetSetCopyFnsImpl { + get, + _set: set_panic, + })), + }, + ) +} + +pub fn make_singular_i64_accessor<M: Message + 'static>( + name: &'static str, + has: fn(&M) -> bool, + get: fn(&M) -> i64, +) -> FieldAccessor { + FieldAccessor::new_v1( + name, + FieldAccessorFunctions::SingularHasGetSet { + has, + get_set: SingularGetSet::Copy(Box::new(GetSetCopyFnsImpl { + get, + _set: set_panic, + })), + }, + ) +} + +pub fn make_singular_f32_accessor<M: Message + 'static>( + name: &'static str, + has: fn(&M) -> bool, + get: fn(&M) -> f32, +) -> FieldAccessor { + FieldAccessor::new_v1( + name, + FieldAccessorFunctions::SingularHasGetSet { + has, + get_set: SingularGetSet::Copy(Box::new(GetSetCopyFnsImpl { + get, + _set: set_panic, + })), + }, + ) +} + +pub fn make_singular_f64_accessor<M: Message + 'static>( + name: &'static str, + has: fn(&M) -> bool, + get: fn(&M) -> f64, +) -> FieldAccessor { + FieldAccessor::new_v1( + name, + FieldAccessorFunctions::SingularHasGetSet { + has, + get_set: SingularGetSet::Copy(Box::new(GetSetCopyFnsImpl { + get, + _set: set_panic, + })), + }, + ) +} + +pub fn make_singular_bool_accessor<M: Message + 'static>( + name: &'static str, + has: fn(&M) -> bool, + get: fn(&M) -> bool, +) -> FieldAccessor { + FieldAccessor::new_v1( + name, + FieldAccessorFunctions::SingularHasGetSet { + has, + get_set: SingularGetSet::Copy(Box::new(GetSetCopyFnsImpl { + get, + _set: set_panic, + })), + }, + ) +} + +pub fn make_singular_enum_accessor<M: Message + 'static, E: ProtobufEnum + 'static>( + name: &'static str, + has: fn(&M) -> bool, + get: fn(&M) -> E, +) -> FieldAccessor { + FieldAccessor::new_v1( + name, + FieldAccessorFunctions::SingularHasGetSet { + has, + get_set: SingularGetSet::Enum(Box::new(GetSingularEnumImpl { get })), + }, + ) +} + +pub fn make_singular_string_accessor<M: Message + 'static>( + name: &'static str, + has: fn(&M) -> bool, + get: for<'a> fn(&'a M) -> &'a str, +) -> FieldAccessor { + FieldAccessor::new_v1( + name, + FieldAccessorFunctions::SingularHasGetSet { + has, + get_set: SingularGetSet::String(get, set_panic), + }, + ) +} + +pub fn make_singular_bytes_accessor<M: Message + 'static>( + name: &'static str, + has: fn(&M) -> bool, + get: for<'a> fn(&'a M) -> &'a [u8], +) -> FieldAccessor { + FieldAccessor::new_v1( + name, + FieldAccessorFunctions::SingularHasGetSet { + has, + get_set: SingularGetSet::Bytes(get, set_panic), + }, + ) +} + +pub fn make_singular_message_accessor<M: Message + 'static, F: Message + 'static>( + name: &'static str, + has: fn(&M) -> bool, + get: for<'a> fn(&'a M) -> &'a F, +) -> FieldAccessor { + FieldAccessor::new_v1( + name, + FieldAccessorFunctions::SingularHasGetSet { + has, + get_set: SingularGetSet::Message(Box::new(GetSingularMessageImpl { get })), + }, + ) +} + +// repeated + +impl<M, V> FieldAccessor2<M, dyn ReflectRepeated> for MessageGetMut<M, Vec<V>> +where + M: Message + 'static, + V: ProtobufValue + 'static, +{ + fn get_field<'a>(&self, m: &'a M) -> &'a dyn ReflectRepeated { + (self.get_field)(m) as &dyn ReflectRepeated + } + + fn mut_field<'a>(&self, m: &'a mut M) -> &'a mut dyn ReflectRepeated { + (self.mut_field)(m) as &mut dyn ReflectRepeated + } +} + +pub fn make_vec_accessor<M, V>( + name: &'static str, + get_vec: for<'a> fn(&'a M) -> &'a Vec<V::Value>, + mut_vec: for<'a> fn(&'a mut M) -> &'a mut Vec<V::Value>, +) -> FieldAccessor +where + M: Message + 'static, + V: ProtobufType + 'static, +{ + FieldAccessor::new_v1( + name, + FieldAccessorFunctions::Repeated(Box::new(MessageGetMut::<M, Vec<V::Value>> { + get_field: get_vec, + mut_field: mut_vec, + })), + ) +} + +impl<M, V> FieldAccessor2<M, dyn ReflectRepeated> for MessageGetMut<M, RepeatedField<V>> +where + M: Message + 'static, + V: ProtobufValue + 'static, +{ + fn get_field<'a>(&self, m: &'a M) -> &'a dyn ReflectRepeated { + (self.get_field)(m) as &dyn ReflectRepeated + } + + fn mut_field<'a>(&self, m: &'a mut M) -> &'a mut dyn ReflectRepeated { + (self.mut_field)(m) as &mut dyn ReflectRepeated + } +} + +pub fn make_repeated_field_accessor<M, V>( + name: &'static str, + get_vec: for<'a> fn(&'a M) -> &'a RepeatedField<V::Value>, + mut_vec: for<'a> fn(&'a mut M) -> &'a mut RepeatedField<V::Value>, +) -> FieldAccessor +where + M: Message + 'static, + V: ProtobufType + 'static, +{ + FieldAccessor::new_v1( + name, + FieldAccessorFunctions::Repeated(Box::new(MessageGetMut::<M, RepeatedField<V::Value>> { + get_field: get_vec, + mut_field: mut_vec, + })), + ) +} + +impl<M, V> FieldAccessor2<M, dyn ReflectOptional> for MessageGetMut<M, Option<V>> +where + M: Message + 'static, + V: ProtobufValue + Clone + 'static, +{ + fn get_field<'a>(&self, m: &'a M) -> &'a dyn ReflectOptional { + (self.get_field)(m) as &dyn ReflectOptional + } + + fn mut_field<'a>(&self, m: &'a mut M) -> &'a mut dyn ReflectOptional { + (self.mut_field)(m) as &mut dyn ReflectOptional + } +} + +pub fn make_option_accessor<M, V>( + name: &'static str, + get_field: for<'a> fn(&'a M) -> &'a Option<V::Value>, + mut_field: for<'a> fn(&'a mut M) -> &'a mut Option<V::Value>, +) -> FieldAccessor +where + M: Message + 'static, + V: ProtobufType + 'static, +{ + FieldAccessor::new_v1( + name, + FieldAccessorFunctions::Optional(Box::new(MessageGetMut::<M, Option<V::Value>> { + get_field, + mut_field, + })), + ) +} + +impl<M, V> FieldAccessor2<M, dyn ReflectOptional> for MessageGetMut<M, SingularField<V>> +where + M: Message + 'static, + V: ProtobufValue + Clone + 'static, +{ + fn get_field<'a>(&self, m: &'a M) -> &'a dyn ReflectOptional { + (self.get_field)(m) as &dyn ReflectOptional + } + + fn mut_field<'a>(&self, m: &'a mut M) -> &'a mut dyn ReflectOptional { + (self.mut_field)(m) as &mut dyn ReflectOptional + } +} + +pub fn make_singular_field_accessor<M, V>( + name: &'static str, + get_field: for<'a> fn(&'a M) -> &'a SingularField<V::Value>, + mut_field: for<'a> fn(&'a mut M) -> &'a mut SingularField<V::Value>, +) -> FieldAccessor +where + M: Message + 'static, + V: ProtobufType + 'static, +{ + FieldAccessor::new_v1( + name, + FieldAccessorFunctions::Optional(Box::new(MessageGetMut::<M, SingularField<V::Value>> { + get_field, + mut_field, + })), + ) +} + +impl<M, V> FieldAccessor2<M, dyn ReflectOptional> for MessageGetMut<M, SingularPtrField<V>> +where + M: Message + 'static, + V: ProtobufValue + Clone + 'static, +{ + fn get_field<'a>(&self, m: &'a M) -> &'a dyn ReflectOptional { + (self.get_field)(m) as &dyn ReflectOptional + } + + fn mut_field<'a>(&self, m: &'a mut M) -> &'a mut dyn ReflectOptional { + (self.mut_field)(m) as &mut dyn ReflectOptional + } +} + +pub fn make_singular_ptr_field_accessor<M, V>( + name: &'static str, + get_field: for<'a> fn(&'a M) -> &'a SingularPtrField<V::Value>, + mut_field: for<'a> fn(&'a mut M) -> &'a mut SingularPtrField<V::Value>, +) -> FieldAccessor +where + M: Message + 'static, + V: ProtobufType + 'static, +{ + FieldAccessor::new_v1( + name, + FieldAccessorFunctions::Optional(Box::new( + MessageGetMut::<M, SingularPtrField<V::Value>> { + get_field, + mut_field, + }, + )), + ) +} + +impl<M, V> FieldAccessor2<M, dyn ProtobufValue> for MessageGetMut<M, V> +where + M: Message + 'static, + V: ProtobufValue + Clone + 'static, +{ + fn get_field<'a>(&self, m: &'a M) -> &'a dyn ProtobufValue { + (self.get_field)(m) as &dyn ProtobufValue + } + + fn mut_field<'a>(&self, m: &'a mut M) -> &'a mut dyn ProtobufValue { + (self.mut_field)(m) as &mut dyn ProtobufValue + } +} + +pub fn make_simple_field_accessor<M, V>( + name: &'static str, + get_field: for<'a> fn(&'a M) -> &'a V::Value, + mut_field: for<'a> fn(&'a mut M) -> &'a mut V::Value, +) -> FieldAccessor +where + M: Message + 'static, + V: ProtobufType + 'static, +{ + FieldAccessor::new_v1( + name, + FieldAccessorFunctions::Simple(Box::new(MessageGetMut::<M, V::Value> { + get_field, + mut_field, + })), + ) +} + +impl<M, K, V> FieldAccessor2<M, dyn ReflectMap> for MessageGetMut<M, HashMap<K, V>> +where + M: Message + 'static, + K: ProtobufValue + 'static, + V: ProtobufValue + 'static, + K: Hash + Eq, +{ + fn get_field<'a>(&self, m: &'a M) -> &'a dyn ReflectMap { + (self.get_field)(m) as &dyn ReflectMap + } + + fn mut_field<'a>(&self, m: &'a mut M) -> &'a mut dyn ReflectMap { + (self.mut_field)(m) as &mut dyn ReflectMap + } +} + +pub fn make_map_accessor<M, K, V>( + name: &'static str, + get_field: for<'a> fn(&'a M) -> &'a HashMap<K::Value, V::Value>, + mut_field: for<'a> fn(&'a mut M) -> &'a mut HashMap<K::Value, V::Value>, +) -> FieldAccessor +where + M: Message + 'static, + K: ProtobufType + 'static, + V: ProtobufType + 'static, + <K as ProtobufType>::Value: Hash + Eq, +{ + FieldAccessor::new_v1( + name, + FieldAccessorFunctions::Map(Box::new(MessageGetMut::<M, HashMap<K::Value, V::Value>> { + get_field, + mut_field, + })), + ) +} diff --git a/2.27.1/src/reflect/accessor/mod.rs b/2.27.1/src/reflect/accessor/mod.rs new file mode 100644 index 0000000..9fa97de --- /dev/null +++ b/2.27.1/src/reflect/accessor/mod.rs @@ -0,0 +1,21 @@ +#![doc(hidden)] + +pub use crate::reflect::acc::v1::make_map_accessor; +pub use crate::reflect::acc::v1::make_option_accessor; +pub use crate::reflect::acc::v1::make_repeated_field_accessor; +pub use crate::reflect::acc::v1::make_simple_field_accessor; +pub use crate::reflect::acc::v1::make_singular_bool_accessor; +pub use crate::reflect::acc::v1::make_singular_bytes_accessor; +pub use crate::reflect::acc::v1::make_singular_enum_accessor; +pub use crate::reflect::acc::v1::make_singular_f32_accessor; +pub use crate::reflect::acc::v1::make_singular_f64_accessor; +pub use crate::reflect::acc::v1::make_singular_field_accessor; +pub use crate::reflect::acc::v1::make_singular_i32_accessor; +pub use crate::reflect::acc::v1::make_singular_i64_accessor; +pub use crate::reflect::acc::v1::make_singular_message_accessor; +pub use crate::reflect::acc::v1::make_singular_ptr_field_accessor; +pub use crate::reflect::acc::v1::make_singular_string_accessor; +pub use crate::reflect::acc::v1::make_singular_u32_accessor; +pub use crate::reflect::acc::v1::make_singular_u64_accessor; +pub use crate::reflect::acc::v1::make_vec_accessor; +pub use crate::reflect::acc::v1::FieldAccessorTrait; diff --git a/2.27.1/src/reflect/enums.rs b/2.27.1/src/reflect/enums.rs new file mode 100644 index 0000000..a25be6f --- /dev/null +++ b/2.27.1/src/reflect/enums.rs @@ -0,0 +1,128 @@ +use std::collections::HashMap; + +use crate::descriptor::EnumDescriptorProto; +use crate::descriptor::EnumValueDescriptorProto; +use crate::descriptor::FileDescriptorProto; +use crate::descriptorx::find_enum_by_rust_name; +use crate::reflect::find_message_or_enum::find_message_or_enum; +use crate::reflect::find_message_or_enum::MessageOrEnum; +use crate::ProtobufEnum; + +/// Description for enum variant. +/// +/// Used in reflection. +#[derive(Clone, Debug)] +pub struct EnumValueDescriptor { + proto: &'static EnumValueDescriptorProto, +} + +impl Copy for EnumValueDescriptor {} + +impl EnumValueDescriptor { + /// Name of enum variant as specified in proto file + pub fn name(&self) -> &'static str { + self.proto.get_name() + } + + /// `i32` value of the enum variant + pub fn value(&self) -> i32 { + self.proto.get_number() + } +} + +/// Dynamic representation of enum type. +/// +/// Can be used in reflective operations. +pub struct EnumDescriptor { + proto: &'static EnumDescriptorProto, + values: Vec<EnumValueDescriptor>, + + index_by_name: HashMap<String, usize>, + index_by_number: HashMap<i32, usize>, +} + +impl EnumDescriptor { + /// Enum name as given in `.proto` file + pub fn name(&self) -> &'static str { + self.proto.get_name() + } + + /// `EnumDescriptor` for enum type + pub fn for_type<E: ProtobufEnum>() -> &'static EnumDescriptor { + E::enum_descriptor_static() + } + + /// Create new enum descriptor. + /// + /// This function is called by generated code, and should not be called manually. + #[deprecated( + since = "2.12", + note = "Please regenerate .rs files from .proto files to use newer APIs" + )] + pub fn new(rust_name: &'static str, file: &'static FileDescriptorProto) -> EnumDescriptor { + let proto = find_enum_by_rust_name(file, rust_name); + let mut index_by_name = HashMap::new(); + let mut index_by_number = HashMap::new(); + for (i, v) in proto.en.get_value().iter().enumerate() { + index_by_number.insert(v.get_number(), i); + index_by_name.insert(v.get_name().to_string(), i); + } + EnumDescriptor { + proto: proto.en, + values: proto + .en + .get_value() + .iter() + .map(|v| EnumValueDescriptor { proto: v }) + .collect(), + index_by_name: index_by_name, + index_by_number: index_by_number, + } + } + + /// Create new enum descriptor. + /// + /// This function is called by generated code, and should not be called manually. + pub fn new_pb_name<E>( + name_in_file: &'static str, + file: &'static FileDescriptorProto, + ) -> EnumDescriptor + where + E: ProtobufEnum, + { + let (_path_to_package, proto) = match find_message_or_enum(file, name_in_file) { + (path_to_package, MessageOrEnum::Enum(e)) => (path_to_package, e), + (_, MessageOrEnum::Message(_)) => panic!("not an enum"), + }; + + let mut index_by_name = HashMap::new(); + let mut index_by_number = HashMap::new(); + for (i, v) in proto.get_value().iter().enumerate() { + index_by_number.insert(v.get_number(), i); + index_by_name.insert(v.get_name().to_string(), i); + } + EnumDescriptor { + proto, + values: proto + .get_value() + .iter() + .map(|v| EnumValueDescriptor { proto: v }) + .collect(), + index_by_name: index_by_name, + index_by_number: index_by_number, + } + } + + /// Find enum value by name + pub fn value_by_name<'a>(&'a self, name: &str) -> &'a EnumValueDescriptor { + // TODO: clone is weird + let &index = self.index_by_name.get(&name.to_string()).unwrap(); + &self.values[index] + } + + /// Find enum value by number + pub fn value_by_number<'a>(&'a self, number: i32) -> &'a EnumValueDescriptor { + let &index = self.index_by_number.get(&number).unwrap(); + &self.values[index] + } +} diff --git a/2.27.1/src/reflect/field.rs b/2.27.1/src/reflect/field.rs new file mode 100644 index 0000000..09ee222 --- /dev/null +++ b/2.27.1/src/reflect/field.rs @@ -0,0 +1,245 @@ +use crate::descriptor::FieldDescriptorProto; +use crate::descriptor::FieldDescriptorProto_Label; +use crate::json::json_name; +use crate::message::Message; +use crate::reflect::acc::Accessor; +use crate::reflect::acc::FieldAccessor; +use crate::reflect::map::ReflectMap; +use crate::reflect::repeated::ReflectRepeated; +use crate::reflect::EnumValueDescriptor; +use crate::reflect::ReflectValueRef; + +/// Reference to a value stored in a field, optional, repeated or map. +// TODO: implement Eq +pub enum ReflectFieldRef<'a> { + /// Singular field, optional or required in proto3 and just plain field in proto3 + Optional(Option<ReflectValueRef<'a>>), + /// Repeated field + Repeated(&'a dyn ReflectRepeated), + /// Map field + Map(&'a dyn ReflectMap), +} + +/// Field descriptor. +/// +/// Can be used for runtime reflection. +pub struct FieldDescriptor { + proto: &'static FieldDescriptorProto, + accessor: FieldAccessor, + json_name: String, +} + +impl FieldDescriptor { + pub(crate) fn new( + accessor: FieldAccessor, + proto: &'static FieldDescriptorProto, + ) -> FieldDescriptor { + assert_eq!(proto.get_name(), accessor.name); + let json_name = if !proto.get_json_name().is_empty() { + proto.get_json_name().to_string() + } else { + json_name(proto.get_name()) + }; + FieldDescriptor { + proto, + accessor, + // probably could be lazy-init + json_name, + } + } + + /// Get `.proto` description of field + pub fn proto(&self) -> &'static FieldDescriptorProto { + self.proto + } + + /// Field name as specified in `.proto` file + pub fn name(&self) -> &'static str { + self.proto.get_name() + } + + /// JSON field name. + /// + /// Can be different from `.proto` field name. + /// + /// See [JSON mapping][json] for details. + /// + /// [json]: https://developers.google.com/protocol-buffers/docs/proto3#json + pub fn json_name(&self) -> &str { + &self.json_name + } + + /// If this field repeated? + pub fn is_repeated(&self) -> bool { + self.proto.get_label() == FieldDescriptorProto_Label::LABEL_REPEATED + } + + /// Check if field is set in given message. + /// + /// For repeated field or map field return `true` if + /// collection is not empty. + /// + /// # Panics + /// + /// If this field belongs to a different message type. + pub fn has_field(&self, m: &dyn Message) -> bool { + match &self.accessor.accessor { + Accessor::V1(a) => a.has_field_generic(m), + } + } + + /// Return length of repeated field. + /// + /// For singular field return `1` if field is set and `0` otherwise. + /// + /// # Panics + /// + /// If this field belongs to a different message type. + pub fn len_field(&self, m: &dyn Message) -> usize { + match &self.accessor.accessor { + Accessor::V1(a) => a.len_field_generic(m), + } + } + + /// Get message field or default instance if field is unset. + /// + /// # Panics + /// If this field belongs to a different message type or + /// field type is not message. + pub fn get_message<'a>(&self, m: &'a dyn Message) -> &'a dyn Message { + match &self.accessor.accessor { + Accessor::V1(a) => a.get_message_generic(m), + } + } + + /// Get `enum` field. + /// + /// # Panics + /// + /// If this field belongs to a different message type + /// or field type is not singular `enum`. + pub fn get_enum(&self, m: &dyn Message) -> &'static EnumValueDescriptor { + match &self.accessor.accessor { + Accessor::V1(a) => a.get_enum_generic(m), + } + } + + /// Get `string` field. + /// + /// # Panics + /// + /// If this field belongs to a different message type + /// or field type is not singular `string`. + pub fn get_str<'a>(&self, m: &'a dyn Message) -> &'a str { + match &self.accessor.accessor { + Accessor::V1(a) => a.get_str_generic(m), + } + } + + /// Get `bytes` field. + /// + /// # Panics + /// + /// If this field belongs to a different message type + /// or field type is not singular `bytes`. + pub fn get_bytes<'a>(&self, m: &'a dyn Message) -> &'a [u8] { + match &self.accessor.accessor { + Accessor::V1(a) => a.get_bytes_generic(m), + } + } + + /// Get `u32` field. + /// + /// # Panics + /// + /// If this field belongs to a different message type + /// or field type is not singular `u32`. + pub fn get_u32(&self, m: &dyn Message) -> u32 { + match &self.accessor.accessor { + Accessor::V1(a) => a.get_u32_generic(m), + } + } + + /// Get `u64` field. + /// + /// # Panics + /// + /// If this field belongs to a different message type + /// or field type is not singular `u64`. + pub fn get_u64(&self, m: &dyn Message) -> u64 { + match &self.accessor.accessor { + Accessor::V1(a) => a.get_u64_generic(m), + } + } + + /// Get `i32` field. + /// + /// # Panics + /// + /// If this field belongs to a different message type + /// or field type is not singular `i32`. + pub fn get_i32(&self, m: &dyn Message) -> i32 { + match &self.accessor.accessor { + Accessor::V1(a) => a.get_i32_generic(m), + } + } + + /// Get `i64` field. + /// + /// # Panics + /// + /// If this field belongs to a different message type + /// or field type is not singular `i64`. + pub fn get_i64(&self, m: &dyn Message) -> i64 { + match &self.accessor.accessor { + Accessor::V1(a) => a.get_i64_generic(m), + } + } + + /// Get `bool` field. + /// + /// # Panics + /// + /// If this field belongs to a different message type or + /// field type is not singular `bool`. + pub fn get_bool(&self, m: &dyn Message) -> bool { + match &self.accessor.accessor { + Accessor::V1(a) => a.get_bool_generic(m), + } + } + + /// Get `float` field. + /// + /// # Panics + /// + /// If this field belongs to a different message type or + /// field type is not singular `float`. + pub fn get_f32(&self, m: &dyn Message) -> f32 { + match &self.accessor.accessor { + Accessor::V1(a) => a.get_f32_generic(m), + } + } + + /// Get `double` field. + /// + /// # Panics + /// + /// If this field belongs to a different message type + /// or field type is not singular `double`. + pub fn get_f64(&self, m: &dyn Message) -> f64 { + match &self.accessor.accessor { + Accessor::V1(a) => a.get_f64_generic(m), + } + } + + /// Get field of any type. + /// + /// # Panics + /// + /// If this field belongs to a different message type. + pub fn get_reflect<'a>(&self, m: &'a dyn Message) -> ReflectFieldRef<'a> { + match &self.accessor.accessor { + Accessor::V1(a) => a.get_reflect(m), + } + } +} diff --git a/2.27.1/src/reflect/find_message_or_enum.rs b/2.27.1/src/reflect/find_message_or_enum.rs new file mode 100644 index 0000000..7ee3915 --- /dev/null +++ b/2.27.1/src/reflect/find_message_or_enum.rs @@ -0,0 +1,62 @@ +use crate::descriptor::DescriptorProto; +use crate::descriptor::EnumDescriptorProto; +use crate::descriptor::FileDescriptorProto; + +pub(crate) enum MessageOrEnum<'a> { + Message(&'a DescriptorProto), + Enum(&'a EnumDescriptorProto), +} + +impl<'a> MessageOrEnum<'a> { + fn from_two_options( + m: Option<&'a DescriptorProto>, + e: Option<&'a EnumDescriptorProto>, + ) -> MessageOrEnum<'a> { + match (m, e) { + (Some(_), Some(_)) => panic!("enum and message with the same name"), + (Some(m), None) => MessageOrEnum::Message(m), + (None, Some(e)) => MessageOrEnum::Enum(e), + (None, None) => panic!("not found"), + } + } +} + +pub(crate) fn find_message_or_enum<'a>( + file: &'a FileDescriptorProto, + name_to_package: &str, +) -> (String, MessageOrEnum<'a>) { + let mut path = name_to_package.split('.'); + let first = path.next().unwrap(); + let child_message = file + .get_message_type() + .iter() + .find(|m| m.get_name() == first); + let child_enum = file.get_enum_type().iter().find(|e| e.get_name() == first); + + let mut package_to_name = String::new(); + let mut me = MessageOrEnum::from_two_options(child_message, child_enum); + + for name in path { + let message = match me { + MessageOrEnum::Message(m) => m, + MessageOrEnum::Enum(_) => panic!("enum has no children"), + }; + + if !package_to_name.is_empty() { + package_to_name.push_str("."); + } + package_to_name.push_str(message.get_name()); + + let child_message = message + .get_nested_type() + .iter() + .find(|m| m.get_name() == name); + let child_enum = message + .get_enum_type() + .iter() + .find(|e| e.get_name() == name); + me = MessageOrEnum::from_two_options(child_message, child_enum) + } + + (package_to_name, me) +} diff --git a/2.27.1/src/reflect/map.rs b/2.27.1/src/reflect/map.rs new file mode 100644 index 0000000..c6aff60 --- /dev/null +++ b/2.27.1/src/reflect/map.rs @@ -0,0 +1,66 @@ +use std::collections::hash_map; +use std::collections::HashMap; +use std::hash::Hash; + +use super::value::ProtobufValue; + +/// Implemented for `HashMap` with appropriate keys and values +pub trait ReflectMap: 'static { + fn reflect_iter(&self) -> ReflectMapIter; + + fn len(&self) -> usize; +} + +impl<K: ProtobufValue + Eq + Hash + 'static, V: ProtobufValue + 'static> ReflectMap + for HashMap<K, V> +{ + fn reflect_iter<'a>(&'a self) -> ReflectMapIter<'a> { + ReflectMapIter { + imp: Box::new(ReflectMapIterImpl::<'a, K, V> { iter: self.iter() }), + } + } + + fn len(&self) -> usize { + HashMap::len(self) + } +} + +trait ReflectMapIterTrait<'a> { + fn next(&mut self) -> Option<(&'a dyn ProtobufValue, &'a dyn ProtobufValue)>; +} + +struct ReflectMapIterImpl<'a, K: Eq + Hash + 'static, V: 'static> { + iter: hash_map::Iter<'a, K, V>, +} + +impl<'a, K: ProtobufValue + Eq + Hash + 'static, V: ProtobufValue + 'static> ReflectMapIterTrait<'a> + for ReflectMapIterImpl<'a, K, V> +{ + fn next(&mut self) -> Option<(&'a dyn ProtobufValue, &'a dyn ProtobufValue)> { + match self.iter.next() { + Some((k, v)) => Some((k as &dyn ProtobufValue, v as &dyn ProtobufValue)), + None => None, + } + } +} + +pub struct ReflectMapIter<'a> { + imp: Box<dyn ReflectMapIterTrait<'a> + 'a>, +} + +impl<'a> Iterator for ReflectMapIter<'a> { + type Item = (&'a dyn ProtobufValue, &'a dyn ProtobufValue); + + fn next(&mut self) -> Option<(&'a dyn ProtobufValue, &'a dyn ProtobufValue)> { + self.imp.next() + } +} + +impl<'a> IntoIterator for &'a dyn ReflectMap { + type IntoIter = ReflectMapIter<'a>; + type Item = (&'a dyn ProtobufValue, &'a dyn ProtobufValue); + + fn into_iter(self) -> Self::IntoIter { + self.reflect_iter() + } +} diff --git a/2.27.1/src/reflect/message.rs b/2.27.1/src/reflect/message.rs new file mode 100644 index 0000000..0db9821 --- /dev/null +++ b/2.27.1/src/reflect/message.rs @@ -0,0 +1,282 @@ +use std::collections::HashMap; +use std::marker; + +use crate::descriptor::DescriptorProto; +use crate::descriptor::FileDescriptorProto; +use crate::descriptorx::find_message_by_rust_name; +use crate::reflect::acc::FieldAccessor; +use crate::reflect::find_message_or_enum::find_message_or_enum; +use crate::reflect::find_message_or_enum::MessageOrEnum; +use crate::reflect::FieldDescriptor; +use crate::Message; + +trait MessageFactory: Send + Sync + 'static { + fn new_instance(&self) -> Box<dyn Message>; +} + +struct MessageFactoryImpl<M>(marker::PhantomData<M>); + +impl<M> MessageFactory for MessageFactoryImpl<M> +where + M: 'static + Message + Default + Clone + PartialEq, +{ + fn new_instance(&self) -> Box<dyn Message> { + let m: M = Default::default(); + Box::new(m) + } +} + +/// Dynamic message type +pub struct MessageDescriptor { + full_name: String, + proto: &'static DescriptorProto, + factory: &'static dyn MessageFactory, + fields: Vec<FieldDescriptor>, + + index_by_name: HashMap<String, usize>, + index_by_name_or_json_name: HashMap<String, usize>, + index_by_number: HashMap<u32, usize>, +} + +impl MessageDescriptor { + /// Get underlying `DescriptorProto` object. + pub fn get_proto(&self) -> &DescriptorProto { + self.proto + } + + /// Get a message descriptor for given message type + pub fn for_type<M: Message>() -> &'static MessageDescriptor { + M::descriptor_static() + } + + fn compute_full_name(package: &str, path_to_package: &str, proto: &DescriptorProto) -> String { + let mut full_name = package.to_owned(); + if path_to_package.len() != 0 { + if full_name.len() != 0 { + full_name.push('.'); + } + full_name.push_str(path_to_package); + } + if full_name.len() != 0 { + full_name.push('.'); + } + full_name.push_str(proto.get_name()); + full_name + } + + // Non-generic part of `new` is a separate function + // to reduce code bloat from multiple instantiations. + fn new_non_generic_by_rust_name( + rust_name: &'static str, + fields: Vec<FieldAccessor>, + file: &'static FileDescriptorProto, + factory: &'static dyn MessageFactory, + ) -> MessageDescriptor { + let proto = find_message_by_rust_name(file, rust_name); + + let mut field_proto_by_name = HashMap::new(); + for field_proto in proto.message.get_field() { + field_proto_by_name.insert(field_proto.get_name(), field_proto); + } + + let mut index_by_name = HashMap::new(); + let mut index_by_name_or_json_name = HashMap::new(); + let mut index_by_number = HashMap::new(); + + let mut full_name = file.get_package().to_string(); + if full_name.len() > 0 { + full_name.push('.'); + } + full_name.push_str(proto.message.get_name()); + + let fields: Vec<_> = fields + .into_iter() + .map(|f| { + let proto = *field_proto_by_name.get(&f.name).unwrap(); + FieldDescriptor::new(f, proto) + }) + .collect(); + for (i, f) in fields.iter().enumerate() { + assert!(index_by_number + .insert(f.proto().get_number() as u32, i) + .is_none()); + assert!(index_by_name + .insert(f.proto().get_name().to_owned(), i) + .is_none()); + assert!(index_by_name_or_json_name + .insert(f.proto().get_name().to_owned(), i) + .is_none()); + + let json_name = f.json_name().to_owned(); + + if json_name != f.proto().get_name() { + assert!(index_by_name_or_json_name.insert(json_name, i).is_none()); + } + } + MessageDescriptor { + full_name, + proto: proto.message, + factory, + fields, + index_by_name, + index_by_name_or_json_name, + index_by_number, + } + } + + // Non-generic part of `new` is a separate function + // to reduce code bloat from multiple instantiations. + fn new_non_generic_by_pb_name( + protobuf_name_to_package: &'static str, + fields: Vec<FieldAccessor>, + file_descriptor_proto: &'static FileDescriptorProto, + factory: &'static dyn MessageFactory, + ) -> MessageDescriptor { + let (path_to_package, proto) = + match find_message_or_enum(file_descriptor_proto, protobuf_name_to_package) { + (path_to_package, MessageOrEnum::Message(m)) => (path_to_package, m), + (_, MessageOrEnum::Enum(_)) => panic!("not a message"), + }; + + let mut field_proto_by_name = HashMap::new(); + for field_proto in proto.get_field() { + field_proto_by_name.insert(field_proto.get_name(), field_proto); + } + + let mut index_by_name = HashMap::new(); + let mut index_by_name_or_json_name = HashMap::new(); + let mut index_by_number = HashMap::new(); + + let full_name = MessageDescriptor::compute_full_name( + file_descriptor_proto.get_package(), + &path_to_package, + &proto, + ); + let fields: Vec<_> = fields + .into_iter() + .map(|f| { + let proto = *field_proto_by_name.get(&f.name).unwrap(); + FieldDescriptor::new(f, proto) + }) + .collect(); + + for (i, f) in fields.iter().enumerate() { + assert!(index_by_number + .insert(f.proto().get_number() as u32, i) + .is_none()); + assert!(index_by_name + .insert(f.proto().get_name().to_owned(), i) + .is_none()); + assert!(index_by_name_or_json_name + .insert(f.proto().get_name().to_owned(), i) + .is_none()); + + let json_name = f.json_name().to_owned(); + + if json_name != f.proto().get_name() { + assert!(index_by_name_or_json_name.insert(json_name, i).is_none()); + } + } + MessageDescriptor { + full_name, + proto, + factory, + fields, + index_by_name, + index_by_name_or_json_name, + index_by_number, + } + } + + /// Construct a new message descriptor. + /// + /// This operation is called from generated code and rarely + /// need to be called directly. + #[doc(hidden)] + #[deprecated( + since = "2.12", + note = "Please regenerate .rs files from .proto files to use newer APIs" + )] + pub fn new<M: 'static + Message + Default + Clone + PartialEq>( + rust_name: &'static str, + fields: Vec<FieldAccessor>, + file: &'static FileDescriptorProto, + ) -> MessageDescriptor { + let factory = &MessageFactoryImpl(marker::PhantomData::<M>); + MessageDescriptor::new_non_generic_by_rust_name(rust_name, fields, file, factory) + } + + /// Construct a new message descriptor. + /// + /// This operation is called from generated code and rarely + /// need to be called directly. + #[doc(hidden)] + pub fn new_pb_name<M: 'static + Message + Default + Clone + PartialEq>( + protobuf_name_to_package: &'static str, + fields: Vec<FieldAccessor>, + file_descriptor_proto: &'static FileDescriptorProto, + ) -> MessageDescriptor { + let factory = &MessageFactoryImpl(marker::PhantomData::<M>); + MessageDescriptor::new_non_generic_by_pb_name( + protobuf_name_to_package, + fields, + file_descriptor_proto, + factory, + ) + } + + /// New empty message + pub fn new_instance(&self) -> Box<dyn Message> { + self.factory.new_instance() + } + + /// Message name as given in `.proto` file + pub fn name(&self) -> &'static str { + self.proto.get_name() + } + + /// Fully qualified protobuf message name + pub fn full_name(&self) -> &str { + &self.full_name[..] + } + + /// Message field descriptors. + pub fn fields(&self) -> &[FieldDescriptor] { + &self.fields + } + + /// Find message field by protobuf field name + /// + /// Note: protobuf field name might be different for Rust field name. + pub fn get_field_by_name<'a>(&'a self, name: &str) -> Option<&'a FieldDescriptor> { + let &index = self.index_by_name.get(name)?; + Some(&self.fields[index]) + } + + /// Find message field by field name or field JSON name + pub fn get_field_by_name_or_json_name<'a>(&'a self, name: &str) -> Option<&'a FieldDescriptor> { + let &index = self.index_by_name_or_json_name.get(name)?; + Some(&self.fields[index]) + } + + /// Find message field by field name + pub fn get_field_by_number(&self, number: u32) -> Option<&FieldDescriptor> { + let &index = self.index_by_number.get(&number)?; + Some(&self.fields[index]) + } + + /// Find field by name + // TODO: deprecate + pub fn field_by_name<'a>(&'a self, name: &str) -> &'a FieldDescriptor { + // TODO: clone is weird + let &index = self.index_by_name.get(&name.to_string()).unwrap(); + &self.fields[index] + } + + /// Find field by number + // TODO: deprecate + pub fn field_by_number<'a>(&'a self, number: u32) -> &'a FieldDescriptor { + let &index = self.index_by_number.get(&number).unwrap(); + &self.fields[index] + } +} diff --git a/2.27.1/src/reflect/mod.rs b/2.27.1/src/reflect/mod.rs new file mode 100644 index 0000000..e120e16 --- /dev/null +++ b/2.27.1/src/reflect/mod.rs @@ -0,0 +1,28 @@ +//! Reflection implementation for protobuf types. + +use crate::message::Message; + +mod acc; +pub mod accessor; +mod enums; +mod field; +mod find_message_or_enum; +mod map; +mod message; +mod optional; +mod repeated; +mod value; + +pub use self::value::ProtobufValue; +pub use self::value::ReflectValueRef; +#[doc(hidden)] +#[deprecated(since = "2.11", note = "Use ReflectValueRef instead")] +pub use self::value::ReflectValueRef as ProtobufValueRef; + +pub mod rt; + +pub use self::enums::EnumDescriptor; +pub use self::enums::EnumValueDescriptor; +pub use self::field::FieldDescriptor; +pub use self::field::ReflectFieldRef; +pub use self::message::MessageDescriptor; diff --git a/2.27.1/src/reflect/optional.rs b/2.27.1/src/reflect/optional.rs new file mode 100644 index 0000000..f719a2c --- /dev/null +++ b/2.27.1/src/reflect/optional.rs @@ -0,0 +1,49 @@ +use std::mem; + +use super::value::ProtobufValue; +use crate::singular::*; + +pub trait ReflectOptional: 'static { + fn to_option(&self) -> Option<&dyn ProtobufValue>; + + fn set_value(&mut self, value: &dyn ProtobufValue); +} + +impl<V: ProtobufValue + Clone + 'static> ReflectOptional for Option<V> { + fn to_option(&self) -> Option<&dyn ProtobufValue> { + self.as_ref().map(|v| v as &dyn ProtobufValue) + } + + fn set_value(&mut self, value: &dyn ProtobufValue) { + match value.as_any().downcast_ref::<V>() { + Some(v) => mem::replace(self, Some(v.clone())), + None => panic!(), + }; + } +} + +impl<V: ProtobufValue + Clone + 'static> ReflectOptional for SingularField<V> { + fn to_option(&self) -> Option<&dyn ProtobufValue> { + self.as_ref().map(|v| v as &dyn ProtobufValue) + } + + fn set_value(&mut self, value: &dyn ProtobufValue) { + match value.as_any().downcast_ref::<V>() { + Some(v) => mem::replace(self, SingularField::some(v.clone())), + None => panic!(), + }; + } +} + +impl<V: ProtobufValue + Clone + 'static> ReflectOptional for SingularPtrField<V> { + fn to_option(&self) -> Option<&dyn ProtobufValue> { + self.as_ref().map(|v| v as &dyn ProtobufValue) + } + + fn set_value(&mut self, value: &dyn ProtobufValue) { + match value.as_any().downcast_ref::<V>() { + Some(v) => mem::replace(self, SingularPtrField::some(v.clone())), + None => panic!(), + }; + } +} diff --git a/2.27.1/src/reflect/repeated.rs b/2.27.1/src/reflect/repeated.rs new file mode 100644 index 0000000..710de3e --- /dev/null +++ b/2.27.1/src/reflect/repeated.rs @@ -0,0 +1,191 @@ +use std::slice; + +use super::value::ProtobufValue; +use super::value::ReflectValueRef; +use crate::repeated::RepeatedField; + +pub trait ReflectRepeated: 'static { + fn reflect_iter(&self) -> ReflectRepeatedIter; + fn len(&self) -> usize; + fn get(&self, index: usize) -> &dyn ProtobufValue; +} + +impl<V: ProtobufValue + 'static> ReflectRepeated for Vec<V> { + fn reflect_iter<'a>(&'a self) -> ReflectRepeatedIter<'a> { + ReflectRepeatedIter { + imp: Box::new(ReflectRepeatedIterImplSlice::<'a, V> { iter: self.iter() }), + } + } + + fn len(&self) -> usize { + Vec::len(self) + } + + fn get(&self, index: usize) -> &dyn ProtobufValue { + &self[index] + } +} + +// useless +impl<V: ProtobufValue + 'static> ReflectRepeated for [V] { + fn reflect_iter<'a>(&'a self) -> ReflectRepeatedIter<'a> { + ReflectRepeatedIter { + imp: Box::new(ReflectRepeatedIterImplSlice::<'a, V> { iter: self.iter() }), + } + } + + fn len(&self) -> usize { + <[_]>::len(self) + } + + fn get(&self, index: usize) -> &dyn ProtobufValue { + &self[index] + } +} + +impl<V: ProtobufValue + 'static> ReflectRepeated for RepeatedField<V> { + fn reflect_iter<'a>(&'a self) -> ReflectRepeatedIter<'a> { + ReflectRepeatedIter { + imp: Box::new(ReflectRepeatedIterImplSlice::<'a, V> { iter: self.iter() }), + } + } + + fn len(&self) -> usize { + RepeatedField::len(self) + } + + fn get(&self, index: usize) -> &dyn ProtobufValue { + &self[index] + } +} + +trait ReflectRepeatedIterTrait<'a> { + fn next(&mut self) -> Option<&'a dyn ProtobufValue>; +} + +struct ReflectRepeatedIterImplSlice<'a, V: ProtobufValue + 'static> { + iter: slice::Iter<'a, V>, +} + +impl<'a, V: ProtobufValue + 'static> ReflectRepeatedIterTrait<'a> + for ReflectRepeatedIterImplSlice<'a, V> +{ + fn next(&mut self) -> Option<&'a dyn ProtobufValue> { + self.iter.next().map(|v| v as &dyn ProtobufValue) + } +} + +pub struct ReflectRepeatedIter<'a> { + imp: Box<dyn ReflectRepeatedIterTrait<'a> + 'a>, +} + +impl<'a> Iterator for ReflectRepeatedIter<'a> { + type Item = &'a dyn ProtobufValue; + + fn next(&mut self) -> Option<Self::Item> { + self.imp.next() + } +} + +impl<'a> IntoIterator for &'a dyn ReflectRepeated { + type IntoIter = ReflectRepeatedIter<'a>; + type Item = &'a dyn ProtobufValue; + + fn into_iter(self) -> Self::IntoIter { + self.reflect_iter() + } +} + +pub trait ReflectRepeatedEnum<'a> { + fn len(&self) -> usize; + + fn get(&self, index: usize) -> ReflectValueRef<'a>; +} + +pub trait ReflectRepeatedMessage<'a> { + fn len(&self) -> usize; + + fn get(&self, index: usize) -> ReflectValueRef<'a>; +} + +pub enum ReflectRepeatedRef<'a> { + Generic(&'a dyn ReflectRepeated), + U32(&'a [u32]), + U64(&'a [u64]), + I32(&'a [i32]), + I64(&'a [i64]), + F32(&'a [f32]), + F64(&'a [f64]), + Bool(&'a [bool]), + String(&'a [String]), + Bytes(&'a [Vec<u8>]), + Enum(Box<dyn ReflectRepeatedEnum<'a> + 'a>), + Message(Box<dyn ReflectRepeatedMessage<'a> + 'a>), +} + +impl<'a> ReflectRepeatedRef<'a> { + fn len(&self) -> usize { + match *self { + ReflectRepeatedRef::Generic(ref r) => r.len(), + ReflectRepeatedRef::U32(ref r) => r.len(), + ReflectRepeatedRef::U64(ref r) => r.len(), + ReflectRepeatedRef::I32(ref r) => r.len(), + ReflectRepeatedRef::I64(ref r) => r.len(), + ReflectRepeatedRef::F32(ref r) => r.len(), + ReflectRepeatedRef::F64(ref r) => r.len(), + ReflectRepeatedRef::Bool(ref r) => r.len(), + ReflectRepeatedRef::String(ref r) => r.len(), + ReflectRepeatedRef::Bytes(ref r) => r.len(), + ReflectRepeatedRef::Enum(ref r) => r.len(), + ReflectRepeatedRef::Message(ref r) => r.len(), + } + } + + fn get(&self, index: usize) -> ReflectValueRef<'a> { + match *self { + ReflectRepeatedRef::Generic(ref r) => r.get(index).as_ref(), + ReflectRepeatedRef::U32(ref r) => ReflectValueRef::U32(r[index]), + ReflectRepeatedRef::U64(ref r) => ReflectValueRef::U64(r[index]), + ReflectRepeatedRef::I32(ref r) => ReflectValueRef::I32(r[index]), + ReflectRepeatedRef::I64(ref r) => ReflectValueRef::I64(r[index]), + ReflectRepeatedRef::F32(ref r) => ReflectValueRef::F32(r[index]), + ReflectRepeatedRef::F64(ref r) => ReflectValueRef::F64(r[index]), + ReflectRepeatedRef::Bool(ref r) => ReflectValueRef::Bool(r[index]), + ReflectRepeatedRef::String(ref r) => ReflectValueRef::String(&r[index]), + ReflectRepeatedRef::Bytes(ref r) => ReflectValueRef::Bytes(&r[index]), + ReflectRepeatedRef::Enum(ref r) => r.get(index), + ReflectRepeatedRef::Message(ref r) => r.get(index), + } + } +} + +pub struct ReflectRepeatedRefIter<'a> { + repeated: &'a ReflectRepeatedRef<'a>, + pos: usize, +} + +impl<'a> Iterator for ReflectRepeatedRefIter<'a> { + type Item = ReflectValueRef<'a>; + + fn next(&mut self) -> Option<Self::Item> { + if self.pos < self.repeated.len() { + let pos = self.pos; + self.pos += 1; + Some(self.repeated.get(pos)) + } else { + None + } + } +} + +impl<'a> IntoIterator for &'a ReflectRepeatedRef<'a> { + type IntoIter = ReflectRepeatedRefIter<'a>; + type Item = ReflectValueRef<'a>; + + fn into_iter(self) -> Self::IntoIter { + ReflectRepeatedRefIter { + repeated: self, + pos: 0, + } + } +} diff --git a/2.27.1/src/reflect/rt/mod.rs b/2.27.1/src/reflect/rt/mod.rs new file mode 100644 index 0000000..d715d92 --- /dev/null +++ b/2.27.1/src/reflect/rt/mod.rs @@ -0,0 +1,5 @@ +//! This module contains functions references for reflection in generated code. + +#![doc(hidden)] + +pub use crate::reflect::acc::FieldAccessor; diff --git a/2.27.1/src/reflect/value.rs b/2.27.1/src/reflect/value.rs new file mode 100644 index 0000000..9598b9f --- /dev/null +++ b/2.27.1/src/reflect/value.rs @@ -0,0 +1,185 @@ +use std::any::Any; + +#[cfg(feature = "bytes")] +use bytes::Bytes; + +use super::*; +#[cfg(feature = "bytes")] +use crate::chars::Chars; + +/// Type implemented by all protobuf elementary types +/// (ints, floats, bool, string, bytes, enums, messages). +pub trait ProtobufValue: Any + 'static { + /// As ref + fn as_ref(&self) -> ReflectValueRef; + + /// Convert to `Any` + fn as_any(&self) -> &dyn Any { + unimplemented!() + } + + /// Is value non-zero? + fn is_non_zero(&self) -> bool { + self.as_ref().is_non_zero() + } + + /// Return `ProtobufValueRef` if self is `Copy`. + /// + /// # Panics + /// + /// if `Self` is not `Copy`. + fn as_ref_copy(&self) -> ReflectValueRef<'static> +//where Self : Copy // TODO + { + match self.as_ref() { + ReflectValueRef::Bool(v) => ReflectValueRef::Bool(v), + ReflectValueRef::U32(v) => ReflectValueRef::U32(v), + ReflectValueRef::U64(v) => ReflectValueRef::U64(v), + ReflectValueRef::I32(v) => ReflectValueRef::I32(v), + ReflectValueRef::I64(v) => ReflectValueRef::I64(v), + ReflectValueRef::F32(v) => ReflectValueRef::F32(v), + ReflectValueRef::F64(v) => ReflectValueRef::F64(v), + ReflectValueRef::Enum(v) => ReflectValueRef::Enum(v), + ReflectValueRef::String(..) + | ReflectValueRef::Bytes(..) + | ReflectValueRef::Message(..) => unreachable!(), + } + } +} + +impl ProtobufValue for u32 { + fn as_ref(&self) -> ReflectValueRef { + ReflectValueRef::U32(*self) + } +} + +impl ProtobufValue for u64 { + fn as_ref(&self) -> ReflectValueRef { + ReflectValueRef::U64(*self) + } +} + +impl ProtobufValue for i32 { + fn as_ref(&self) -> ReflectValueRef { + ReflectValueRef::I32(*self) + } +} + +impl ProtobufValue for i64 { + fn as_ref(&self) -> ReflectValueRef { + ReflectValueRef::I64(*self) + } +} + +impl ProtobufValue for f32 { + fn as_ref(&self) -> ReflectValueRef { + ReflectValueRef::F32(*self) + } +} + +impl ProtobufValue for f64 { + fn as_ref(&self) -> ReflectValueRef { + ReflectValueRef::F64(*self) + } +} + +impl ProtobufValue for bool { + fn as_ref(&self) -> ReflectValueRef { + ReflectValueRef::Bool(*self) + } +} + +impl ProtobufValue for String { + fn as_ref(&self) -> ReflectValueRef { + ReflectValueRef::String(*&self) + } +} + +impl ProtobufValue for str { + fn as_ref(&self) -> ReflectValueRef { + ReflectValueRef::String(self) + } +} + +impl ProtobufValue for Vec<u8> { + fn as_ref(&self) -> ReflectValueRef { + ReflectValueRef::Bytes(*&self) + } +} + +#[cfg(feature = "bytes")] +impl ProtobufValue for Bytes { + fn as_ref(&self) -> ReflectValueRef { + ReflectValueRef::Bytes(&*self) + } +} + +#[cfg(feature = "bytes")] +impl ProtobufValue for Chars { + fn as_ref(&self) -> ReflectValueRef { + ReflectValueRef::String(&*self) + } +} + +// conflicting implementations, so generated code is used instead +/* +impl<E : ProtobufEnum> ProtobufValue for E { + fn as_ref(&self) -> ProtobufValueRef { + ProtobufValueRef::Enum(self.descriptor()) + } +} + +impl<M : Message> ProtobufValue for M { + fn as_ref(&self) -> ProtobufValueRef { + ProtobufValueRef::Message(self) + } +} +*/ + +/// A reference to a value +#[derive(Debug)] +pub enum ReflectValueRef<'a> { + /// `u32` + U32(u32), + /// `u64` + U64(u64), + /// `i32` + I32(i32), + /// `i64` + I64(i64), + /// `f32` + F32(f32), + /// `f64` + F64(f64), + /// `bool` + Bool(bool), + /// `string` + String(&'a str), + /// `bytes` + Bytes(&'a [u8]), + /// `enum` + // TODO: change to (i32, EnumDescriptor) + Enum(&'static EnumValueDescriptor), + /// `message` + Message(&'a dyn Message), +} + +impl<'a> ReflectValueRef<'a> { + /// Value is "non-zero"? + #[doc(hidden)] + pub fn is_non_zero(&self) -> bool { + match *self { + ReflectValueRef::U32(v) => v != 0, + ReflectValueRef::U64(v) => v != 0, + ReflectValueRef::I32(v) => v != 0, + ReflectValueRef::I64(v) => v != 0, + ReflectValueRef::F32(v) => v != 0., + ReflectValueRef::F64(v) => v != 0., + ReflectValueRef::Bool(v) => v, + ReflectValueRef::String(v) => !v.is_empty(), + ReflectValueRef::Bytes(v) => !v.is_empty(), + ReflectValueRef::Enum(v) => v.value() != 0, + ReflectValueRef::Message(_) => true, + } + } +} diff --git a/2.27.1/src/repeated.rs b/2.27.1/src/repeated.rs new file mode 100644 index 0000000..0b749d9 --- /dev/null +++ b/2.27.1/src/repeated.rs @@ -0,0 +1,563 @@ +use std::borrow::Borrow; +use std::cmp::Ordering; +use std::default::Default; +use std::fmt; +use std::hash::Hash; +use std::hash::Hasher; +use std::iter::FromIterator; +use std::iter::IntoIterator; +use std::ops::Deref; +use std::ops::DerefMut; +use std::ops::Index; +use std::ops::IndexMut; +use std::slice; +use std::vec; + +#[cfg(feature = "with-serde")] +use serde; + +use crate::clear::Clear; + +/// Wrapper around vector to avoid deallocations on clear. +pub struct RepeatedField<T> { + vec: Vec<T>, + len: usize, +} + +impl<T> RepeatedField<T> { + /// Return number of elements in this container. + #[inline] + pub fn len(&self) -> usize { + self.len + } + + /// Clear. + #[inline] + pub fn clear(&mut self) { + self.len = 0; + } +} + +impl<T> Clear for RepeatedField<T> { + #[inline] + fn clear(&mut self) { + self.len = 0; + } +} + +impl<T> Default for RepeatedField<T> { + #[inline] + fn default() -> RepeatedField<T> { + RepeatedField { + vec: Vec::new(), + len: 0, + } + } +} + +impl<T> RepeatedField<T> { + /// Create new empty container. + #[inline] + pub fn new() -> RepeatedField<T> { + Default::default() + } + + /// Create a contained with data from given vec. + #[inline] + pub fn from_vec(vec: Vec<T>) -> RepeatedField<T> { + let len = vec.len(); + RepeatedField { vec: vec, len: len } + } + + /// Convert data into vec. + #[inline] + pub fn into_vec(self) -> Vec<T> { + let mut vec = self.vec; + vec.truncate(self.len); + vec + } + + /// Return current capacity. + #[inline] + pub fn capacity(&self) -> usize { + self.vec.capacity() + } + + /// View data as slice. + #[inline] + pub fn as_slice<'a>(&'a self) -> &'a [T] { + &self.vec[..self.len] + } + + /// View data as mutable slice. + #[inline] + pub fn as_mut_slice<'a>(&'a mut self) -> &'a mut [T] { + &mut self.vec[..self.len] + } + + /// Get subslice of this container. + #[inline] + pub fn slice(&self, start: usize, end: usize) -> &[T] { + &self.as_ref()[start..end] + } + + /// Get mutable subslice of this container. + #[inline] + pub fn slice_mut(&mut self, start: usize, end: usize) -> &mut [T] { + &mut self.as_mut_slice()[start..end] + } + + /// Get slice from given index. + #[inline] + pub fn slice_from(&self, start: usize) -> &[T] { + &self.as_ref()[start..] + } + + /// Get mutable slice from given index. + #[inline] + pub fn slice_from_mut(&mut self, start: usize) -> &mut [T] { + &mut self.as_mut_slice()[start..] + } + + /// Get slice to given index. + #[inline] + pub fn slice_to(&self, end: usize) -> &[T] { + &self.as_ref()[..end] + } + + /// Get mutable slice to given index. + #[inline] + pub fn slice_to_mut(&mut self, end: usize) -> &mut [T] { + &mut self.as_mut_slice()[..end] + } + + /// View this container as two slices split at given index. + #[inline] + pub fn split_at<'a>(&'a self, mid: usize) -> (&'a [T], &'a [T]) { + self.as_ref().split_at(mid) + } + + /// View this container as two mutable slices split at given index. + #[inline] + pub fn split_at_mut<'a>(&'a mut self, mid: usize) -> (&'a mut [T], &'a mut [T]) { + self.as_mut_slice().split_at_mut(mid) + } + + /// View all but first elements of this container. + #[inline] + pub fn tail(&self) -> &[T] { + &self.as_ref()[1..] + } + + /// Last element of this container. + #[inline] + pub fn last(&self) -> Option<&T> { + self.as_ref().last() + } + + /// Mutable last element of this container. + #[inline] + pub fn last_mut<'a>(&'a mut self) -> Option<&'a mut T> { + self.as_mut_slice().last_mut() + } + + /// View all but last elements of this container. + #[inline] + pub fn init<'a>(&'a self) -> &'a [T] { + let s = self.as_ref(); + &s[0..s.len() - 1] + } + + /// Push an element to the end. + #[inline] + pub fn push(&mut self, value: T) { + if self.len == self.vec.len() { + self.vec.push(value); + } else { + self.vec[self.len] = value; + } + self.len += 1; + } + + /// Pop last element. + #[inline] + pub fn pop(&mut self) -> Option<T> { + if self.len == 0 { + None + } else { + self.vec.truncate(self.len); + self.len -= 1; + self.vec.pop() + } + } + + /// Insert an element at specified position. + #[inline] + pub fn insert(&mut self, index: usize, value: T) { + assert!(index <= self.len); + self.vec.insert(index, value); + self.len += 1; + } + + /// Remove an element from specified position. + #[inline] + pub fn remove(&mut self, index: usize) -> T { + assert!(index < self.len); + self.len -= 1; + self.vec.remove(index) + } + + /// Retains only the elements specified by the predicate. + /// + /// In other words, remove all elements `e` such that `f(&e)` returns `false`. + /// This method operates in place, visiting each element exactly once in the + /// original order, and preserves the order of the retained elements. + /// + /// # Examples + /// + /// ``` + /// # use protobuf::RepeatedField; + /// + /// let mut vec = RepeatedField::from(vec![1, 2, 3, 4]); + /// vec.retain(|&x| x % 2 == 0); + /// assert_eq!(vec, RepeatedField::from(vec![2, 4])); + /// ``` + pub fn retain<F>(&mut self, f: F) + where + F: FnMut(&T) -> bool, + { + // suboptimal + self.vec.truncate(self.len); + self.vec.retain(f); + self.len = self.vec.len(); + } + + /// Truncate at specified length. + #[inline] + pub fn truncate(&mut self, len: usize) { + if self.len > len { + self.len = len; + } + } + + /// Reverse in place. + #[inline] + pub fn reverse(&mut self) { + self.as_mut_slice().reverse() + } + + /// Into owned iterator. + #[inline] + pub fn into_iter(mut self) -> vec::IntoIter<T> { + self.vec.truncate(self.len); + self.vec.into_iter() + } + + /// Immutable data iterator. + #[inline] + pub fn iter<'a>(&'a self) -> slice::Iter<'a, T> { + self.as_ref().iter() + } + + /// Mutable data iterator. + #[inline] + pub fn iter_mut<'a>(&'a mut self) -> slice::IterMut<'a, T> { + self.as_mut_slice().iter_mut() + } + + /// Sort elements with given comparator. + #[inline] + pub fn sort_by<F>(&mut self, compare: F) + where + F: Fn(&T, &T) -> Ordering, + { + self.as_mut_slice().sort_by(compare) + } + + /// Get data as raw pointer. + #[inline] + pub fn as_ptr(&self) -> *const T { + self.vec.as_ptr() + } + + /// Get data a mutable raw pointer. + #[inline] + pub fn as_mut_ptr(&mut self) -> *mut T { + self.vec.as_mut_ptr() + } +} + +impl<T: Default + Clear> RepeatedField<T> { + /// Push default value. + /// This operation could be faster than `rf.push(Default::default())`, + /// because it may reuse previously allocated and cleared element. + pub fn push_default<'a>(&'a mut self) -> &'a mut T { + if self.len == self.vec.len() { + self.vec.push(Default::default()); + } else { + self.vec[self.len].clear(); + } + self.len += 1; + self.last_mut().unwrap() + } +} + +impl<T> From<Vec<T>> for RepeatedField<T> { + #[inline] + fn from(values: Vec<T>) -> RepeatedField<T> { + RepeatedField::from_vec(values) + } +} + +impl<'a, T: Clone> From<&'a [T]> for RepeatedField<T> { + #[inline] + fn from(values: &'a [T]) -> RepeatedField<T> { + RepeatedField::from_slice(values) + } +} + +impl<T> Into<Vec<T>> for RepeatedField<T> { + #[inline] + fn into(self) -> Vec<T> { + self.into_vec() + } +} + +impl<T: Clone> RepeatedField<T> { + /// Copy slice data to `RepeatedField` + #[inline] + pub fn from_slice(values: &[T]) -> RepeatedField<T> { + RepeatedField::from_vec(values.to_vec()) + } + + /// Copy slice data to `RepeatedField` + #[inline] + pub fn from_ref<X: AsRef<[T]>>(values: X) -> RepeatedField<T> { + RepeatedField::from_slice(values.as_ref()) + } + + /// Copy this data into new vec. + #[inline] + pub fn to_vec(&self) -> Vec<T> { + self.as_ref().to_vec() + } +} + +impl<T: Clone> Clone for RepeatedField<T> { + #[inline] + fn clone(&self) -> RepeatedField<T> { + RepeatedField { + vec: self.to_vec(), + len: self.len(), + } + } +} + +impl<T> FromIterator<T> for RepeatedField<T> { + #[inline] + fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> RepeatedField<T> { + RepeatedField::from_vec(FromIterator::from_iter(iter)) + } +} + +impl<'a, T> IntoIterator for &'a RepeatedField<T> { + type Item = &'a T; + type IntoIter = slice::Iter<'a, T>; + + fn into_iter(self) -> slice::Iter<'a, T> { + self.iter() + } +} + +impl<'a, T> IntoIterator for &'a mut RepeatedField<T> { + type Item = &'a mut T; + type IntoIter = slice::IterMut<'a, T>; + + fn into_iter(self) -> slice::IterMut<'a, T> { + self.iter_mut() + } +} + +impl<'a, T> IntoIterator for RepeatedField<T> { + type Item = T; + type IntoIter = vec::IntoIter<T>; + + fn into_iter(self) -> vec::IntoIter<T> { + self.into_iter() + } +} + +impl<T: PartialEq> PartialEq for RepeatedField<T> { + #[inline] + fn eq(&self, other: &RepeatedField<T>) -> bool { + self.as_ref() == other.as_ref() + } +} + +impl<T: Eq> Eq for RepeatedField<T> {} + +impl<T: PartialEq> PartialEq<[T]> for RepeatedField<T> { + fn eq(&self, other: &[T]) -> bool { + self.as_slice() == other + } +} + +impl<T: PartialEq> PartialEq<RepeatedField<T>> for [T] { + fn eq(&self, other: &RepeatedField<T>) -> bool { + self == other.as_slice() + } +} + +impl<T: PartialEq> RepeatedField<T> { + /// True iff this container contains given element. + #[inline] + pub fn contains(&self, value: &T) -> bool { + self.as_ref().contains(value) + } +} + +impl<T: Hash> Hash for RepeatedField<T> { + fn hash<H: Hasher>(&self, state: &mut H) { + self.as_ref().hash(state); + } +} + +impl<T> AsRef<[T]> for RepeatedField<T> { + #[inline] + fn as_ref<'a>(&'a self) -> &'a [T] { + &self.vec[..self.len] + } +} + +impl<T> Borrow<[T]> for RepeatedField<T> { + #[inline] + fn borrow(&self) -> &[T] { + &self.vec[..self.len] + } +} + +impl<T> Deref for RepeatedField<T> { + type Target = [T]; + #[inline] + fn deref(&self) -> &[T] { + &self.vec[..self.len] + } +} + +impl<T> DerefMut for RepeatedField<T> { + #[inline] + fn deref_mut(&mut self) -> &mut [T] { + &mut self.vec[..self.len] + } +} + +impl<T> Index<usize> for RepeatedField<T> { + type Output = T; + + #[inline] + fn index<'a>(&'a self, index: usize) -> &'a T { + &self.as_ref()[index] + } +} + +impl<T> IndexMut<usize> for RepeatedField<T> { + #[inline] + fn index_mut<'a>(&'a mut self, index: usize) -> &'a mut T { + &mut self.as_mut_slice()[index] + } +} + +impl<T> Extend<T> for RepeatedField<T> { + fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I) { + self.vec.truncate(self.len); + self.vec.extend(iter); + self.len = self.vec.len(); + } +} + +impl<'a, T: Copy + 'a> Extend<&'a T> for RepeatedField<T> { + fn extend<I: IntoIterator<Item = &'a T>>(&mut self, iter: I) { + self.vec.truncate(self.len); + self.vec.extend(iter); + self.len = self.vec.len(); + } +} + +impl<T: fmt::Debug> fmt::Debug for RepeatedField<T> { + #[inline] + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + self.as_ref().fmt(f) + } +} + +#[cfg(feature = "with-serde")] +impl<T: serde::Serialize> serde::Serialize for RepeatedField<T> { + fn serialize<S>( + &self, + serializer: S, + ) -> Result<<S as serde::Serializer>::Ok, <S as serde::Serializer>::Error> + where + S: serde::Serializer, + { + self.as_ref().serialize(serializer) + } +} + +#[cfg(feature = "with-serde")] +impl<'de, T: serde::Deserialize<'de> + Default> serde::Deserialize<'de> for RepeatedField<T> { + fn deserialize<D>(deserializer: D) -> Result<Self, <D as serde::Deserializer<'de>>::Error> + where + D: serde::Deserializer<'de>, + { + Vec::deserialize(deserializer).map(RepeatedField::from) + } +} + +#[cfg(test)] +mod test { + use super::RepeatedField; + + #[test] + fn as_mut_slice() { + let mut v = RepeatedField::new(); + v.push(10); + v.push(20); + v.clear(); + assert_eq!(v.as_mut_slice(), &mut []); + v.push(30); + assert_eq!(v.as_mut_slice(), &mut [30]); + } + + #[test] + fn push_default() { + let mut v = RepeatedField::new(); + v.push("aa".to_string()); + v.push("bb".to_string()); + v.clear(); + assert_eq!("".to_string(), *v.push_default()); + } + + #[test] + fn extend_values() { + let mut r = RepeatedField::new(); + r.push(10); + r.push(20); + r.clear(); + // self-check + assert_eq!(2, r.vec.len()); + r.extend(vec![30, 40]); + assert_eq!(&[30, 40][..], &r); + } + + #[test] + fn extend_copy() { + let mut r = RepeatedField::new(); + r.push(10); + r.push(20); + r.clear(); + // self-check + assert_eq!(2, r.vec.len()); + r.extend(&[30, 40]); + assert_eq!(&[30, 40][..], &r); + } +} diff --git a/2.27.1/src/rt.rs b/2.27.1/src/rt.rs new file mode 100644 index 0000000..fca1254 --- /dev/null +++ b/2.27.1/src/rt.rs @@ -0,0 +1,929 @@ +//! Functions used by generated protobuf code. +//! Should not be used by programs written by hands. + +use std::collections::HashMap; +use std::default::Default; +use std::hash::Hash; + +#[cfg(feature = "bytes")] +use bytes::Bytes; + +#[cfg(feature = "bytes")] +use crate::chars::Chars; +use crate::coded_input_stream::CodedInputStream; +use crate::coded_output_stream::CodedOutputStream; +use crate::enums::ProtobufEnum; +use crate::error::ProtobufError; +use crate::error::ProtobufResult; +use crate::error::WireError; +pub use crate::lazy_v2::LazyV2; +use crate::message::*; +use crate::repeated::RepeatedField; +use crate::singular::SingularField; +use crate::singular::SingularPtrField; +use crate::types::*; +use crate::unknown::UnknownFields; +use crate::wire_format; +use crate::wire_format::WireType; +use crate::zigzag::*; + +/// Given `u64` value compute varint encoded length. +pub fn compute_raw_varint64_size(value: u64) -> u32 { + if (value & (0xffffffffffffffffu64 << 7)) == 0 { + return 1; + } + if (value & (0xffffffffffffffffu64 << 14)) == 0 { + return 2; + } + if (value & (0xffffffffffffffffu64 << 21)) == 0 { + return 3; + } + if (value & (0xffffffffffffffffu64 << 28)) == 0 { + return 4; + } + if (value & (0xffffffffffffffffu64 << 35)) == 0 { + return 5; + } + if (value & (0xffffffffffffffffu64 << 42)) == 0 { + return 6; + } + if (value & (0xffffffffffffffffu64 << 49)) == 0 { + return 7; + } + if (value & (0xffffffffffffffffu64 << 56)) == 0 { + return 8; + } + if (value & (0xffffffffffffffffu64 << 63)) == 0 { + return 9; + } + 10 +} + +/// Given `u32` value compute varint encoded length. +pub fn compute_raw_varint32_size(value: u32) -> u32 { + compute_raw_varint64_size(value as u64) +} + +/// Helper trait implemented by integer types which could be encoded as varint. +pub trait ProtobufVarint { + /// Size of self when encoded as varint. + fn len_varint(&self) -> u32; +} + +/// Helper trait implemented by integer types which could be encoded as zigzag varint. +pub trait ProtobufVarintZigzag { + /// Size of self when encoded as zigzag varint. + fn len_varint_zigzag(&self) -> u32; +} + +impl ProtobufVarint for u64 { + fn len_varint(&self) -> u32 { + compute_raw_varint64_size(*self) + } +} + +impl ProtobufVarint for u32 { + fn len_varint(&self) -> u32 { + (*self as u64).len_varint() + } +} + +impl ProtobufVarint for i64 { + fn len_varint(&self) -> u32 { + // same as length of u64 + (*self as u64).len_varint() + } +} + +impl ProtobufVarintZigzag for i64 { + fn len_varint_zigzag(&self) -> u32 { + compute_raw_varint64_size(encode_zig_zag_64(*self)) + } +} + +impl ProtobufVarint for i32 { + fn len_varint(&self) -> u32 { + // sign-extend and then compute + (*self as i64).len_varint() + } +} + +impl ProtobufVarintZigzag for i32 { + fn len_varint_zigzag(&self) -> u32 { + compute_raw_varint32_size(encode_zig_zag_32(*self)) + } +} + +impl ProtobufVarint for bool { + fn len_varint(&self) -> u32 { + 1 + } +} + +/* Commented out due to https://github.com/mozilla/rust/issues/8075 +impl<E:ProtobufEnum> ProtobufVarint for E { + fn len_varint(&self) -> u32 { + self.value().len_varint() + } +} +*/ + +/// Size of serialized repeated packed field, excluding length and tag. +pub fn vec_packed_varint_data_size<T: ProtobufVarint>(vec: &[T]) -> u32 { + vec.iter().map(|v| v.len_varint()).fold(0, |a, i| a + i) +} + +/// Size of serialized repeated packed field, excluding length and tag. +pub fn vec_packed_varint_zigzag_data_size<T: ProtobufVarintZigzag>(vec: &[T]) -> u32 { + vec.iter() + .map(|v| v.len_varint_zigzag()) + .fold(0, |a, i| a + i) +} + +/// Size of serialized repeated packed enum field, excluding length and tag. +pub fn vec_packed_enum_data_size<E: ProtobufEnum>(vec: &[E]) -> u32 { + vec.iter() + .map(|e| compute_raw_varint32_size(e.value() as u32)) + .fold(0, |a, i| a + i) +} + +/// Size of serialized data with length prefix and tag +pub fn vec_packed_varint_size<T: ProtobufVarint>(field_number: u32, vec: &[T]) -> u32 { + if vec.is_empty() { + 0 + } else { + let data_size = vec_packed_varint_data_size(vec); + tag_size(field_number) + data_size.len_varint() + data_size + } +} + +/// Size of serialized data with length prefix and tag +pub fn vec_packed_varint_zigzag_size<T: ProtobufVarintZigzag>(field_number: u32, vec: &[T]) -> u32 { + if vec.is_empty() { + 0 + } else { + let data_size = vec_packed_varint_zigzag_data_size(vec); + tag_size(field_number) + data_size.len_varint() + data_size + } +} + +/// Size of serialized data with length prefix and tag +pub fn vec_packed_enum_size<E: ProtobufEnum>(field_number: u32, vec: &[E]) -> u32 { + if vec.is_empty() { + 0 + } else { + let data_size = vec_packed_enum_data_size(vec); + tag_size(field_number) + data_size.len_varint() + data_size + } +} + +/// Compute tag size. Size of tag does not depend on wire type. +pub fn tag_size(field_number: u32) -> u32 { + wire_format::Tag::make(field_number, WireType::WireTypeFixed64) + .value() + .len_varint() +} + +fn value_size_no_tag<T: ProtobufVarint>(value: T, wt: WireType) -> u32 { + match wt { + WireType::WireTypeFixed64 => 8, + WireType::WireTypeFixed32 => 4, + WireType::WireTypeVarint => value.len_varint(), + _ => panic!(), + } +} + +/// Integer value size when encoded as specified wire type. +pub fn value_size<T: ProtobufVarint>(field_number: u32, value: T, wt: WireType) -> u32 { + tag_size(field_number) + value_size_no_tag(value, wt) +} + +/// Integer value size when encoded as specified wire type. +pub fn value_varint_zigzag_size_no_tag<T: ProtobufVarintZigzag>(value: T) -> u32 { + value.len_varint_zigzag() +} + +/// Length of value when encoding with zigzag encoding with tag +pub fn value_varint_zigzag_size<T: ProtobufVarintZigzag>(field_number: u32, value: T) -> u32 { + tag_size(field_number) + value_varint_zigzag_size_no_tag(value) +} + +fn enum_size_no_tag<E: ProtobufEnum>(value: E) -> u32 { + value.value().len_varint() +} + +/// Size of encoded enum field value. +pub fn enum_size<E: ProtobufEnum>(field_number: u32, value: E) -> u32 { + tag_size(field_number) + enum_size_no_tag(value) +} + +fn bytes_size_no_tag(bytes: &[u8]) -> u32 { + compute_raw_varint64_size(bytes.len() as u64) + bytes.len() as u32 +} + +/// Size of encoded bytes field. +pub fn bytes_size(field_number: u32, bytes: &[u8]) -> u32 { + tag_size(field_number) + bytes_size_no_tag(bytes) +} + +fn string_size_no_tag(s: &str) -> u32 { + bytes_size_no_tag(s.as_bytes()) +} + +/// Size of encoded string field. +pub fn string_size(field_number: u32, s: &str) -> u32 { + tag_size(field_number) + string_size_no_tag(s) +} + +/// Size of encoded unknown fields size. +pub fn unknown_fields_size(unknown_fields: &UnknownFields) -> u32 { + let mut r = 0; + for (number, values) in unknown_fields { + r += (tag_size(number) + 4) * values.fixed32.len() as u32; + r += (tag_size(number) + 8) * values.fixed64.len() as u32; + + r += tag_size(number) * values.varint.len() as u32; + for varint in &values.varint { + r += varint.len_varint(); + } + + r += tag_size(number) * values.length_delimited.len() as u32; + for bytes in &values.length_delimited { + r += bytes_size_no_tag(&bytes); + } + } + r +} + +/// Read repeated `int32` field into given vec. +pub fn read_repeated_int32_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Vec<i32>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => is.read_repeated_packed_int32_into(target), + WireType::WireTypeVarint => { + target.push(is.read_int32()?); + Ok(()) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read repeated `int64` field into given vec. +pub fn read_repeated_int64_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Vec<i64>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => is.read_repeated_packed_int64_into(target), + WireType::WireTypeVarint => { + target.push(is.read_int64()?); + Ok(()) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read repeated `uint32` field into given vec. +pub fn read_repeated_uint32_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Vec<u32>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => is.read_repeated_packed_uint32_into(target), + WireType::WireTypeVarint => { + target.push(is.read_uint32()?); + Ok(()) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read repeated `uint64` field into given vec. +pub fn read_repeated_uint64_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Vec<u64>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => is.read_repeated_packed_uint64_into(target), + WireType::WireTypeVarint => { + target.push(is.read_uint64()?); + Ok(()) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read repeated `sint32` field into given vec. +pub fn read_repeated_sint32_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Vec<i32>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => is.read_repeated_packed_sint32_into(target), + WireType::WireTypeVarint => { + target.push(is.read_sint32()?); + Ok(()) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read repeated `sint64` field into given vec. +pub fn read_repeated_sint64_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Vec<i64>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => is.read_repeated_packed_sint64_into(target), + WireType::WireTypeVarint => { + target.push(is.read_sint64()?); + Ok(()) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read repeated `fixed32` field into given vec. +pub fn read_repeated_fixed32_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Vec<u32>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => is.read_repeated_packed_fixed32_into(target), + WireType::WireTypeFixed32 => { + target.push(is.read_fixed32()?); + Ok(()) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read repeated `fixed64` field into given vec. +pub fn read_repeated_fixed64_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Vec<u64>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => is.read_repeated_packed_fixed64_into(target), + WireType::WireTypeFixed64 => { + target.push(is.read_fixed64()?); + Ok(()) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read repeated `sfixed32` field into given vec. +pub fn read_repeated_sfixed32_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Vec<i32>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => is.read_repeated_packed_sfixed32_into(target), + WireType::WireTypeFixed32 => { + target.push(is.read_sfixed32()?); + Ok(()) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read repeated `sfixed64` field into given vec. +pub fn read_repeated_sfixed64_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Vec<i64>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => is.read_repeated_packed_sfixed64_into(target), + WireType::WireTypeFixed64 => { + target.push(is.read_sfixed64()?); + Ok(()) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read repeated `double` field into given vec. +pub fn read_repeated_double_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Vec<f64>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => is.read_repeated_packed_double_into(target), + WireType::WireTypeFixed64 => { + target.push(is.read_double()?); + Ok(()) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read repeated `float` field into given vec. +pub fn read_repeated_float_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Vec<f32>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => is.read_repeated_packed_float_into(target), + WireType::WireTypeFixed32 => { + target.push(is.read_float()?); + Ok(()) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read repeated `bool` field into given vec. +pub fn read_repeated_bool_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Vec<bool>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => is.read_repeated_packed_bool_into(target), + WireType::WireTypeVarint => { + target.push(is.read_bool()?); + Ok(()) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read repeated `enum` field into given vec. +/// This function is no longer called from generated code, remove in 1.5. +pub fn read_repeated_enum_into<E: ProtobufEnum>( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Vec<E>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => is.read_repeated_packed_enum_into(target), + WireType::WireTypeVarint => { + target.push(is.read_enum()?); + Ok(()) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Helper function to read single enum value. +#[inline] +fn read_enum_with_unknown_fields_into<E: ProtobufEnum, C>( + is: &mut CodedInputStream, + target: C, + field_number: u32, + unknown_fields: &mut UnknownFields, +) -> ProtobufResult<()> +where + C: FnOnce(E), +{ + let i = is.read_int32()?; + match ProtobufEnum::from_i32(i) { + Some(e) => target(e), + None => unknown_fields.add_varint(field_number, i as i64 as u64), + } + Ok(()) +} + +fn read_repeated_packed_enum_with_unknown_fields_into<E: ProtobufEnum>( + is: &mut CodedInputStream, + target: &mut Vec<E>, + field_number: u32, + unknown_fields: &mut UnknownFields, +) -> ProtobufResult<()> { + let len = is.read_raw_varint64()?; + let old_limit = is.push_limit(len)?; + while !is.eof()? { + read_enum_with_unknown_fields_into(is, |e| target.push(e), field_number, unknown_fields)?; + } + is.pop_limit(old_limit); + Ok(()) +} + +/// Read repeated `enum` field into given vec, +/// and when value is unknown store it in unknown fields +/// which matches proto2 spec. +/// +/// See explanation +/// [here](https://github.com/stepancheg/rust-protobuf/issues/233#issuecomment-375142710) +pub fn read_repeated_enum_with_unknown_fields_into<E: ProtobufEnum>( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Vec<E>, + field_number: u32, + unknown_fields: &mut UnknownFields, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => read_repeated_packed_enum_with_unknown_fields_into( + is, + target, + field_number, + unknown_fields, + ), + WireType::WireTypeVarint => { + read_enum_with_unknown_fields_into(is, |e| target.push(e), field_number, unknown_fields) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read repeated `enum` field into given vec, +/// and when value is unknown store it in unknown fields +/// which matches proto2 spec. +/// +/// See explanation +/// [here](https://github.com/stepancheg/rust-protobuf/issues/233#issuecomment-375142710) +pub fn read_proto3_enum_with_unknown_fields_into<E: ProtobufEnum>( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut E, + field_number: u32, + unknown_fields: &mut UnknownFields, +) -> ProtobufResult<()> { + if wire_type != WireType::WireTypeVarint { + return Err(unexpected_wire_type(wire_type)); + } + + read_enum_with_unknown_fields_into(is, |e| *target = e, field_number, unknown_fields) +} + +/// Read repeated `enum` field into given vec, +/// and when value is unknown store it in unknown fields +/// which matches proto2 spec. +/// +/// See explanation +/// [here](https://github.com/stepancheg/rust-protobuf/issues/233#issuecomment-375142710) +pub fn read_proto2_enum_with_unknown_fields_into<E: ProtobufEnum>( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Option<E>, + field_number: u32, + unknown_fields: &mut UnknownFields, +) -> ProtobufResult<()> { + if wire_type != WireType::WireTypeVarint { + return Err(unexpected_wire_type(wire_type)); + } + + read_enum_with_unknown_fields_into(is, |e| *target = Some(e), field_number, unknown_fields) +} + +/// Read repeated `string` field into given vec. +pub fn read_repeated_string_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut RepeatedField<String>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => { + let tmp = target.push_default(); + is.read_string_into(tmp) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read repeated `Chars` field into given vec. +#[cfg(feature = "bytes")] +pub fn read_repeated_carllerche_string_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Vec<Chars>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => { + target.push(is.read_carllerche_chars()?); + Ok(()) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read singular `string` field. +pub fn read_singular_string_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut SingularField<String>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => { + let tmp = target.set_default(); + is.read_string_into(tmp) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read singular `Chars` field. +#[cfg(feature = "bytes")] +pub fn read_singular_carllerche_string_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Option<Chars>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => { + *target = Some(is.read_carllerche_chars()?); + Ok(()) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read singular `string` field for proto3. +pub fn read_singular_proto3_string_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut String, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => is.read_string_into(target), + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read singular `Chars` field for proto3. +#[cfg(feature = "bytes")] +pub fn read_singular_proto3_carllerche_string_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Chars, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => { + *target = is.read_carllerche_chars()?; + Ok(()) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read repeated `bytes` field into given vec. +pub fn read_repeated_bytes_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut RepeatedField<Vec<u8>>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => { + let tmp = target.push_default(); + is.read_bytes_into(tmp) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read repeated `Bytes` field into given vec. +#[cfg(feature = "bytes")] +pub fn read_repeated_carllerche_bytes_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Vec<Bytes>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => { + target.push(is.read_carllerche_bytes()?); + Ok(()) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read singular `bytes` field. +pub fn read_singular_bytes_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut SingularField<Vec<u8>>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => { + let tmp = target.set_default(); + is.read_bytes_into(tmp) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read singular `Bytes` field. +#[cfg(feature = "bytes")] +pub fn read_singular_carllerche_bytes_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Option<Bytes>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => { + *target = Some(is.read_carllerche_bytes()?); + Ok(()) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read singular `bytes` field for proto3. +pub fn read_singular_proto3_bytes_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Vec<u8>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => is.read_bytes_into(target), + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read singular `Bytes` field for proto3. +#[cfg(feature = "bytes")] +pub fn read_singular_proto3_carllerche_bytes_into( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut Bytes, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => { + *target = is.read_carllerche_bytes()?; + Ok(()) + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read repeated `message` field. +pub fn read_repeated_message_into<M: Message + Default>( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut RepeatedField<M>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => { + is.incr_recursion()?; + let tmp = target.push_default(); + let res = is.merge_message(tmp); + is.decr_recursion(); + res + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +/// Read singular `message` field. +pub fn read_singular_message_into<M: Message + Default>( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut SingularPtrField<M>, +) -> ProtobufResult<()> { + match wire_type { + WireType::WireTypeLengthDelimited => { + is.incr_recursion()?; + let tmp = target.set_default(); + let res = is.merge_message(tmp); + is.decr_recursion(); + res + } + _ => Err(unexpected_wire_type(wire_type)), + } +} + +fn skip_group(is: &mut CodedInputStream) -> ProtobufResult<()> { + loop { + let (_, wire_type) = is.read_tag_unpack()?; + if wire_type == wire_format::WireTypeEndGroup { + return Ok(()); + } + is.skip_field(wire_type)?; + } +} + +/// Handle unknown field in generated code. +/// Either store a value in unknown, or skip a group. +pub fn read_unknown_or_skip_group( + field_number: u32, + wire_type: WireType, + is: &mut CodedInputStream, + unknown_fields: &mut UnknownFields, +) -> ProtobufResult<()> { + match wire_type { + wire_format::WireTypeStartGroup => skip_group(is), + _ => { + let unknown = is.read_unknown(wire_type)?; + unknown_fields.add_value(field_number, unknown); + Ok(()) + } + } +} + +/// Create an error for unexpected wire type. +/// +/// Function is used in generated code, so error types can be changed, +/// but this function remains unchanged. +pub fn unexpected_wire_type(wire_type: WireType) -> ProtobufError { + ProtobufError::WireError(WireError::UnexpectedWireType(wire_type)) +} + +/// Compute serialized size of `map` field and cache nested field sizes. +pub fn compute_map_size<K, V>(field_number: u32, map: &HashMap<K::Value, V::Value>) -> u32 +where + K: ProtobufType, + V: ProtobufType, + K::Value: Eq + Hash, +{ + let mut sum = 0; + for (k, v) in map { + let key_tag_size = 1; + let value_tag_size = 1; + + let key_len = K::compute_size_with_length_delimiter(k); + let value_len = V::compute_size_with_length_delimiter(v); + + let entry_len = key_tag_size + key_len + value_tag_size + value_len; + sum += tag_size(field_number) + compute_raw_varint32_size(entry_len) + entry_len; + } + sum +} + +/// Write map, message sizes must be already known. +pub fn write_map_with_cached_sizes<K, V>( + field_number: u32, + map: &HashMap<K::Value, V::Value>, + os: &mut CodedOutputStream, +) -> ProtobufResult<()> +where + K: ProtobufType, + V: ProtobufType, + K::Value: Eq + Hash, +{ + for (k, v) in map { + let key_tag_size = 1; + let value_tag_size = 1; + + let key_len = K::get_cached_size_with_length_delimiter(k); + let value_len = V::get_cached_size_with_length_delimiter(v); + + let entry_len = key_tag_size + key_len + value_tag_size + value_len; + + os.write_tag(field_number, WireType::WireTypeLengthDelimited)?; + os.write_raw_varint32(entry_len)?; + K::write_with_cached_size(1, k, os)?; + V::write_with_cached_size(2, v, os)?; + } + Ok(()) +} + +/// Read `map` field. +pub fn read_map_into<K, V>( + wire_type: WireType, + is: &mut CodedInputStream, + target: &mut HashMap<K::Value, V::Value>, +) -> ProtobufResult<()> +where + K: ProtobufType, + V: ProtobufType, + K::Value: Eq + Hash + Default, + V::Value: Default, +{ + if wire_type != WireType::WireTypeLengthDelimited { + return Err(unexpected_wire_type(wire_type)); + } + + let mut key = Default::default(); + let mut value = Default::default(); + + let len = is.read_raw_varint32()?; + let old_limit = is.push_limit(len as u64)?; + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + if wire_type != K::wire_type() { + return Err(unexpected_wire_type(wire_type)); + } + key = K::read(is)?; + } + 2 => { + if wire_type != V::wire_type() { + return Err(unexpected_wire_type(wire_type)); + } + value = V::read(is)?; + } + _ => is.skip_field(wire_type)?, + } + } + is.pop_limit(old_limit); + + target.insert(key, value); + + Ok(()) +} diff --git a/2.27.1/src/rust.rs b/2.27.1/src/rust.rs new file mode 100644 index 0000000..9d4995b --- /dev/null +++ b/2.27.1/src/rust.rs @@ -0,0 +1,121 @@ +#[cfg_attr(rustfmt, rustfmt_skip)] +static RUST_KEYWORDS: &'static [&'static str] = &[ + "as", + "async", + "await", + "break", + "crate", + "dyn", + "else", + "enum", + "extern", + "false", + "fn", + "for", + "if", + "impl", + "in", + "let", + "loop", + "match", + "mod", + "move", + "mut", + "pub", + "ref", + "return", + "static", + "self", + "Self", + "struct", + "super", + "true", + "trait", + "type", + "unsafe", + "use", + "while", + "continue", + "box", + "const", + "where", + "virtual", + "proc", + "alignof", + "become", + "offsetof", + "priv", + "pure", + "sizeof", + "typeof", + "unsized", + "yield", + "do", + "abstract", + "final", + "override", + "macro", +]; + +pub fn is_rust_keyword(ident: &str) -> bool { + RUST_KEYWORDS.contains(&ident) +} + +fn hex_digit(value: u32) -> char { + if value < 10 { + (b'0' + value as u8) as char + } else if value < 0x10 { + (b'a' + value as u8 - 10) as char + } else { + unreachable!() + } +} + +pub fn quote_escape_str(s: &str) -> String { + let mut buf = String::new(); + buf.push('"'); + buf.extend(s.chars().flat_map(|c| c.escape_default())); + buf.push('"'); + buf +} + +pub fn quote_escape_bytes(bytes: &[u8]) -> String { + let mut buf = String::new(); + buf.push('b'); + buf.push('"'); + for &b in bytes { + match b { + b'\n' => buf.push_str(r"\n"), + b'\r' => buf.push_str(r"\r"), + b'\t' => buf.push_str(r"\t"), + b'"' => buf.push_str("\\\""), + b'\\' => buf.push_str(r"\\"), + b'\x20'..=b'\x7e' => buf.push(b as char), + _ => { + buf.push_str(r"\x"); + buf.push(hex_digit((b as u32) >> 4)); + buf.push(hex_digit((b as u32) & 0x0f)); + } + } + } + buf.push('"'); + buf +} + +#[cfg(test)] +mod test { + + use super::*; + + #[test] + fn test_quote_escape_bytes() { + assert_eq!("b\"\"", quote_escape_bytes(b"")); + assert_eq!("b\"xyZW\"", quote_escape_bytes(b"xyZW")); + assert_eq!("b\"aa\\\"bb\"", quote_escape_bytes(b"aa\"bb")); + assert_eq!("b\"aa\\r\\n\\tbb\"", quote_escape_bytes(b"aa\r\n\tbb")); + assert_eq!( + "b\"\\x00\\x01\\x12\\xfe\\xff\"", + quote_escape_bytes(b"\x00\x01\x12\xfe\xff") + ); + } +} diff --git a/2.27.1/src/rustproto.rs b/2.27.1/src/rustproto.rs new file mode 100644 index 0000000..75df067 --- /dev/null +++ b/2.27.1/src/rustproto.rs @@ -0,0 +1,203 @@ +// This file is generated by rust-protobuf 2.26.0. Do not edit +// @generated + +// https://github.com/rust-lang/rust-clippy/issues/702 +#![allow(unknown_lints)] +#![allow(clippy::all)] + +#![allow(unused_attributes)] +#![cfg_attr(rustfmt, rustfmt::skip)] + +#![allow(box_pointers)] +#![allow(dead_code)] +#![allow(missing_docs)] +#![allow(non_camel_case_types)] +#![allow(non_snake_case)] +#![allow(non_upper_case_globals)] +#![allow(trivial_casts)] +#![allow(unused_imports)] +#![allow(unused_results)] +//! Generated file from `rustproto.proto` + +/// Extension fields +pub mod exts { + + pub const expose_oneof_all: crate::ext::ExtFieldOptional<crate::descriptor::FileOptions, crate::types::ProtobufTypeBool> = crate::ext::ExtFieldOptional { field_number: 17001, phantom: ::std::marker::PhantomData }; + + pub const expose_fields_all: crate::ext::ExtFieldOptional<crate::descriptor::FileOptions, crate::types::ProtobufTypeBool> = crate::ext::ExtFieldOptional { field_number: 17003, phantom: ::std::marker::PhantomData }; + + pub const generate_accessors_all: crate::ext::ExtFieldOptional<crate::descriptor::FileOptions, crate::types::ProtobufTypeBool> = crate::ext::ExtFieldOptional { field_number: 17004, phantom: ::std::marker::PhantomData }; + + pub const carllerche_bytes_for_bytes_all: crate::ext::ExtFieldOptional<crate::descriptor::FileOptions, crate::types::ProtobufTypeBool> = crate::ext::ExtFieldOptional { field_number: 17011, phantom: ::std::marker::PhantomData }; + + pub const carllerche_bytes_for_string_all: crate::ext::ExtFieldOptional<crate::descriptor::FileOptions, crate::types::ProtobufTypeBool> = crate::ext::ExtFieldOptional { field_number: 17012, phantom: ::std::marker::PhantomData }; + + pub const serde_derive_all: crate::ext::ExtFieldOptional<crate::descriptor::FileOptions, crate::types::ProtobufTypeBool> = crate::ext::ExtFieldOptional { field_number: 17030, phantom: ::std::marker::PhantomData }; + + pub const serde_derive_cfg_all: crate::ext::ExtFieldOptional<crate::descriptor::FileOptions, crate::types::ProtobufTypeString> = crate::ext::ExtFieldOptional { field_number: 17031, phantom: ::std::marker::PhantomData }; + + pub const lite_runtime_all: crate::ext::ExtFieldOptional<crate::descriptor::FileOptions, crate::types::ProtobufTypeBool> = crate::ext::ExtFieldOptional { field_number: 17035, phantom: ::std::marker::PhantomData }; + + pub const expose_oneof: crate::ext::ExtFieldOptional<crate::descriptor::MessageOptions, crate::types::ProtobufTypeBool> = crate::ext::ExtFieldOptional { field_number: 17001, phantom: ::std::marker::PhantomData }; + + pub const expose_fields: crate::ext::ExtFieldOptional<crate::descriptor::MessageOptions, crate::types::ProtobufTypeBool> = crate::ext::ExtFieldOptional { field_number: 17003, phantom: ::std::marker::PhantomData }; + + pub const generate_accessors: crate::ext::ExtFieldOptional<crate::descriptor::MessageOptions, crate::types::ProtobufTypeBool> = crate::ext::ExtFieldOptional { field_number: 17004, phantom: ::std::marker::PhantomData }; + + pub const carllerche_bytes_for_bytes: crate::ext::ExtFieldOptional<crate::descriptor::MessageOptions, crate::types::ProtobufTypeBool> = crate::ext::ExtFieldOptional { field_number: 17011, phantom: ::std::marker::PhantomData }; + + pub const carllerche_bytes_for_string: crate::ext::ExtFieldOptional<crate::descriptor::MessageOptions, crate::types::ProtobufTypeBool> = crate::ext::ExtFieldOptional { field_number: 17012, phantom: ::std::marker::PhantomData }; + + pub const serde_derive: crate::ext::ExtFieldOptional<crate::descriptor::MessageOptions, crate::types::ProtobufTypeBool> = crate::ext::ExtFieldOptional { field_number: 17030, phantom: ::std::marker::PhantomData }; + + pub const serde_derive_cfg: crate::ext::ExtFieldOptional<crate::descriptor::MessageOptions, crate::types::ProtobufTypeString> = crate::ext::ExtFieldOptional { field_number: 17031, phantom: ::std::marker::PhantomData }; + + pub const expose_fields_field: crate::ext::ExtFieldOptional<crate::descriptor::FieldOptions, crate::types::ProtobufTypeBool> = crate::ext::ExtFieldOptional { field_number: 17003, phantom: ::std::marker::PhantomData }; + + pub const generate_accessors_field: crate::ext::ExtFieldOptional<crate::descriptor::FieldOptions, crate::types::ProtobufTypeBool> = crate::ext::ExtFieldOptional { field_number: 17004, phantom: ::std::marker::PhantomData }; + + pub const carllerche_bytes_for_bytes_field: crate::ext::ExtFieldOptional<crate::descriptor::FieldOptions, crate::types::ProtobufTypeBool> = crate::ext::ExtFieldOptional { field_number: 17011, phantom: ::std::marker::PhantomData }; + + pub const carllerche_bytes_for_string_field: crate::ext::ExtFieldOptional<crate::descriptor::FieldOptions, crate::types::ProtobufTypeBool> = crate::ext::ExtFieldOptional { field_number: 17012, phantom: ::std::marker::PhantomData }; + + pub const serde_rename_all: crate::ext::ExtFieldOptional<crate::descriptor::EnumOptions, crate::types::ProtobufTypeString> = crate::ext::ExtFieldOptional { field_number: 17032, phantom: ::std::marker::PhantomData }; +} + +static file_descriptor_proto_data: &'static [u8] = b"\ + \n\x0frustproto.proto\x12\trustproto\x1a\x20google/protobuf/descriptor.p\ + roto:H\n\x10expose_oneof_all\x18\xe9\x84\x01\x20\x01(\x08\x12\x1c.google\ + .protobuf.FileOptionsR\x0eexposeOneofAll:J\n\x11expose_fields_all\x18\ + \xeb\x84\x01\x20\x01(\x08\x12\x1c.google.protobuf.FileOptionsR\x0fexpose\ + FieldsAll:T\n\x16generate_accessors_all\x18\xec\x84\x01\x20\x01(\x08\x12\ + \x1c.google.protobuf.FileOptionsR\x14generateAccessorsAll:b\n\x1ecarller\ + che_bytes_for_bytes_all\x18\xf3\x84\x01\x20\x01(\x08\x12\x1c.google.prot\ + obuf.FileOptionsR\x1acarllercheBytesForBytesAll:d\n\x1fcarllerche_bytes_\ + for_string_all\x18\xf4\x84\x01\x20\x01(\x08\x12\x1c.google.protobuf.File\ + OptionsR\x1bcarllercheBytesForStringAll:H\n\x10serde_derive_all\x18\x86\ + \x85\x01\x20\x01(\x08\x12\x1c.google.protobuf.FileOptionsR\x0eserdeDeriv\ + eAll:O\n\x14serde_derive_cfg_all\x18\x87\x85\x01\x20\x01(\t\x12\x1c.goog\ + le.protobuf.FileOptionsR\x11serdeDeriveCfgAll:H\n\x10lite_runtime_all\ + \x18\x8b\x85\x01\x20\x01(\x08\x12\x1c.google.protobuf.FileOptionsR\x0eli\ + teRuntimeAll:D\n\x0cexpose_oneof\x18\xe9\x84\x01\x20\x01(\x08\x12\x1f.go\ + ogle.protobuf.MessageOptionsR\x0bexposeOneof:F\n\rexpose_fields\x18\xeb\ + \x84\x01\x20\x01(\x08\x12\x1f.google.protobuf.MessageOptionsR\x0cexposeF\ + ields:P\n\x12generate_accessors\x18\xec\x84\x01\x20\x01(\x08\x12\x1f.goo\ + gle.protobuf.MessageOptionsR\x11generateAccessors:^\n\x1acarllerche_byte\ + s_for_bytes\x18\xf3\x84\x01\x20\x01(\x08\x12\x1f.google.protobuf.Message\ + OptionsR\x17carllercheBytesForBytes:`\n\x1bcarllerche_bytes_for_string\ + \x18\xf4\x84\x01\x20\x01(\x08\x12\x1f.google.protobuf.MessageOptionsR\ + \x18carllercheBytesForString:D\n\x0cserde_derive\x18\x86\x85\x01\x20\x01\ + (\x08\x12\x1f.google.protobuf.MessageOptionsR\x0bserdeDerive:K\n\x10serd\ + e_derive_cfg\x18\x87\x85\x01\x20\x01(\t\x12\x1f.google.protobuf.MessageO\ + ptionsR\x0eserdeDeriveCfg:O\n\x13expose_fields_field\x18\xeb\x84\x01\x20\ + \x01(\x08\x12\x1d.google.protobuf.FieldOptionsR\x11exposeFieldsField:Y\n\ + \x18generate_accessors_field\x18\xec\x84\x01\x20\x01(\x08\x12\x1d.google\ + .protobuf.FieldOptionsR\x16generateAccessorsField:g\n\x20carllerche_byte\ + s_for_bytes_field\x18\xf3\x84\x01\x20\x01(\x08\x12\x1d.google.protobuf.F\ + ieldOptionsR\x1ccarllercheBytesForBytesField:i\n!carllerche_bytes_for_st\ + ring_field\x18\xf4\x84\x01\x20\x01(\x08\x12\x1d.google.protobuf.FieldOpt\ + ionsR\x1dcarllercheBytesForStringField:H\n\x10serde_rename_all\x18\x88\ + \x85\x01\x20\x01(\t\x12\x1c.google.protobuf.EnumOptionsR\x0eserdeRenameA\ + llJ\xea\x14\n\x06\x12\x04\0\0<\x01\n\x08\n\x01\x0c\x12\x03\0\0\x12\n\t\n\ + \x02\x03\0\x12\x03\x02\0*\nh\n\x01\x02\x12\x03\x07\0\x122^\x20see\x20htt\ + ps://github.com/gogo/protobuf/blob/master/gogoproto/gogo.proto\n\x20for\ + \x20the\x20original\x20idea\n\n\t\n\x01\x07\x12\x04\t\0\x1b\x01\n7\n\x02\ + \x07\0\x12\x03\x0b\x04+\x1a,\x20When\x20true,\x20oneof\x20field\x20is\ + \x20generated\x20public\n\n\n\n\x03\x07\0\x02\x12\x03\t\x07\"\n\n\n\x03\ + \x07\0\x04\x12\x03\x0b\x04\x0c\n\n\n\x03\x07\0\x05\x12\x03\x0b\r\x11\n\n\ + \n\x03\x07\0\x01\x12\x03\x0b\x12\"\n\n\n\x03\x07\0\x03\x12\x03\x0b%*\nI\ + \n\x02\x07\x01\x12\x03\r\x04,\x1a>\x20When\x20true\x20all\x20fields\x20a\ + re\x20public,\x20and\x20not\x20accessors\x20generated\n\n\n\n\x03\x07\ + \x01\x02\x12\x03\t\x07\"\n\n\n\x03\x07\x01\x04\x12\x03\r\x04\x0c\n\n\n\ + \x03\x07\x01\x05\x12\x03\r\r\x11\n\n\n\x03\x07\x01\x01\x12\x03\r\x12#\n\ + \n\n\x03\x07\x01\x03\x12\x03\r&+\nP\n\x02\x07\x02\x12\x03\x0f\x041\x1aE\ + \x20When\x20false,\x20`get_`,\x20`set_`,\x20`mut_`\x20etc.\x20accessors\ + \x20are\x20not\x20generated\n\n\n\n\x03\x07\x02\x02\x12\x03\t\x07\"\n\n\ + \n\x03\x07\x02\x04\x12\x03\x0f\x04\x0c\n\n\n\x03\x07\x02\x05\x12\x03\x0f\ + \r\x11\n\n\n\x03\x07\x02\x01\x12\x03\x0f\x12(\n\n\n\x03\x07\x02\x03\x12\ + \x03\x0f+0\n2\n\x02\x07\x03\x12\x03\x11\x049\x1a'\x20Use\x20`bytes::Byte\ + s`\x20for\x20`bytes`\x20fields\n\n\n\n\x03\x07\x03\x02\x12\x03\t\x07\"\n\ + \n\n\x03\x07\x03\x04\x12\x03\x11\x04\x0c\n\n\n\x03\x07\x03\x05\x12\x03\ + \x11\r\x11\n\n\n\x03\x07\x03\x01\x12\x03\x11\x120\n\n\n\x03\x07\x03\x03\ + \x12\x03\x1138\n3\n\x02\x07\x04\x12\x03\x13\x04:\x1a(\x20Use\x20`bytes::\ + Bytes`\x20for\x20`string`\x20fields\n\n\n\n\x03\x07\x04\x02\x12\x03\t\ + \x07\"\n\n\n\x03\x07\x04\x04\x12\x03\x13\x04\x0c\n\n\n\x03\x07\x04\x05\ + \x12\x03\x13\r\x11\n\n\n\x03\x07\x04\x01\x12\x03\x13\x121\n\n\n\x03\x07\ + \x04\x03\x12\x03\x1349\nJ\n\x02\x07\x05\x12\x03\x15\x04+\x1a?\x20Use\x20\ + `serde_derive`\x20to\x20implement\x20`Serialize`\x20and\x20`Deserialize`\ + \n\n\n\n\x03\x07\x05\x02\x12\x03\t\x07\"\n\n\n\x03\x07\x05\x04\x12\x03\ + \x15\x04\x0c\n\n\n\x03\x07\x05\x05\x12\x03\x15\r\x11\n\n\n\x03\x07\x05\ + \x01\x12\x03\x15\x12\"\n\n\n\x03\x07\x05\x03\x12\x03\x15%*\n3\n\x02\x07\ + \x06\x12\x03\x17\x041\x1a(\x20Guard\x20serde\x20annotations\x20with\x20c\ + fg\x20attr.\n\n\n\n\x03\x07\x06\x02\x12\x03\t\x07\"\n\n\n\x03\x07\x06\ + \x04\x12\x03\x17\x04\x0c\n\n\n\x03\x07\x06\x05\x12\x03\x17\r\x13\n\n\n\ + \x03\x07\x06\x01\x12\x03\x17\x14(\n\n\n\x03\x07\x06\x03\x12\x03\x17+0\nN\ + \n\x02\x07\x07\x12\x03\x1a\x04+\x1aC\x20When\x20true,\x20will\x20only\ + \x20generate\x20codes\x20that\x20works\x20with\x20lite\x20runtime.\n\n\n\ + \n\x03\x07\x07\x02\x12\x03\t\x07\"\n\n\n\x03\x07\x07\x04\x12\x03\x1a\x04\ + \x0c\n\n\n\x03\x07\x07\x05\x12\x03\x1a\r\x11\n\n\n\x03\x07\x07\x01\x12\ + \x03\x1a\x12\"\n\n\n\x03\x07\x07\x03\x12\x03\x1a%*\n\t\n\x01\x07\x12\x04\ + \x1d\0,\x01\n7\n\x02\x07\x08\x12\x03\x1f\x04'\x1a,\x20When\x20true,\x20o\ + neof\x20field\x20is\x20generated\x20public\n\n\n\n\x03\x07\x08\x02\x12\ + \x03\x1d\x07%\n\n\n\x03\x07\x08\x04\x12\x03\x1f\x04\x0c\n\n\n\x03\x07\ + \x08\x05\x12\x03\x1f\r\x11\n\n\n\x03\x07\x08\x01\x12\x03\x1f\x12\x1e\n\n\ + \n\x03\x07\x08\x03\x12\x03\x1f!&\nI\n\x02\x07\t\x12\x03!\x04(\x1a>\x20Wh\ + en\x20true\x20all\x20fields\x20are\x20public,\x20and\x20not\x20accessors\ + \x20generated\n\n\n\n\x03\x07\t\x02\x12\x03\x1d\x07%\n\n\n\x03\x07\t\x04\ + \x12\x03!\x04\x0c\n\n\n\x03\x07\t\x05\x12\x03!\r\x11\n\n\n\x03\x07\t\x01\ + \x12\x03!\x12\x1f\n\n\n\x03\x07\t\x03\x12\x03!\"'\nP\n\x02\x07\n\x12\x03\ + #\x04-\x1aE\x20When\x20false,\x20`get_`,\x20`set_`,\x20`mut_`\x20etc.\ + \x20accessors\x20are\x20not\x20generated\n\n\n\n\x03\x07\n\x02\x12\x03\ + \x1d\x07%\n\n\n\x03\x07\n\x04\x12\x03#\x04\x0c\n\n\n\x03\x07\n\x05\x12\ + \x03#\r\x11\n\n\n\x03\x07\n\x01\x12\x03#\x12$\n\n\n\x03\x07\n\x03\x12\ + \x03#',\n2\n\x02\x07\x0b\x12\x03%\x045\x1a'\x20Use\x20`bytes::Bytes`\x20\ + for\x20`bytes`\x20fields\n\n\n\n\x03\x07\x0b\x02\x12\x03\x1d\x07%\n\n\n\ + \x03\x07\x0b\x04\x12\x03%\x04\x0c\n\n\n\x03\x07\x0b\x05\x12\x03%\r\x11\n\ + \n\n\x03\x07\x0b\x01\x12\x03%\x12,\n\n\n\x03\x07\x0b\x03\x12\x03%/4\n3\n\ + \x02\x07\x0c\x12\x03'\x046\x1a(\x20Use\x20`bytes::Bytes`\x20for\x20`stri\ + ng`\x20fields\n\n\n\n\x03\x07\x0c\x02\x12\x03\x1d\x07%\n\n\n\x03\x07\x0c\ + \x04\x12\x03'\x04\x0c\n\n\n\x03\x07\x0c\x05\x12\x03'\r\x11\n\n\n\x03\x07\ + \x0c\x01\x12\x03'\x12-\n\n\n\x03\x07\x0c\x03\x12\x03'05\nJ\n\x02\x07\r\ + \x12\x03)\x04'\x1a?\x20Use\x20`serde_derive`\x20to\x20implement\x20`Seri\ + alize`\x20and\x20`Deserialize`\n\n\n\n\x03\x07\r\x02\x12\x03\x1d\x07%\n\ + \n\n\x03\x07\r\x04\x12\x03)\x04\x0c\n\n\n\x03\x07\r\x05\x12\x03)\r\x11\n\ + \n\n\x03\x07\r\x01\x12\x03)\x12\x1e\n\n\n\x03\x07\r\x03\x12\x03)!&\n3\n\ + \x02\x07\x0e\x12\x03+\x04-\x1a(\x20Guard\x20serde\x20annotations\x20with\ + \x20cfg\x20attr.\n\n\n\n\x03\x07\x0e\x02\x12\x03\x1d\x07%\n\n\n\x03\x07\ + \x0e\x04\x12\x03+\x04\x0c\n\n\n\x03\x07\x0e\x05\x12\x03+\r\x13\n\n\n\x03\ + \x07\x0e\x01\x12\x03+\x14$\n\n\n\x03\x07\x0e\x03\x12\x03+',\n\t\n\x01\ + \x07\x12\x04.\07\x01\nI\n\x02\x07\x0f\x12\x030\x04.\x1a>\x20When\x20true\ + \x20all\x20fields\x20are\x20public,\x20and\x20not\x20accessors\x20genera\ + ted\n\n\n\n\x03\x07\x0f\x02\x12\x03.\x07#\n\n\n\x03\x07\x0f\x04\x12\x030\ + \x04\x0c\n\n\n\x03\x07\x0f\x05\x12\x030\r\x11\n\n\n\x03\x07\x0f\x01\x12\ + \x030\x12%\n\n\n\x03\x07\x0f\x03\x12\x030(-\nP\n\x02\x07\x10\x12\x032\ + \x043\x1aE\x20When\x20false,\x20`get_`,\x20`set_`,\x20`mut_`\x20etc.\x20\ + accessors\x20are\x20not\x20generated\n\n\n\n\x03\x07\x10\x02\x12\x03.\ + \x07#\n\n\n\x03\x07\x10\x04\x12\x032\x04\x0c\n\n\n\x03\x07\x10\x05\x12\ + \x032\r\x11\n\n\n\x03\x07\x10\x01\x12\x032\x12*\n\n\n\x03\x07\x10\x03\ + \x12\x032-2\n2\n\x02\x07\x11\x12\x034\x04;\x1a'\x20Use\x20`bytes::Bytes`\ + \x20for\x20`bytes`\x20fields\n\n\n\n\x03\x07\x11\x02\x12\x03.\x07#\n\n\n\ + \x03\x07\x11\x04\x12\x034\x04\x0c\n\n\n\x03\x07\x11\x05\x12\x034\r\x11\n\ + \n\n\x03\x07\x11\x01\x12\x034\x122\n\n\n\x03\x07\x11\x03\x12\x0345:\n3\n\ + \x02\x07\x12\x12\x036\x04<\x1a(\x20Use\x20`bytes::Bytes`\x20for\x20`stri\ + ng`\x20fields\n\n\n\n\x03\x07\x12\x02\x12\x03.\x07#\n\n\n\x03\x07\x12\ + \x04\x12\x036\x04\x0c\n\n\n\x03\x07\x12\x05\x12\x036\r\x11\n\n\n\x03\x07\ + \x12\x01\x12\x036\x123\n\n\n\x03\x07\x12\x03\x12\x0366;\n\t\n\x01\x07\ + \x12\x049\0<\x01\n/\n\x02\x07\x13\x12\x03;\x04-\x1a$\x20use\x20rename_al\ + l\x20attribute\x20for\x20serde\n\n\n\n\x03\x07\x13\x02\x12\x039\x07\"\n\ + \n\n\x03\x07\x13\x04\x12\x03;\x04\x0c\n\n\n\x03\x07\x13\x05\x12\x03;\r\ + \x13\n\n\n\x03\x07\x13\x01\x12\x03;\x14$\n\n\n\x03\x07\x13\x03\x12\x03;'\ + ,\ +"; + +static file_descriptor_proto_lazy: crate::rt::LazyV2<crate::descriptor::FileDescriptorProto> = crate::rt::LazyV2::INIT; + +fn parse_descriptor_proto() -> crate::descriptor::FileDescriptorProto { + crate::Message::parse_from_bytes(file_descriptor_proto_data).unwrap() +} + +pub fn file_descriptor_proto() -> &'static crate::descriptor::FileDescriptorProto { + file_descriptor_proto_lazy.get(|| { + parse_descriptor_proto() + }) +} diff --git a/2.27.1/src/singular.rs b/2.27.1/src/singular.rs new file mode 100644 index 0000000..1b7e28d --- /dev/null +++ b/2.27.1/src/singular.rs @@ -0,0 +1,594 @@ +use std::default::Default; +use std::fmt; +use std::hash::Hash; +use std::hash::Hasher; +use std::mem; +use std::option; + +#[cfg(feature = "with-serde")] +use serde; + +use crate::clear::Clear; + +/// Like `Option<T>`, but keeps the actual element on `clear`. +pub struct SingularField<T> { + value: T, + set: bool, +} + +/// Like `Option<Box<T>>`, but keeps the actual element on `clear`. +pub struct SingularPtrField<T> { + value: Option<Box<T>>, + set: bool, +} + +impl<T> SingularField<T> { + /// Construct this object from given value. + #[inline] + pub fn some(value: T) -> SingularField<T> { + SingularField { + value: value, + set: true, + } + } + + /// True iff this object contains data. + #[inline] + pub fn is_some(&self) -> bool { + self.set + } + + /// True iff this object contains no data. + #[inline] + pub fn is_none(&self) -> bool { + !self.is_some() + } + + /// Convert this object into `Option`. + #[inline] + pub fn into_option(self) -> Option<T> { + if self.set { + Some(self.value) + } else { + None + } + } + + /// View data as `Option`. + #[inline] + pub fn as_ref<'a>(&'a self) -> Option<&'a T> { + if self.set { + Some(&self.value) + } else { + None + } + } + + /// View data as mutable `Option`. + #[inline] + pub fn as_mut<'a>(&'a mut self) -> Option<&'a mut T> { + if self.set { + Some(&mut self.value) + } else { + None + } + } + + /// Unwrap data as reference. + #[inline] + pub fn unwrap_ref<'a>(&'a self) -> &'a T { + self.as_ref().unwrap() + } + + /// Unwrap data as mutable reference. + #[inline] + pub fn unwrap_mut_ref<'a>(&'a mut self) -> &'a mut T { + self.as_mut().unwrap() + } + + /// Unwrap data, panic if not set. + #[inline] + pub fn unwrap(self) -> T { + if self.set { + self.value + } else { + panic!(); + } + } + + /// Unwrap data or return given default value. + #[inline] + pub fn unwrap_or(self, def: T) -> T { + if self.set { + self.value + } else { + def + } + } + + /// Unwrap data or return given default value. + #[inline] + pub fn unwrap_or_else<F>(self, f: F) -> T + where + F: FnOnce() -> T, + { + if self.set { + self.value + } else { + f() + } + } + + /// Apply a function to contained element and store result in new `SingularPtrField`. + #[inline] + pub fn map<U, F>(self, f: F) -> SingularPtrField<U> + where + F: FnOnce(T) -> U, + { + SingularPtrField::from_option(self.into_option().map(f)) + } + + /// View as iterator over references. + #[inline] + pub fn iter<'a>(&'a self) -> option::IntoIter<&'a T> { + self.as_ref().into_iter() + } + + /// View as iterator over mutable references. + #[inline] + pub fn mut_iter<'a>(&'a mut self) -> option::IntoIter<&'a mut T> { + self.as_mut().into_iter() + } + + /// Clear this object. + /// Note, contained object destructor is not called, so allocated memory could be reused. + #[inline] + pub fn clear(&mut self) { + self.set = false; + } +} + +impl<T: Default> SingularField<T> { + /// Construct a `SingularField` with no data. + #[inline] + pub fn none() -> SingularField<T> { + SingularField { + value: Default::default(), + set: false, + } + } + + /// Construct `SingularField` from `Option`. + #[inline] + pub fn from_option(option: Option<T>) -> SingularField<T> { + match option { + Some(x) => SingularField::some(x), + None => SingularField::none(), + } + } + + /// Return data as option, clear this object. + #[inline] + pub fn take(&mut self) -> Option<T> { + if self.set { + self.set = false; + Some(mem::replace(&mut self.value, Default::default())) + } else { + None + } + } +} + +impl<T> SingularPtrField<T> { + /// Construct `SingularPtrField` from given object. + #[inline] + pub fn some(value: T) -> SingularPtrField<T> { + SingularPtrField { + value: Some(Box::new(value)), + set: true, + } + } + + /// Construct an empty `SingularPtrField`. + #[inline] + pub fn none() -> SingularPtrField<T> { + SingularPtrField { + value: None, + set: false, + } + } + + /// Construct `SingularPtrField` from optional. + #[inline] + pub fn from_option(option: Option<T>) -> SingularPtrField<T> { + match option { + Some(x) => SingularPtrField::some(x), + None => SingularPtrField::none(), + } + } + + /// True iff this object contains data. + #[inline] + pub fn is_some(&self) -> bool { + self.set + } + + /// True iff this object contains no data. + #[inline] + pub fn is_none(&self) -> bool { + !self.is_some() + } + + /// Convert into `Option<T>`. + #[inline] + pub fn into_option(self) -> Option<T> { + if self.set { + Some(*self.value.unwrap()) + } else { + None + } + } + + /// View data as reference option. + #[inline] + pub fn as_ref<'a>(&'a self) -> Option<&'a T> { + if self.set { + Some(&**self.value.as_ref().unwrap()) + } else { + None + } + } + + /// View data as mutable reference option. + #[inline] + pub fn as_mut<'a>(&'a mut self) -> Option<&'a mut T> { + if self.set { + Some(&mut **self.value.as_mut().unwrap()) + } else { + None + } + } + + /// Get data as reference. + /// Panics if empty. + #[inline] + pub fn get_ref<'a>(&'a self) -> &'a T { + self.as_ref().unwrap() + } + + /// Get data as mutable reference. + /// Panics if empty. + #[inline] + pub fn get_mut_ref<'a>(&'a mut self) -> &'a mut T { + self.as_mut().unwrap() + } + + /// Take the data. + /// Panics if empty + #[inline] + pub fn unwrap(self) -> T { + if self.set { + *self.value.unwrap() + } else { + panic!(); + } + } + + /// Take the data or return supplied default element if empty. + #[inline] + pub fn unwrap_or(self, def: T) -> T { + if self.set { + *self.value.unwrap() + } else { + def + } + } + + /// Take the data or return supplied default element if empty. + #[inline] + pub fn unwrap_or_else<F>(self, f: F) -> T + where + F: FnOnce() -> T, + { + if self.set { + *self.value.unwrap() + } else { + f() + } + } + + /// Apply given function to contained data to construct another `SingularPtrField`. + /// Returns empty `SingularPtrField` if this object is empty. + #[inline] + pub fn map<U, F>(self, f: F) -> SingularPtrField<U> + where + F: FnOnce(T) -> U, + { + SingularPtrField::from_option(self.into_option().map(f)) + } + + /// View data as iterator. + #[inline] + pub fn iter<'a>(&'a self) -> option::IntoIter<&'a T> { + self.as_ref().into_iter() + } + + /// View data as mutable iterator. + #[inline] + pub fn mut_iter<'a>(&'a mut self) -> option::IntoIter<&'a mut T> { + self.as_mut().into_iter() + } + + /// Take data as option, leaving this object empty. + #[inline] + pub fn take(&mut self) -> Option<T> { + if self.set { + self.set = false; + Some(*self.value.take().unwrap()) + } else { + None + } + } + + /// Clear this object, but do not call destructor of underlying data. + #[inline] + pub fn clear(&mut self) { + self.set = false; + } +} + +impl<T: Default + Clear> SingularField<T> { + /// Get contained data, consume self. Return default value for type if this is empty. + #[inline] + pub fn unwrap_or_default(mut self) -> T { + if !self.set { + self.value.clear(); + } + self.value + } + + /// Initialize this object with default value. + /// This operation can be more efficient then construction of clear element, + /// because it may reuse previously contained object. + #[inline] + pub fn set_default<'a>(&'a mut self) -> &'a mut T { + self.set = true; + self.value.clear(); + &mut self.value + } +} + +impl<T: Default + Clear> SingularPtrField<T> { + /// Get contained data, consume self. Return default value for type if this is empty. + #[inline] + pub fn unwrap_or_default(mut self) -> T { + if self.set { + self.unwrap() + } else if self.value.is_some() { + self.value.clear(); + *self.value.unwrap() + } else { + Default::default() + } + } + + /// Initialize this object with default value. + /// This operation can be more efficient then construction of clear element, + /// because it may reuse previously contained object. + #[inline] + pub fn set_default<'a>(&'a mut self) -> &'a mut T { + self.set = true; + if self.value.is_some() { + self.value.as_mut().unwrap().clear(); + } else { + self.value = Some(Default::default()); + } + self.as_mut().unwrap() + } +} + +impl<T: Default> Default for SingularField<T> { + #[inline] + fn default() -> SingularField<T> { + SingularField::none() + } +} + +impl<T> Default for SingularPtrField<T> { + #[inline] + fn default() -> SingularPtrField<T> { + SingularPtrField::none() + } +} + +impl<T: Default> From<Option<T>> for SingularField<T> { + fn from(o: Option<T>) -> Self { + SingularField::from_option(o) + } +} + +impl<T> From<Option<T>> for SingularPtrField<T> { + fn from(o: Option<T>) -> Self { + SingularPtrField::from_option(o) + } +} + +impl<T: Clone + Default> Clone for SingularField<T> { + #[inline] + fn clone(&self) -> SingularField<T> { + if self.set { + SingularField::some(self.value.clone()) + } else { + SingularField::none() + } + } +} + +impl<T: Clone> Clone for SingularPtrField<T> { + #[inline] + fn clone(&self) -> SingularPtrField<T> { + if self.set { + SingularPtrField::some(self.as_ref().unwrap().clone()) + } else { + SingularPtrField::none() + } + } +} + +impl<T: fmt::Debug> fmt::Debug for SingularField<T> { + #[inline] + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + if self.is_some() { + write!(f, "Some({:?})", *self.as_ref().unwrap()) + } else { + write!(f, "None") + } + } +} + +impl<T: fmt::Debug> fmt::Debug for SingularPtrField<T> { + #[inline] + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + if self.is_some() { + write!(f, "Some({:?})", *self.as_ref().unwrap()) + } else { + write!(f, "None") + } + } +} + +impl<T: PartialEq> PartialEq for SingularField<T> { + #[inline] + fn eq(&self, other: &SingularField<T>) -> bool { + self.as_ref() == other.as_ref() + } +} + +impl<T: Eq> Eq for SingularField<T> {} + +impl<T: PartialEq> PartialEq for SingularPtrField<T> { + #[inline] + fn eq(&self, other: &SingularPtrField<T>) -> bool { + self.as_ref() == other.as_ref() + } +} + +impl<T: Eq> Eq for SingularPtrField<T> {} + +impl<T: Hash> Hash for SingularField<T> { + fn hash<H: Hasher>(&self, state: &mut H) { + self.as_ref().hash(state); + } +} + +impl<T: Hash> Hash for SingularPtrField<T> { + fn hash<H: Hasher>(&self, state: &mut H) { + self.as_ref().hash(state); + } +} + +impl<'a, T> IntoIterator for &'a SingularField<T> { + type Item = &'a T; + type IntoIter = option::IntoIter<&'a T>; + + fn into_iter(self) -> option::IntoIter<&'a T> { + self.iter() + } +} + +impl<'a, T> IntoIterator for &'a SingularPtrField<T> { + type Item = &'a T; + type IntoIter = option::IntoIter<&'a T>; + + fn into_iter(self) -> option::IntoIter<&'a T> { + self.iter() + } +} + +#[cfg(feature = "with-serde")] +impl<T: serde::Serialize> serde::Serialize for SingularPtrField<T> { + fn serialize<S>( + &self, + serializer: S, + ) -> Result<<S as serde::Serializer>::Ok, <S as serde::Serializer>::Error> + where + S: serde::Serializer, + { + self.as_ref().serialize(serializer) + } +} + +#[cfg(feature = "with-serde")] +impl<T: serde::Serialize> serde::Serialize for SingularField<T> { + fn serialize<S>( + &self, + serializer: S, + ) -> Result<<S as serde::Serializer>::Ok, <S as serde::Serializer>::Error> + where + S: serde::Serializer, + { + self.as_ref().serialize(serializer) + } +} + +#[cfg(feature = "with-serde")] +impl<'de, T: serde::Deserialize<'de>> serde::Deserialize<'de> for SingularPtrField<T> { + fn deserialize<D>(deserializer: D) -> Result<Self, <D as serde::Deserializer<'de>>::Error> + where + D: serde::Deserializer<'de>, + { + Option::deserialize(deserializer).map(SingularPtrField::from_option) + } +} + +#[cfg(feature = "with-serde")] +impl<'de, T: serde::Deserialize<'de> + Default> serde::Deserialize<'de> for SingularField<T> { + fn deserialize<D>(deserializer: D) -> Result<Self, <D as serde::Deserializer<'de>>::Error> + where + D: serde::Deserializer<'de>, + { + Option::deserialize(deserializer).map(SingularField::from_option) + } +} + +#[cfg(test)] +mod test { + use super::SingularField; + use crate::clear::Clear; + + #[test] + fn test_set_default_clears() { + #[derive(Default)] + struct Foo { + b: isize, + } + + impl Clear for Foo { + fn clear(&mut self) { + self.b = 0; + } + } + + let mut x = SingularField::some(Foo { b: 10 }); + x.clear(); + x.set_default(); + assert_eq!(0, x.as_ref().unwrap().b); + + x.as_mut().unwrap().b = 11; + // without clear + x.set_default(); + assert_eq!(0, x.as_ref().unwrap().b); + } + + #[test] + fn unwrap_or_default() { + assert_eq!( + "abc", + SingularField::some("abc".to_owned()).unwrap_or_default() + ); + assert_eq!("", SingularField::<String>::none().unwrap_or_default()); + let mut some = SingularField::some("abc".to_owned()); + some.clear(); + assert_eq!("", some.unwrap_or_default()); + } +} diff --git a/2.27.1/src/strx.rs b/2.27.1/src/strx.rs new file mode 100644 index 0000000..af09de2 --- /dev/null +++ b/2.27.1/src/strx.rs @@ -0,0 +1,34 @@ +pub fn remove_to<'s>(s: &'s str, c: char) -> &'s str { + match s.rfind(c) { + Some(pos) => &s[(pos + 1)..], + None => s, + } +} + +pub fn remove_suffix<'s>(s: &'s str, suffix: &str) -> &'s str { + if !s.ends_with(suffix) { + s + } else { + &s[..(s.len() - suffix.len())] + } +} + +#[cfg(test)] +mod test { + + use super::remove_suffix; + use super::remove_to; + + #[test] + fn test_remove_to() { + assert_eq!("aaa", remove_to("aaa", '.')); + assert_eq!("bbb", remove_to("aaa.bbb", '.')); + assert_eq!("ccc", remove_to("aaa.bbb.ccc", '.')); + } + + #[test] + fn test_remove_suffix() { + assert_eq!("bbb", remove_suffix("bbbaaa", "aaa")); + assert_eq!("aaa", remove_suffix("aaa", "bbb")); + } +} diff --git a/2.27.1/src/text_format/lexer/float.rs b/2.27.1/src/text_format/lexer/float.rs new file mode 100644 index 0000000..0d69c09 --- /dev/null +++ b/2.27.1/src/text_format/lexer/float.rs @@ -0,0 +1,58 @@ +use std::f64; + +#[derive(Debug)] +pub enum ProtobufFloatParseError { + EmptyString, + CannotParseFloat, +} + +pub type ProtobufFloatParseResult<T> = Result<T, ProtobufFloatParseError>; + +pub const PROTOBUF_NAN: &str = "nan"; +pub const PROTOBUF_INF: &str = "inf"; + +/// Format float as in protobuf `.proto` files +pub fn format_protobuf_float(f: f64) -> String { + if f.is_nan() { + PROTOBUF_NAN.to_owned() + } else if f.is_infinite() { + if f > 0.0 { + format!("{}", PROTOBUF_INF) + } else { + format!("-{}", PROTOBUF_INF) + } + } else { + // TODO: make sure doesn't lose precision + format!("{}", f) + } +} + +/// Parse float from `.proto` format +pub fn parse_protobuf_float(s: &str) -> ProtobufFloatParseResult<f64> { + if s.is_empty() { + return Err(ProtobufFloatParseError::EmptyString); + } + if s == PROTOBUF_NAN { + return Ok(f64::NAN); + } + if s == PROTOBUF_INF || s == format!("+{}", PROTOBUF_INF) { + return Ok(f64::INFINITY); + } + if s == format!("-{}", PROTOBUF_INF) { + return Ok(f64::NEG_INFINITY); + } + match s.parse() { + Ok(f) => Ok(f), + Err(_) => Err(ProtobufFloatParseError::CannotParseFloat), + } +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_format_protobuf_float() { + assert_eq!("10", format_protobuf_float(10.0)); + } +} diff --git a/2.27.1/src/text_format/lexer/json_number_lit.rs b/2.27.1/src/text_format/lexer/json_number_lit.rs new file mode 100644 index 0000000..6394b0e --- /dev/null +++ b/2.27.1/src/text_format/lexer/json_number_lit.rs @@ -0,0 +1,10 @@ +use std::fmt; + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct JsonNumberLit(pub(crate) String); + +impl fmt::Display for JsonNumberLit { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + fmt::Display::fmt(&self.0, f) + } +} diff --git a/2.27.1/src/text_format/lexer/lexer_impl.rs b/2.27.1/src/text_format/lexer/lexer_impl.rs new file mode 100644 index 0000000..ae9035a --- /dev/null +++ b/2.27.1/src/text_format/lexer/lexer_impl.rs @@ -0,0 +1,726 @@ +use std::char; +use std::convert::TryFrom; +use std::f64; +use std::fmt; +use std::num::ParseFloatError; +use std::num::ParseIntError; + +use super::float; +use super::loc::Loc; +use super::loc::FIRST_COL; +use super::str_lit::StrLit; +use super::str_lit::StrLitDecodeError; +use super::token::Token; +use super::token::TokenWithLocation; +use super::ParserLanguage; +use crate::text_format::lexer::JsonNumberLit; + +#[derive(Debug)] +pub enum LexerError { + IncorrectInput, // TODO: something better than this + UnexpectedEof, + ExpectChar(char), + ParseIntError, + ParseFloatError, + IncorrectFloatLit, // TODO: how it is different from ParseFloatError? + IncorrectJsonEscape, + IncorrectJsonNumber, + IncorrectUnicodeChar, + ExpectHexDigit, + ExpectOctDigit, + ExpectDecDigit, + StrLitDecodeError(StrLitDecodeError), + ExpectedIdent, +} + +impl fmt::Display for LexerError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + LexerError::IncorrectInput => write!(f, "Incorrect input"), + LexerError::UnexpectedEof => write!(f, "Unexpected EOF"), + LexerError::ExpectChar(c) => write!(f, "Expecting char: {}", c), + LexerError::ParseIntError => write!(f, "Parse int error"), + LexerError::ParseFloatError => write!(f, "Parse float error"), + LexerError::IncorrectFloatLit => write!(f, "Incorrect float literal"), + LexerError::IncorrectJsonEscape => write!(f, "Incorrect JSON escape"), + LexerError::IncorrectJsonNumber => write!(f, "Incorrect JSON number"), + LexerError::IncorrectUnicodeChar => write!(f, "Incorrect Unicode char"), + LexerError::ExpectHexDigit => write!(f, "Expecting hex digit"), + LexerError::ExpectOctDigit => write!(f, "Expecting oct digit"), + LexerError::ExpectDecDigit => write!(f, "Expecting dec digit"), + LexerError::StrLitDecodeError(e) => write!(f, "{}", e), + LexerError::ExpectedIdent => write!(f, "Expecting identifier"), + } + } +} + +impl std::error::Error for LexerError {} + +pub type LexerResult<T> = Result<T, LexerError>; + +impl From<StrLitDecodeError> for LexerError { + fn from(e: StrLitDecodeError) -> Self { + LexerError::StrLitDecodeError(e) + } +} + +impl From<ParseIntError> for LexerError { + fn from(_: ParseIntError) -> Self { + LexerError::ParseIntError + } +} + +impl From<ParseFloatError> for LexerError { + fn from(_: ParseFloatError) -> Self { + LexerError::ParseFloatError + } +} + +impl From<float::ProtobufFloatParseError> for LexerError { + fn from(_: float::ProtobufFloatParseError) -> Self { + LexerError::IncorrectFloatLit + } +} + +#[derive(Copy, Clone)] +pub struct Lexer<'a> { + language: ParserLanguage, + input: &'a str, + pos: usize, + pub loc: Loc, +} + +fn is_letter(c: char) -> bool { + c.is_alphabetic() || c == '_' +} + +impl<'a> Lexer<'a> { + pub fn new(input: &'a str, language: ParserLanguage) -> Lexer<'a> { + Lexer { + language, + input, + pos: 0, + loc: Loc::start(), + } + } + + /// No more chars + pub fn eof(&self) -> bool { + self.pos == self.input.len() + } + + /// Remaining chars + fn rem_chars(&self) -> &'a str { + &self.input[self.pos..] + } + + pub fn lookahead_char_is<P: FnOnce(char) -> bool>(&self, p: P) -> bool { + self.lookahead_char().map_or(false, p) + } + + fn lookahead_char_is_in(&self, alphabet: &str) -> bool { + self.lookahead_char_is(|c| alphabet.contains(c)) + } + + fn next_char_opt(&mut self) -> Option<char> { + let rem = self.rem_chars(); + if rem.is_empty() { + None + } else { + let mut char_indices = rem.char_indices(); + let (_, c) = char_indices.next().unwrap(); + let c_len = char_indices.next().map(|(len, _)| len).unwrap_or(rem.len()); + self.pos += c_len; + if c == '\n' { + self.loc.line += 1; + self.loc.col = FIRST_COL; + } else { + self.loc.col += 1; + } + Some(c) + } + } + + fn next_char(&mut self) -> LexerResult<char> { + self.next_char_opt().ok_or(LexerError::UnexpectedEof) + } + + /// Skip whitespaces + fn skip_whitespaces(&mut self) { + self.take_while(|c| c.is_whitespace()); + } + + fn skip_c_comment(&mut self) -> LexerResult<()> { + if self.skip_if_lookahead_is_str("/*") { + let end = "*/"; + match self.rem_chars().find(end) { + None => Err(LexerError::UnexpectedEof), + Some(len) => { + let new_pos = self.pos + len + end.len(); + self.skip_to_pos(new_pos); + Ok(()) + } + } + } else { + Ok(()) + } + } + + fn skip_cpp_comment(&mut self) { + if self.skip_if_lookahead_is_str("//") { + loop { + match self.next_char_opt() { + Some('\n') | None => break, + _ => {} + } + } + } + } + + fn skip_sh_comment(&mut self) { + if self.skip_if_lookahead_is_str("#") { + loop { + match self.next_char_opt() { + Some('\n') | None => break, + _ => {} + } + } + } + } + + fn skip_comment(&mut self) -> LexerResult<()> { + match self.language { + ParserLanguage::Proto => { + self.skip_c_comment()?; + self.skip_cpp_comment(); + } + ParserLanguage::TextFormat => { + self.skip_sh_comment(); + } + ParserLanguage::Json => {} + } + Ok(()) + } + + pub fn skip_ws(&mut self) -> LexerResult<()> { + loop { + let pos = self.pos; + self.skip_whitespaces(); + self.skip_comment()?; + if pos == self.pos { + // Did not advance + return Ok(()); + } + } + } + + pub fn take_while<F>(&mut self, f: F) -> &'a str + where + F: Fn(char) -> bool, + { + let start = self.pos; + while self.lookahead_char().map(&f) == Some(true) { + self.next_char_opt().unwrap(); + } + let end = self.pos; + &self.input[start..end] + } + + fn lookahead_char(&self) -> Option<char> { + self.clone().next_char_opt() + } + + fn lookahead_is_str(&self, s: &str) -> bool { + self.rem_chars().starts_with(s) + } + + fn skip_if_lookahead_is_str(&mut self, s: &str) -> bool { + if self.lookahead_is_str(s) { + let new_pos = self.pos + s.len(); + self.skip_to_pos(new_pos); + true + } else { + false + } + } + + fn next_char_if<P>(&mut self, p: P) -> Option<char> + where + P: FnOnce(char) -> bool, + { + let mut clone = self.clone(); + match clone.next_char_opt() { + Some(c) if p(c) => { + *self = clone; + Some(c) + } + _ => None, + } + } + + pub fn next_char_if_eq(&mut self, expect: char) -> bool { + self.next_char_if(|c| c == expect) != None + } + + fn next_char_if_in(&mut self, alphabet: &str) -> Option<char> { + for c in alphabet.chars() { + if self.next_char_if_eq(c) { + return Some(c); + } + } + None + } + + fn next_char_expect_eq(&mut self, expect: char) -> LexerResult<()> { + if self.next_char_if_eq(expect) { + Ok(()) + } else { + Err(LexerError::ExpectChar(expect)) + } + } + + fn next_char_expect<P>(&mut self, expect: P, err: LexerError) -> LexerResult<char> + where + P: FnOnce(char) -> bool, + { + self.next_char_if(expect).ok_or(err) + } + + // str functions + + /// properly update line and column + fn skip_to_pos(&mut self, new_pos: usize) -> &'a str { + assert!(new_pos >= self.pos); + assert!(new_pos <= self.input.len()); + let pos = self.pos; + while self.pos != new_pos { + self.next_char_opt().unwrap(); + } + &self.input[pos..new_pos] + } + + // Protobuf grammar + + // char functions + + // letter = "A" … "Z" | "a" … "z" + // https://github.com/google/protobuf/issues/4565 + fn next_letter_opt(&mut self) -> Option<char> { + self.next_char_if(is_letter) + } + + // capitalLetter = "A" … "Z" + fn _next_capital_letter_opt(&mut self) -> Option<char> { + self.next_char_if(|c| c >= 'A' && c <= 'Z') + } + + fn next_ident_part(&mut self) -> Option<char> { + self.next_char_if(|c| c.is_ascii_alphanumeric() || c == '_') + } + + // Identifiers + + // ident = letter { letter | decimalDigit | "_" } + fn next_ident_opt(&mut self) -> LexerResult<Option<String>> { + if let Some(c) = self.next_letter_opt() { + let mut ident = String::new(); + ident.push(c); + while let Some(c) = self.next_ident_part() { + ident.push(c); + } + Ok(Some(ident)) + } else { + Ok(None) + } + } + + // Integer literals + + // hexLit = "0" ( "x" | "X" ) hexDigit { hexDigit } + fn next_hex_lit_opt(&mut self) -> LexerResult<Option<u64>> { + Ok( + if self.skip_if_lookahead_is_str("0x") || self.skip_if_lookahead_is_str("0X") { + let s = self.take_while(|c| c.is_ascii_hexdigit()); + Some(u64::from_str_radix(s, 16)? as u64) + } else { + None + }, + ) + } + + // decimalLit = ( "1" … "9" ) { decimalDigit } + // octalLit = "0" { octalDigit } + fn next_decimal_octal_lit_opt(&mut self) -> LexerResult<Option<u64>> { + // do not advance on number parse error + let mut clone = self.clone(); + + let pos = clone.pos; + + Ok(if clone.next_char_if(|c| c.is_ascii_digit()) != None { + clone.take_while(|c| c.is_ascii_digit()); + let value = clone.input[pos..clone.pos].parse()?; + *self = clone; + Some(value) + } else { + None + }) + } + + // hexDigit = "0" … "9" | "A" … "F" | "a" … "f" + fn next_hex_digit(&mut self) -> LexerResult<u32> { + let mut clone = self.clone(); + let r = match clone.next_char()? { + c if c >= '0' && c <= '9' => c as u32 - b'0' as u32, + c if c >= 'A' && c <= 'F' => c as u32 - b'A' as u32 + 10, + c if c >= 'a' && c <= 'f' => c as u32 - b'a' as u32 + 10, + _ => return Err(LexerError::ExpectHexDigit), + }; + *self = clone; + Ok(r) + } + + // octalDigit = "0" … "7" + fn next_octal_digit(&mut self) -> LexerResult<u32> { + self.next_char_expect(|c| c >= '0' && c <= '9', LexerError::ExpectOctDigit) + .map(|c| c as u32 - '0' as u32) + } + + // decimalDigit = "0" … "9" + fn next_decimal_digit(&mut self) -> LexerResult<u32> { + self.next_char_expect(|c| c >= '0' && c <= '9', LexerError::ExpectDecDigit) + .map(|c| c as u32 - '0' as u32) + } + + // decimals = decimalDigit { decimalDigit } + fn next_decimal_digits(&mut self) -> LexerResult<()> { + self.next_decimal_digit()?; + self.take_while(|c| c >= '0' && c <= '9'); + Ok(()) + } + + // intLit = decimalLit | octalLit | hexLit + pub fn next_int_lit_opt(&mut self) -> LexerResult<Option<u64>> { + assert_ne!(ParserLanguage::Json, self.language); + + self.skip_ws()?; + if let Some(i) = self.next_hex_lit_opt()? { + return Ok(Some(i)); + } + if let Some(i) = self.next_decimal_octal_lit_opt()? { + return Ok(Some(i)); + } + Ok(None) + } + + // Floating-point literals + + // exponent = ( "e" | "E" ) [ "+" | "-" ] decimals + fn next_exponent_opt(&mut self) -> LexerResult<Option<()>> { + if self.next_char_if_in("eE") != None { + self.next_char_if_in("+-"); + self.next_decimal_digits()?; + Ok(Some(())) + } else { + Ok(None) + } + } + + // floatLit = ( decimals "." [ decimals ] [ exponent ] | decimals exponent | "."decimals [ exponent ] ) | "inf" | "nan" + fn next_float_lit(&mut self) -> LexerResult<()> { + assert_ne!(ParserLanguage::Json, self.language); + + // "inf" and "nan" are handled as part of ident + if self.next_char_if_eq('.') { + self.next_decimal_digits()?; + self.next_exponent_opt()?; + } else { + self.next_decimal_digits()?; + if self.next_char_if_eq('.') { + self.next_decimal_digits()?; + self.next_exponent_opt()?; + } else { + if self.next_exponent_opt()? == None { + return Err(LexerError::IncorrectFloatLit); + } + } + } + Ok(()) + } + + // String literals + + // charValue = hexEscape | octEscape | charEscape | /[^\0\n\\]/ + // hexEscape = '\' ( "x" | "X" ) hexDigit hexDigit + // https://github.com/google/protobuf/issues/4560 + // octEscape = '\' octalDigit octalDigit octalDigit + // charEscape = '\' ( "a" | "b" | "f" | "n" | "r" | "t" | "v" | '\' | "'" | '"' ) + // quote = "'" | '"' + pub fn next_byte_value(&mut self) -> LexerResult<u8> { + match self.next_char()? { + '\\' => { + match self.next_char()? { + '\'' => Ok(b'\''), + '"' => Ok(b'"'), + '\\' => Ok(b'\\'), + 'a' => Ok(b'\x07'), + 'b' => Ok(b'\x08'), + 'f' => Ok(b'\x0c'), + 'n' => Ok(b'\n'), + 'r' => Ok(b'\r'), + 't' => Ok(b'\t'), + 'v' => Ok(b'\x0b'), + 'x' => { + let d1 = self.next_hex_digit()? as u8; + let d2 = self.next_hex_digit()? as u8; + Ok(((d1 << 4) | d2) as u8) + } + d if d >= '0' && d <= '7' => { + let mut r = d as u8 - b'0'; + for _ in 0..2 { + match self.next_octal_digit() { + Err(_) => break, + Ok(d) => r = (r << 3) + d as u8, + } + } + Ok(r) + } + // https://github.com/google/protobuf/issues/4562 + // TODO: overflow + c => Ok(c as u8), + } + } + '\n' | '\0' => Err(LexerError::IncorrectInput), + // TODO: check overflow + c => Ok(c as u8), + } + } + + fn char_try_from(i: u32) -> LexerResult<char> { + char::try_from(i).map_err(|_| LexerError::IncorrectUnicodeChar) + } + + pub fn next_json_char_value(&mut self) -> LexerResult<char> { + match self.next_char()? { + '\\' => match self.next_char()? { + '"' => Ok('"'), + '\'' => Ok('\''), + '\\' => Ok('\\'), + '/' => Ok('/'), + 'b' => Ok('\x08'), + 'f' => Ok('\x0c'), + 'n' => Ok('\n'), + 'r' => Ok('\r'), + 't' => Ok('\t'), + 'u' => { + let mut v = 0; + for _ in 0..4 { + let digit = self.next_hex_digit()?; + v = v * 16 + digit; + } + Self::char_try_from(v) + } + _ => Err(LexerError::IncorrectJsonEscape), + }, + c => Ok(c), + } + } + + // https://github.com/google/protobuf/issues/4564 + // strLit = ( "'" { charValue } "'" ) | ( '"' { charValue } '"' ) + fn next_str_lit_raw(&mut self) -> LexerResult<String> { + let mut raw = String::new(); + + let mut first = true; + loop { + if !first { + self.skip_ws()?; + } + + let start = self.pos; + + let q = match self.next_char_if_in("'\"") { + Some(q) => q, + None if !first => break, + None => return Err(LexerError::IncorrectInput), + }; + first = false; + while self.lookahead_char() != Some(q) { + self.next_byte_value()?; + } + self.next_char_expect_eq(q)?; + + raw.push_str(&self.input[start + 1..self.pos - 1]); + } + Ok(raw) + } + + fn next_str_lit_raw_opt(&mut self) -> LexerResult<Option<String>> { + if self.lookahead_char_is_in("'\"") { + Ok(Some(self.next_str_lit_raw()?)) + } else { + Ok(None) + } + } + + /// Parse next token as JSON number + fn next_json_number_opt(&mut self) -> LexerResult<Option<JsonNumberLit>> { + assert_eq!(ParserLanguage::Json, self.language); + + fn is_digit(c: char) -> bool { + c >= '0' && c <= '9' + } + + fn is_digit_1_9(c: char) -> bool { + c >= '1' && c <= '9' + } + + if !self.lookahead_char_is_in("-0123456789") { + return Ok(None); + } + + let mut s = String::new(); + if self.next_char_if_eq('-') { + s.push('-'); + } + + if self.next_char_if_eq('0') { + s.push('0'); + } else { + s.push(self.next_char_expect(is_digit_1_9, LexerError::IncorrectJsonNumber)?); + while let Some(c) = self.next_char_if(is_digit) { + s.push(c); + } + } + + if self.next_char_if_eq('.') { + s.push('.'); + s.push(self.next_char_expect(is_digit, LexerError::IncorrectJsonNumber)?); + while let Some(c) = self.next_char_if(is_digit) { + s.push(c); + } + } + + if let Some(c) = self.next_char_if_in("eE") { + s.push(c); + if let Some(c) = self.next_char_if_in("+-") { + s.push(c); + } + s.push(self.next_char_expect(is_digit, LexerError::IncorrectJsonNumber)?); + while let Some(c) = self.next_char_if(is_digit) { + s.push(c); + } + } + + Ok(Some(JsonNumberLit(s))) + } + + fn next_token_inner(&mut self) -> LexerResult<Token> { + if self.language == ParserLanguage::Json { + if let Some(v) = self.next_json_number_opt()? { + return Ok(Token::JsonNumber(v)); + } + } + + if let Some(ident) = self.next_ident_opt()? { + let token = if self.language != ParserLanguage::Json && ident == float::PROTOBUF_NAN { + Token::FloatLit(f64::NAN) + } else if self.language != ParserLanguage::Json && ident == float::PROTOBUF_INF { + Token::FloatLit(f64::INFINITY) + } else { + Token::Ident(ident.to_owned()) + }; + return Ok(token); + } + + if self.language != ParserLanguage::Json { + let mut clone = self.clone(); + let pos = clone.pos; + if let Ok(_) = clone.next_float_lit() { + let f = float::parse_protobuf_float(&self.input[pos..clone.pos])?; + *self = clone; + return Ok(Token::FloatLit(f)); + } + + if let Some(lit) = self.next_int_lit_opt()? { + return Ok(Token::IntLit(lit)); + } + } + + if let Some(escaped) = self.next_str_lit_raw_opt()? { + return Ok(Token::StrLit(StrLit { escaped })); + } + + // This branch must be after str lit + if let Some(c) = self.next_char_if(|c| c.is_ascii_punctuation()) { + return Ok(Token::Symbol(c)); + } + + if let Some(ident) = self.next_ident_opt()? { + return Ok(Token::Ident(ident)); + } + + Err(LexerError::IncorrectInput) + } + + pub fn next_token(&mut self) -> LexerResult<Option<TokenWithLocation>> { + self.skip_ws()?; + let loc = self.loc; + + Ok(if self.eof() { + None + } else { + let token = self.next_token_inner()?; + // Skip whitespace here to update location + // to the beginning of the next token + self.skip_ws()?; + Some(TokenWithLocation { token, loc }) + }) + } +} + +#[cfg(test)] +mod test { + use super::*; + + fn lex<P, R>(input: &str, parse_what: P) -> R + where + P: FnOnce(&mut Lexer) -> LexerResult<R>, + { + let mut lexer = Lexer::new(input, ParserLanguage::Proto); + let r = parse_what(&mut lexer).expect(&format!("lexer failed at {}", lexer.loc)); + assert!(lexer.eof(), "check eof failed at {}", lexer.loc); + r + } + + fn lex_opt<P, R>(input: &str, parse_what: P) -> R + where + P: FnOnce(&mut Lexer) -> LexerResult<Option<R>>, + { + let mut lexer = Lexer::new(input, ParserLanguage::Proto); + let o = parse_what(&mut lexer).expect(&format!("lexer failed at {}", lexer.loc)); + let r = o.expect(&format!("lexer returned none at {}", lexer.loc)); + assert!(lexer.eof(), "check eof failed at {}", lexer.loc); + r + } + + #[test] + fn test_lexer_int_lit() { + let msg = r#"10"#; + let mess = lex_opt(msg, |p| p.next_int_lit_opt()); + assert_eq!(10, mess); + } + + #[test] + fn test_lexer_float_lit() { + let msg = r#"12.3"#; + let mess = lex(msg, |p| p.next_token_inner()); + assert_eq!(Token::FloatLit(12.3), mess); + } + + #[test] + fn test_lexer_float_lit_leading_zeros_in_exp() { + let msg = r#"1e00009"#; + let mess = lex(msg, |p| p.next_token_inner()); + assert_eq!(Token::FloatLit(1_000_000_000.0), mess); + } +} diff --git a/2.27.1/src/text_format/lexer/loc.rs b/2.27.1/src/text_format/lexer/loc.rs new file mode 100644 index 0000000..ea3fc1a --- /dev/null +++ b/2.27.1/src/text_format/lexer/loc.rs @@ -0,0 +1,28 @@ +use std::fmt; + +pub const FIRST_LINE: u32 = 1; +pub const FIRST_COL: u32 = 1; + +/// Location in file +#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd)] +pub struct Loc { + /// 1-based + pub line: u32, + /// 1-based + pub col: u32, +} + +impl fmt::Display for Loc { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}:{}", self.line, self.col) + } +} + +impl Loc { + pub fn start() -> Loc { + Loc { + line: FIRST_LINE, + col: FIRST_COL, + } + } +} diff --git a/2.27.1/src/text_format/lexer/mod.rs b/2.27.1/src/text_format/lexer/mod.rs new file mode 100644 index 0000000..a7ed884 --- /dev/null +++ b/2.27.1/src/text_format/lexer/mod.rs @@ -0,0 +1,21 @@ +//! Implementation of lexer for both protobuf parser and for text format parser. + +pub mod float; +mod json_number_lit; +mod lexer_impl; +mod loc; +mod num_lit; +mod parser_language; +mod str_lit; +mod token; + +pub use self::json_number_lit::JsonNumberLit; +pub use self::lexer_impl::Lexer; +pub use self::lexer_impl::LexerError; +pub use self::loc::Loc; +pub use self::num_lit::NumLit; +pub use self::parser_language::ParserLanguage; +pub use self::str_lit::StrLit; +pub use self::str_lit::StrLitDecodeError; +pub use self::token::Token; +pub use self::token::TokenWithLocation; diff --git a/2.27.1/src/text_format/lexer/num_lit.rs b/2.27.1/src/text_format/lexer/num_lit.rs new file mode 100644 index 0000000..cc64cc4 --- /dev/null +++ b/2.27.1/src/text_format/lexer/num_lit.rs @@ -0,0 +1,5 @@ +#[derive(Copy, Clone)] +pub enum NumLit { + U64(u64), + F64(f64), +} diff --git a/2.27.1/src/text_format/lexer/parser_language.rs b/2.27.1/src/text_format/lexer/parser_language.rs new file mode 100644 index 0000000..e356571 --- /dev/null +++ b/2.27.1/src/text_format/lexer/parser_language.rs @@ -0,0 +1,10 @@ +/// We use the same lexer/tokenizer for all parsers for simplicity +#[derive(Copy, Clone, Debug, Eq, PartialEq)] +pub enum ParserLanguage { + // `.proto` files + Proto, + // Protobuf text format + TextFormat, + // JSON + Json, +} diff --git a/2.27.1/src/text_format/lexer/str_lit.rs b/2.27.1/src/text_format/lexer/str_lit.rs new file mode 100644 index 0000000..15ffa5b --- /dev/null +++ b/2.27.1/src/text_format/lexer/str_lit.rs @@ -0,0 +1,86 @@ +use std::fmt; +use std::string::FromUtf8Error; + +use super::lexer_impl::Lexer; +use super::lexer_impl::LexerError; +use crate::text_format::lexer::ParserLanguage; + +#[derive(Debug)] +pub enum StrLitDecodeError { + FromUtf8Error(FromUtf8Error), + // TODO: be more specific + OtherError, +} + +impl fmt::Display for StrLitDecodeError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + StrLitDecodeError::FromUtf8Error(e) => write!(f, "{}", e), + StrLitDecodeError::OtherError => write!(f, "String literal decode error"), + } + } +} + +impl std::error::Error for StrLitDecodeError {} + +impl From<LexerError> for StrLitDecodeError { + fn from(_: LexerError) -> Self { + StrLitDecodeError::OtherError + } +} + +impl From<FromUtf8Error> for StrLitDecodeError { + fn from(e: FromUtf8Error) -> Self { + StrLitDecodeError::FromUtf8Error(e) + } +} + +pub type StrLitDecodeResult<T> = Result<T, StrLitDecodeError>; + +/// String literal, both `string` and `bytes`. +#[derive(Clone, Eq, PartialEq, Debug)] +pub struct StrLit { + pub escaped: String, +} + +impl StrLit { + /// May fail if not valid UTF8 + pub fn decode_utf8(&self) -> StrLitDecodeResult<String> { + let mut lexer = Lexer::new(&self.escaped, ParserLanguage::Json); + let mut r = Vec::new(); + while !lexer.eof() { + r.push(lexer.next_byte_value()?); + } + Ok(String::from_utf8(r)?) + } + + pub fn decode_bytes(&self) -> StrLitDecodeResult<Vec<u8>> { + let mut lexer = Lexer::new(&self.escaped, ParserLanguage::Json); + let mut r = Vec::new(); + while !lexer.eof() { + r.push(lexer.next_byte_value()?); + } + Ok(r) + } + + pub fn quoted(&self) -> String { + format!("\"{}\"", self.escaped) + } +} + +#[cfg(test)] +mod test { + use crate::text_format::lexer::StrLit; + + #[test] + fn decode_utf8() { + assert_eq!( + "\u{1234}".to_owned(), + StrLit { + escaped: "\\341\\210\\264".to_owned() + } + .decode_utf8() + .unwrap() + ) + } +} diff --git a/2.27.1/src/text_format/lexer/token.rs b/2.27.1/src/text_format/lexer/token.rs new file mode 100644 index 0000000..55d931a --- /dev/null +++ b/2.27.1/src/text_format/lexer/token.rs @@ -0,0 +1,47 @@ +use super::lexer_impl::LexerError; +use super::lexer_impl::LexerResult; +use super::loc::Loc; +use super::num_lit::NumLit; +use super::str_lit::StrLit; +use crate::text_format::lexer::JsonNumberLit; + +#[derive(Clone, Debug, PartialEq)] +pub enum Token { + Ident(String), + Symbol(char), + // Protobuf tokenizer has separate tokens for int and float. + // Tokens do not include sign. + IntLit(u64), + FloatLit(f64), + JsonNumber(JsonNumberLit), + // including quotes + StrLit(StrLit), +} + +impl Token { + /// Back to original + pub fn format(&self) -> String { + match self { + &Token::Ident(ref s) => s.clone(), + &Token::Symbol(c) => c.to_string(), + &Token::IntLit(ref i) => i.to_string(), + &Token::StrLit(ref s) => s.quoted(), + &Token::FloatLit(ref f) => f.to_string(), + &Token::JsonNumber(ref f) => f.to_string(), + } + } + + pub fn to_num_lit(&self) -> LexerResult<NumLit> { + match self { + &Token::IntLit(i) => Ok(NumLit::U64(i)), + &Token::FloatLit(f) => Ok(NumLit::F64(f)), + _ => Err(LexerError::IncorrectInput), + } + } +} + +#[derive(Clone)] +pub struct TokenWithLocation { + pub token: Token, + pub loc: Loc, +} diff --git a/2.27.1/src/text_format/mod.rs b/2.27.1/src/text_format/mod.rs new file mode 100644 index 0000000..2fa9a16 --- /dev/null +++ b/2.27.1/src/text_format/mod.rs @@ -0,0 +1,307 @@ +//! Protobuf "text format" implementation. +//! +//! Text format message look like this: +//! +//! ```text,ignore +//! size: 17 +//! color: "red" +//! children { +//! size: 18 +//! color: "blue" +//! } +//! children { +//! size: 19 +//! color: "green" +//! } +//! ``` +//! +//! This format is not specified, but it is implemented by all official +//! protobuf implementations, including `protoc` command which can decode +//! and encode messages using text format. + +use std; +use std::fmt; +use std::fmt::Write; + +use crate::message::Message; +use crate::reflect::ReflectFieldRef; +use crate::reflect::ReflectValueRef; + +mod print; + +// Used by text format parser and by pure-rust codegen parsed +// this it is public but hidden module. +// https://github.com/rust-lang/rust/issues/44663 +#[doc(hidden)] +pub mod lexer; + +use self::print::print_str_to; +#[doc(hidden)] +pub use self::print::quote_bytes_to; +#[doc(hidden)] +pub use self::print::quote_escape_bytes; +use crate::text_format::print::quote_escape_bytes_to; + +#[doc(hidden)] +pub fn unescape_string(string: &str) -> Vec<u8> { + fn parse_if_digit(chars: &mut std::str::Chars) -> u8 { + let mut copy = chars.clone(); + let f = match copy.next() { + None => return 0, + Some(f) => f, + }; + let d = match f { + '0'..='9' => (f as u8 - b'0'), + _ => return 0, + }; + *chars = copy; + d + } + + fn parse_hex_digit(chars: &mut std::str::Chars) -> u8 { + match chars.next().unwrap() { + c @ '0'..='9' => (c as u8) - b'0', + c @ 'a'..='f' => (c as u8) - b'a' + 10, + c @ 'A'..='F' => (c as u8) - b'A' + 10, + _ => panic!("incorrect hex escape"), + } + } + + fn parse_escape_rem(chars: &mut std::str::Chars) -> u8 { + let n = chars.next().unwrap(); + match n { + 'a' => return b'\x07', + 'b' => return b'\x08', + 'f' => return b'\x0c', + 'n' => return b'\n', + 'r' => return b'\r', + 't' => return b'\t', + 'v' => return b'\x0b', + '"' => return b'"', + '\'' => return b'\'', + '0'..='9' => { + let d1 = n as u8 - b'0'; + let d2 = parse_if_digit(chars); + let d3 = parse_if_digit(chars); + return (d1 * 64 + d2 * 8 + d3) as u8; + } + 'x' => { + let d1 = parse_hex_digit(chars); + let d2 = parse_hex_digit(chars); + return d1 * 16 + d2; + } + c => return c as u8, // TODO: validate ASCII + }; + } + + let mut chars = string.chars(); + let mut r = Vec::new(); + + loop { + let f = match chars.next() { + None => return r, + Some(f) => f, + }; + + if f == '\\' { + r.push(parse_escape_rem(&mut chars)); + } else { + r.push(f as u8); // TODO: escape UTF-8 + } + } +} + +fn do_indent(buf: &mut String, pretty: bool, indent: usize) { + if pretty && indent > 0 { + for _ in 0..indent { + buf.push_str(" "); + } + } +} + +fn print_start_field( + buf: &mut String, + pretty: bool, + indent: usize, + first: &mut bool, + field_name: &str, +) { + if !*first && !pretty { + buf.push_str(" "); + } + do_indent(buf, pretty, indent); + *first = false; + buf.push_str(field_name); +} + +fn print_end_field(buf: &mut String, pretty: bool) { + if pretty { + buf.push_str("\n"); + } +} + +fn print_field( + buf: &mut String, + pretty: bool, + indent: usize, + first: &mut bool, + field_name: &str, + value: ReflectValueRef, +) { + print_start_field(buf, pretty, indent, first, field_name); + + match value { + ReflectValueRef::Message(m) => { + buf.push_str(" {"); + if pretty { + buf.push_str("\n"); + } + print_to_internal(m, buf, pretty, indent + 1); + do_indent(buf, pretty, indent); + buf.push_str("}"); + } + ReflectValueRef::Enum(e) => { + buf.push_str(": "); + buf.push_str(e.name()); + } + ReflectValueRef::String(s) => { + buf.push_str(": "); + print_str_to(s, buf); + } + ReflectValueRef::Bytes(b) => { + buf.push_str(": "); + quote_escape_bytes_to(b, buf); + } + ReflectValueRef::I32(v) => { + write!(buf, ": {}", v).unwrap(); + } + ReflectValueRef::I64(v) => { + write!(buf, ": {}", v).unwrap(); + } + ReflectValueRef::U32(v) => { + write!(buf, ": {}", v).unwrap(); + } + ReflectValueRef::U64(v) => { + write!(buf, ": {}", v).unwrap(); + } + ReflectValueRef::Bool(v) => { + write!(buf, ": {}", v).unwrap(); + } + ReflectValueRef::F32(v) => { + write!(buf, ": {}", v).unwrap(); + } + ReflectValueRef::F64(v) => { + write!(buf, ": {}", v).unwrap(); + } + } + + print_end_field(buf, pretty); +} + +fn print_to_internal(m: &dyn Message, buf: &mut String, pretty: bool, indent: usize) { + let d = m.descriptor(); + let mut first = true; + for f in d.fields() { + match f.get_reflect(m) { + ReflectFieldRef::Map(map) => { + for (k, v) in map { + print_start_field(buf, pretty, indent, &mut first, f.name()); + buf.push_str(" {"); + if pretty { + buf.push_str("\n"); + } + + let mut entry_first = true; + + print_field(buf, pretty, indent + 1, &mut entry_first, "key", k.as_ref()); + print_field( + buf, + pretty, + indent + 1, + &mut entry_first, + "value", + v.as_ref(), + ); + do_indent(buf, pretty, indent); + buf.push_str("}"); + print_end_field(buf, pretty); + } + } + ReflectFieldRef::Repeated(repeated) => { + // TODO: do not print zeros for v3 + for v in repeated { + print_field(buf, pretty, indent, &mut first, f.name(), v.as_ref()); + } + } + ReflectFieldRef::Optional(optional) => { + if let Some(v) = optional { + print_field(buf, pretty, indent, &mut first, f.name(), v); + } + } + } + } + + // TODO: unknown fields +} + +/// Text-format +pub fn print_to(m: &dyn Message, buf: &mut String) { + print_to_internal(m, buf, false, 0) +} + +fn print_to_string_internal(m: &dyn Message, pretty: bool) -> String { + let mut r = String::new(); + print_to_internal(m, &mut r, pretty, 0); + r.to_string() +} + +/// Text-format +pub fn print_to_string(m: &dyn Message) -> String { + print_to_string_internal(m, false) +} + +/// Text-format to `fmt::Formatter`. +pub fn fmt(m: &dyn Message, f: &mut fmt::Formatter) -> fmt::Result { + let pretty = f.alternate(); + f.write_str(&print_to_string_internal(m, pretty)) +} + +#[cfg(test)] +mod test { + + fn escape(data: &[u8]) -> String { + let mut s = String::with_capacity(data.len() * 4); + super::quote_bytes_to(data, &mut s); + s + } + + fn test_escape_unescape(text: &str, escaped: &str) { + assert_eq!(text.as_bytes(), &super::unescape_string(escaped)[..]); + assert_eq!(escaped, &escape(text.as_bytes())[..]); + } + + #[test] + fn test_print_to_bytes() { + assert_eq!("ab", escape(b"ab")); + assert_eq!("a\\\\023", escape(b"a\\023")); + assert_eq!("a\\r\\n\\t \\'\\\"\\\\", escape(b"a\r\n\t '\"\\")); + assert_eq!("\\344\\275\\240\\345\\245\\275", escape("ä½ å¥½".as_bytes())); + } + + #[test] + fn test_unescape_string() { + test_escape_unescape("", ""); + test_escape_unescape("aa", "aa"); + test_escape_unescape("\n", "\\n"); + test_escape_unescape("\r", "\\r"); + test_escape_unescape("\t", "\\t"); + test_escape_unescape("ä½ å¥½", "\\344\\275\\240\\345\\245\\275"); + // hex + assert_eq!(b"aaa\x01bbb", &super::unescape_string("aaa\\x01bbb")[..]); + assert_eq!(b"aaa\xcdbbb", &super::unescape_string("aaa\\xCDbbb")[..]); + assert_eq!(b"aaa\xcdbbb", &super::unescape_string("aaa\\xCDbbb")[..]); + // quotes + assert_eq!(b"aaa\"bbb", &super::unescape_string("aaa\\\"bbb")[..]); + assert_eq!(b"aaa\'bbb", &super::unescape_string("aaa\\\'bbb")[..]); + } +} diff --git a/2.27.1/src/text_format/print.rs b/2.27.1/src/text_format/print.rs new file mode 100644 index 0000000..397e8cd --- /dev/null +++ b/2.27.1/src/text_format/print.rs @@ -0,0 +1,38 @@ +#[doc(hidden)] +pub fn quote_bytes_to(bytes: &[u8], buf: &mut String) { + for &c in bytes { + match c { + b'\n' => buf.push_str(r"\n"), + b'\r' => buf.push_str(r"\r"), + b'\t' => buf.push_str(r"\t"), + b'\'' => buf.push_str("\\\'"), + b'"' => buf.push_str("\\\""), + b'\\' => buf.push_str(r"\\"), + b'\x20'..=b'\x7e' => buf.push(c as char), + _ => { + buf.push('\\'); + buf.push((b'0' + (c >> 6)) as char); + buf.push((b'0' + ((c >> 3) & 7)) as char); + buf.push((b'0' + (c & 7)) as char); + } + } + } +} + +pub(crate) fn quote_escape_bytes_to(bytes: &[u8], buf: &mut String) { + buf.push('"'); + quote_bytes_to(bytes, buf); + buf.push('"'); +} + +#[doc(hidden)] +pub fn quote_escape_bytes(bytes: &[u8]) -> String { + let mut r = String::new(); + quote_escape_bytes_to(bytes, &mut r); + r +} + +pub(crate) fn print_str_to(s: &str, buf: &mut String) { + // TODO: keep printable Unicode + quote_escape_bytes_to(s.as_bytes(), buf); +} diff --git a/2.27.1/src/types.rs b/2.27.1/src/types.rs new file mode 100644 index 0000000..20244a1 --- /dev/null +++ b/2.27.1/src/types.rs @@ -0,0 +1,684 @@ +//! Implementations of `ProtobufType` for all types. + +use std::marker; +use std::mem; + +#[cfg(feature = "bytes")] +use bytes::Bytes; + +#[cfg(feature = "bytes")] +use crate::chars::Chars; +use crate::coded_input_stream::CodedInputStream; +use crate::coded_output_stream::CodedOutputStream; +use crate::enums::ProtobufEnum; +use crate::error::ProtobufResult; +use crate::message::Message; +use crate::reflect::ProtobufValue; +use crate::rt; +use crate::unknown::UnknownValues; +use crate::wire_format::WireType; +use crate::zigzag::decode_zig_zag_32; +use crate::zigzag::decode_zig_zag_64; + +/// Protobuf elementary type as generic trait +pub trait ProtobufType { + /// Rust type of value + type Value: ProtobufValue + Clone + 'static; + + /// Wire type when writing to stream + fn wire_type() -> WireType; + + /// Read value from `CodedInputStream` + fn read(is: &mut CodedInputStream) -> ProtobufResult<Self::Value>; + + /// Compute wire size + fn compute_size(value: &Self::Value) -> u32; + + /// Get value from `UnknownValues` + fn get_from_unknown(unknown_values: &UnknownValues) -> Option<Self::Value>; + + /// Compute size adding length prefix if wire type is length delimited + /// (i. e. string, bytes, message) + fn compute_size_with_length_delimiter(value: &Self::Value) -> u32 { + let size = Self::compute_size(value); + if Self::wire_type() == WireType::WireTypeLengthDelimited { + rt::compute_raw_varint32_size(size) + size + } else { + size + } + } + + /// Get previously computed size + #[inline] + fn get_cached_size(value: &Self::Value) -> u32 { + Self::compute_size(value) + } + + /// Get previously cached size with length prefix + #[inline] + fn get_cached_size_with_length_delimiter(value: &Self::Value) -> u32 { + let size = Self::get_cached_size(value); + if Self::wire_type() == WireType::WireTypeLengthDelimited { + rt::compute_raw_varint32_size(size) + size + } else { + size + } + } + + /// Write a value with previously cached size + fn write_with_cached_size( + field_number: u32, + value: &Self::Value, + os: &mut CodedOutputStream, + ) -> ProtobufResult<()>; +} + +/// `float` +pub struct ProtobufTypeFloat; +/// `double` +pub struct ProtobufTypeDouble; +/// `uint32` +pub struct ProtobufTypeInt32; +/// `int64` +pub struct ProtobufTypeInt64; +/// `uint32` +pub struct ProtobufTypeUint32; +/// `uint64` +pub struct ProtobufTypeUint64; +/// `sint32` +pub struct ProtobufTypeSint32; +/// `sint64` +pub struct ProtobufTypeSint64; +/// `fixed32` +pub struct ProtobufTypeFixed32; +/// `fixed64` +pub struct ProtobufTypeFixed64; +/// `sfixed32` +pub struct ProtobufTypeSfixed32; +/// `sfixed64` +pub struct ProtobufTypeSfixed64; +/// `bool` +pub struct ProtobufTypeBool; +/// `string` +pub struct ProtobufTypeString; +/// `bytes` +pub struct ProtobufTypeBytes; +/// Something which should be deleted +pub struct ProtobufTypeChars; + +/// `bytes` as [`Bytes`](bytes::Bytes) +#[cfg(feature = "bytes")] +pub struct ProtobufTypeCarllercheBytes; +/// `string` as [`Chars`](crate::Chars) +#[cfg(feature = "bytes")] +pub struct ProtobufTypeCarllercheChars; + +/// `enum` +pub struct ProtobufTypeEnum<E: ProtobufEnum>(marker::PhantomData<E>); +/// `message` +pub struct ProtobufTypeMessage<M: Message>(marker::PhantomData<M>); + +impl ProtobufType for ProtobufTypeFloat { + type Value = f32; + + fn wire_type() -> WireType { + WireType::WireTypeFixed32 + } + + fn read(is: &mut CodedInputStream) -> ProtobufResult<f32> { + is.read_float() + } + + fn compute_size(_value: &f32) -> u32 { + 4 + } + + fn get_from_unknown(unknown_values: &UnknownValues) -> Option<f32> { + unknown_values + .fixed32 + .iter() + .rev() + .next() + .map(|&bits| unsafe { mem::transmute::<u32, f32>(bits) }) + } + + fn write_with_cached_size( + field_number: u32, + value: &f32, + os: &mut CodedOutputStream, + ) -> ProtobufResult<()> { + os.write_float(field_number, *value) + } +} + +impl ProtobufType for ProtobufTypeDouble { + type Value = f64; + + fn wire_type() -> WireType { + WireType::WireTypeFixed64 + } + + fn read(is: &mut CodedInputStream) -> ProtobufResult<f64> { + is.read_double() + } + + fn get_from_unknown(unknown_values: &UnknownValues) -> Option<f64> { + unknown_values + .fixed64 + .iter() + .rev() + .next() + .map(|&bits| unsafe { mem::transmute::<u64, f64>(bits) }) + } + + fn compute_size(_value: &f64) -> u32 { + 8 + } + + fn write_with_cached_size( + field_number: u32, + value: &f64, + os: &mut CodedOutputStream, + ) -> ProtobufResult<()> { + os.write_double(field_number, *value) + } +} + +impl ProtobufType for ProtobufTypeInt32 { + type Value = i32; + + fn wire_type() -> WireType { + WireType::WireTypeVarint + } + + fn read(is: &mut CodedInputStream) -> ProtobufResult<i32> { + is.read_int32() + } + + fn compute_size(value: &i32) -> u32 { + // See also: https://github.com/protocolbuffers/protobuf/blob/bd00671b924310c0353a730bf8fa77c44e0a9c72/src/google/protobuf/io/coded_stream.h#L1300-L1306 + if *value < 0 { + return 10; + } + rt::compute_raw_varint32_size(*value as u32) + } + + fn write_with_cached_size( + field_number: u32, + value: &i32, + os: &mut CodedOutputStream, + ) -> ProtobufResult<()> { + os.write_int32(field_number, *value) + } + + fn get_from_unknown(unknown_values: &UnknownValues) -> Option<i32> { + unknown_values.varint.iter().rev().next().map(|&v| v as i32) + } +} + +impl ProtobufType for ProtobufTypeInt64 { + type Value = i64; + + fn wire_type() -> WireType { + WireType::WireTypeVarint + } + + fn read(is: &mut CodedInputStream) -> ProtobufResult<i64> { + is.read_int64() + } + + fn get_from_unknown(unknown_values: &UnknownValues) -> Option<i64> { + unknown_values.varint.iter().rev().next().map(|&v| v as i64) + } + + fn compute_size(value: &i64) -> u32 { + rt::compute_raw_varint64_size(*value as u64) + } + + fn write_with_cached_size( + field_number: u32, + value: &i64, + os: &mut CodedOutputStream, + ) -> ProtobufResult<()> { + os.write_int64(field_number, *value) + } +} + +impl ProtobufType for ProtobufTypeUint32 { + type Value = u32; + + fn wire_type() -> WireType { + WireType::WireTypeVarint + } + + fn read(is: &mut CodedInputStream) -> ProtobufResult<u32> { + is.read_uint32() + } + + fn get_from_unknown(unknown_values: &UnknownValues) -> Option<u32> { + unknown_values.varint.iter().rev().next().map(|&v| v as u32) + } + + fn compute_size(value: &u32) -> u32 { + rt::compute_raw_varint32_size(*value) + } + + fn write_with_cached_size( + field_number: u32, + value: &u32, + os: &mut CodedOutputStream, + ) -> ProtobufResult<()> { + os.write_uint32(field_number, *value) + } +} + +impl ProtobufType for ProtobufTypeUint64 { + type Value = u64; + + fn wire_type() -> WireType { + WireType::WireTypeVarint + } + + fn read(is: &mut CodedInputStream) -> ProtobufResult<u64> { + is.read_uint64() + } + + fn get_from_unknown(unknown_values: &UnknownValues) -> Option<u64> { + unknown_values.varint.iter().cloned().rev().next() + } + + fn compute_size(value: &u64) -> u32 { + rt::compute_raw_varint64_size(*value) + } + + fn write_with_cached_size( + field_number: u32, + value: &u64, + os: &mut CodedOutputStream, + ) -> ProtobufResult<()> { + os.write_uint64(field_number, *value) + } +} + +impl ProtobufType for ProtobufTypeSint32 { + type Value = i32; + + fn wire_type() -> WireType { + WireType::WireTypeVarint + } + + fn read(is: &mut CodedInputStream) -> ProtobufResult<i32> { + is.read_sint32() + } + + fn get_from_unknown(unknown_values: &UnknownValues) -> Option<i32> { + ProtobufTypeUint32::get_from_unknown(unknown_values).map(decode_zig_zag_32) + } + + fn compute_size(value: &i32) -> u32 { + rt::value_varint_zigzag_size_no_tag(*value) + } + + fn write_with_cached_size( + field_number: u32, + value: &i32, + os: &mut CodedOutputStream, + ) -> ProtobufResult<()> { + os.write_sint32(field_number, *value) + } +} + +impl ProtobufType for ProtobufTypeSint64 { + type Value = i64; + + fn wire_type() -> WireType { + WireType::WireTypeVarint + } + + fn read(is: &mut CodedInputStream) -> ProtobufResult<i64> { + is.read_sint64() + } + + fn get_from_unknown(unknown_values: &UnknownValues) -> Option<i64> { + ProtobufTypeUint64::get_from_unknown(unknown_values).map(decode_zig_zag_64) + } + + fn compute_size(value: &i64) -> u32 { + rt::value_varint_zigzag_size_no_tag(*value) + } + + fn write_with_cached_size( + field_number: u32, + value: &i64, + os: &mut CodedOutputStream, + ) -> ProtobufResult<()> { + os.write_sint64(field_number, *value) + } +} + +impl ProtobufType for ProtobufTypeFixed32 { + type Value = u32; + + fn wire_type() -> WireType { + WireType::WireTypeFixed32 + } + + fn read(is: &mut CodedInputStream) -> ProtobufResult<u32> { + is.read_fixed32() + } + + fn get_from_unknown(unknown_values: &UnknownValues) -> Option<u32> { + unknown_values.fixed32.iter().cloned().rev().next() + } + + fn compute_size(_value: &u32) -> u32 { + 4 + } + + fn write_with_cached_size( + field_number: u32, + value: &u32, + os: &mut CodedOutputStream, + ) -> ProtobufResult<()> { + os.write_fixed32(field_number, *value) + } +} + +impl ProtobufType for ProtobufTypeFixed64 { + type Value = u64; + + fn wire_type() -> WireType { + WireType::WireTypeFixed64 + } + + fn read(is: &mut CodedInputStream) -> ProtobufResult<u64> { + is.read_fixed64() + } + + fn get_from_unknown(unknown_values: &UnknownValues) -> Option<u64> { + unknown_values.fixed64.iter().cloned().rev().next() + } + + fn compute_size(_value: &u64) -> u32 { + 8 + } + + fn write_with_cached_size( + field_number: u32, + value: &u64, + os: &mut CodedOutputStream, + ) -> ProtobufResult<()> { + os.write_fixed64(field_number, *value) + } +} + +impl ProtobufType for ProtobufTypeSfixed32 { + type Value = i32; + + fn wire_type() -> WireType { + WireType::WireTypeFixed32 + } + + fn read(is: &mut CodedInputStream) -> ProtobufResult<i32> { + is.read_sfixed32() + } + + fn get_from_unknown(unknown_values: &UnknownValues) -> Option<i32> { + ProtobufTypeFixed32::get_from_unknown(unknown_values).map(|u| u as i32) + } + + fn compute_size(_value: &i32) -> u32 { + 4 + } + + fn write_with_cached_size( + field_number: u32, + value: &i32, + os: &mut CodedOutputStream, + ) -> ProtobufResult<()> { + os.write_sfixed32(field_number, *value) + } +} + +impl ProtobufType for ProtobufTypeSfixed64 { + type Value = i64; + + fn wire_type() -> WireType { + WireType::WireTypeFixed64 + } + + fn read(is: &mut CodedInputStream) -> ProtobufResult<i64> { + is.read_sfixed64() + } + + fn get_from_unknown(unknown_values: &UnknownValues) -> Option<i64> { + ProtobufTypeFixed64::get_from_unknown(unknown_values).map(|u| u as i64) + } + + fn compute_size(_value: &i64) -> u32 { + 8 + } + + fn write_with_cached_size( + field_number: u32, + value: &i64, + os: &mut CodedOutputStream, + ) -> ProtobufResult<()> { + os.write_sfixed64(field_number, *value) + } +} + +impl ProtobufType for ProtobufTypeBool { + type Value = bool; + + fn wire_type() -> WireType { + WireType::WireTypeVarint + } + + fn read(is: &mut CodedInputStream) -> ProtobufResult<bool> { + is.read_bool() + } + + fn get_from_unknown(unknown: &UnknownValues) -> Option<bool> { + unknown.varint.iter().rev().next().map(|&v| v != 0) + } + + fn compute_size(_value: &bool) -> u32 { + 1 + } + + fn write_with_cached_size( + field_number: u32, + value: &bool, + os: &mut CodedOutputStream, + ) -> ProtobufResult<()> { + os.write_bool(field_number, *value) + } +} + +impl ProtobufType for ProtobufTypeString { + type Value = String; + + fn wire_type() -> WireType { + WireType::WireTypeLengthDelimited + } + + fn read(is: &mut CodedInputStream) -> ProtobufResult<String> { + is.read_string() + } + + fn get_from_unknown(unknown_values: &UnknownValues) -> Option<String> { + // TODO: should not panic + ProtobufTypeBytes::get_from_unknown(unknown_values) + .map(|b| String::from_utf8(b).expect("not a valid string")) + } + + fn compute_size(value: &String) -> u32 { + value.len() as u32 + } + + fn write_with_cached_size( + field_number: u32, + value: &String, + os: &mut CodedOutputStream, + ) -> ProtobufResult<()> { + os.write_string(field_number, &value) + } +} + +impl ProtobufType for ProtobufTypeBytes { + type Value = Vec<u8>; + + fn wire_type() -> WireType { + WireType::WireTypeLengthDelimited + } + + fn read(is: &mut CodedInputStream) -> ProtobufResult<Vec<u8>> { + is.read_bytes() + } + + fn get_from_unknown(unknown_values: &UnknownValues) -> Option<Vec<u8>> { + unknown_values.length_delimited.iter().cloned().rev().next() + } + + fn compute_size(value: &Vec<u8>) -> u32 { + value.len() as u32 + } + + fn write_with_cached_size( + field_number: u32, + value: &Vec<u8>, + os: &mut CodedOutputStream, + ) -> ProtobufResult<()> { + os.write_bytes(field_number, &value) + } +} + +#[cfg(feature = "bytes")] +impl ProtobufType for ProtobufTypeCarllercheBytes { + type Value = Bytes; + + fn wire_type() -> WireType { + ProtobufTypeBytes::wire_type() + } + + fn read(is: &mut CodedInputStream) -> ProtobufResult<Self::Value> { + is.read_carllerche_bytes() + } + + fn get_from_unknown(unknown_values: &UnknownValues) -> Option<Bytes> { + ProtobufTypeBytes::get_from_unknown(unknown_values).map(Bytes::from) + } + + fn compute_size(value: &Bytes) -> u32 { + value.len() as u32 + } + + fn write_with_cached_size( + field_number: u32, + value: &Bytes, + os: &mut CodedOutputStream, + ) -> ProtobufResult<()> { + os.write_bytes(field_number, &value) + } +} + +#[cfg(feature = "bytes")] +impl ProtobufType for ProtobufTypeCarllercheChars { + type Value = Chars; + + fn wire_type() -> WireType { + ProtobufTypeBytes::wire_type() + } + + fn read(is: &mut CodedInputStream) -> ProtobufResult<Self::Value> { + is.read_carllerche_chars() + } + + fn get_from_unknown(unknown_values: &UnknownValues) -> Option<Chars> { + ProtobufTypeString::get_from_unknown(unknown_values).map(Chars::from) + } + + fn compute_size(value: &Chars) -> u32 { + value.len() as u32 + } + + fn write_with_cached_size( + field_number: u32, + value: &Chars, + os: &mut CodedOutputStream, + ) -> ProtobufResult<()> { + os.write_string(field_number, &value) + } +} + +impl<E: ProtobufEnum + ProtobufValue> ProtobufType for ProtobufTypeEnum<E> { + type Value = E; + + fn wire_type() -> WireType { + WireType::WireTypeVarint + } + + fn read(is: &mut CodedInputStream) -> ProtobufResult<E> { + is.read_enum() + } + + fn get_from_unknown(unknown_values: &UnknownValues) -> Option<E> { + // TODO: do not panic + ProtobufTypeInt32::get_from_unknown(unknown_values) + .map(|i| E::from_i32(i).expect("not a valid enum value")) + } + + fn compute_size(value: &E) -> u32 { + rt::compute_raw_varint32_size(value.value() as u32) // TODO: wrap + } + + fn write_with_cached_size( + field_number: u32, + value: &E, + os: &mut CodedOutputStream, + ) -> ProtobufResult<()> { + os.write_enum_obj(field_number, *value) + } +} + +impl<M: Message + Clone + ProtobufValue> ProtobufType for ProtobufTypeMessage<M> { + type Value = M; + + fn wire_type() -> WireType { + WireType::WireTypeLengthDelimited + } + + fn read(is: &mut CodedInputStream) -> ProtobufResult<M> { + is.read_message() + } + + fn get_from_unknown(unknown_values: &UnknownValues) -> Option<M> { + // TODO: do not panic + unknown_values + .length_delimited + .iter() + .rev() + .next() + .map(|bytes| M::parse_from_bytes(bytes).expect("cannot parse message")) + } + + fn compute_size(value: &M) -> u32 { + value.compute_size() + } + + fn get_cached_size(value: &M) -> u32 { + value.get_cached_size() + } + + fn write_with_cached_size( + field_number: u32, + value: &Self::Value, + os: &mut CodedOutputStream, + ) -> ProtobufResult<()> { + os.write_tag(field_number, WireType::WireTypeLengthDelimited)?; + os.write_raw_varint32(value.get_cached_size())?; + value.write_to_with_cached_sizes(os)?; + Ok(()) + } +} diff --git a/2.27.1/src/unknown.rs b/2.27.1/src/unknown.rs new file mode 100644 index 0000000..dd67033 --- /dev/null +++ b/2.27.1/src/unknown.rs @@ -0,0 +1,363 @@ +use std::collections::hash_map; +use std::collections::hash_map::DefaultHasher; +use std::collections::HashMap; +use std::default::Default; +use std::hash::BuildHasherDefault; +use std::hash::Hash; +use std::hash::Hasher; +use std::slice; + +use crate::clear::Clear; +use crate::wire_format; +use crate::zigzag::encode_zig_zag_32; +use crate::zigzag::encode_zig_zag_64; + +/// Unknown value. +/// +/// See [`UnknownFields`](crate::UnknownFields) for the explanations. +#[derive(Debug)] +pub enum UnknownValue { + /// 32-bit unknown (e. g. `fixed32` or `float`) + Fixed32(u32), + /// 64-bit unknown (e. g. `fixed64` or `double`) + Fixed64(u64), + /// Varint unknown (e. g. `int32` or `bool`) + Varint(u64), + /// Length-delimited unknown (e. g. `message` or `string`) + LengthDelimited(Vec<u8>), +} + +impl UnknownValue { + /// Wire type for this unknown + pub fn wire_type(&self) -> wire_format::WireType { + self.get_ref().wire_type() + } + + /// As ref + pub fn get_ref<'s>(&'s self) -> UnknownValueRef<'s> { + match *self { + UnknownValue::Fixed32(fixed32) => UnknownValueRef::Fixed32(fixed32), + UnknownValue::Fixed64(fixed64) => UnknownValueRef::Fixed64(fixed64), + UnknownValue::Varint(varint) => UnknownValueRef::Varint(varint), + UnknownValue::LengthDelimited(ref bytes) => UnknownValueRef::LengthDelimited(&bytes), + } + } + + /// Construct unknown value from `sint32` value. + pub fn sint32(i: i32) -> UnknownValue { + UnknownValue::Varint(encode_zig_zag_32(i) as u64) + } + + /// Construct unknown value from `sint64` value. + pub fn sint64(i: i64) -> UnknownValue { + UnknownValue::Varint(encode_zig_zag_64(i)) + } +} + +/// Reference to unknown value. +/// +/// See [`UnknownFields`](crate::UnknownFields) for explanations. +pub enum UnknownValueRef<'o> { + /// 32-bit unknown + Fixed32(u32), + /// 64-bit unknown + Fixed64(u64), + /// Varint unknown + Varint(u64), + /// Length-delimited unknown + LengthDelimited(&'o [u8]), +} + +impl<'o> UnknownValueRef<'o> { + /// Wire-type to serialize this unknown + pub fn wire_type(&self) -> wire_format::WireType { + match *self { + UnknownValueRef::Fixed32(_) => wire_format::WireTypeFixed32, + UnknownValueRef::Fixed64(_) => wire_format::WireTypeFixed64, + UnknownValueRef::Varint(_) => wire_format::WireTypeVarint, + UnknownValueRef::LengthDelimited(_) => wire_format::WireTypeLengthDelimited, + } + } +} + +/// Field unknown values. +/// +/// See [`UnknownFields`](crate::UnknownFields) for explanations. +#[derive(Clone, PartialEq, Eq, Debug, Default, Hash)] +pub struct UnknownValues { + /// 32-bit unknowns + pub fixed32: Vec<u32>, + /// 64-bit unknowns + pub fixed64: Vec<u64>, + /// Varint unknowns + pub varint: Vec<u64>, + /// Length-delimited unknowns + pub length_delimited: Vec<Vec<u8>>, +} + +impl UnknownValues { + /// Add unknown value + pub fn add_value(&mut self, value: UnknownValue) { + match value { + UnknownValue::Fixed64(fixed64) => self.fixed64.push(fixed64), + UnknownValue::Fixed32(fixed32) => self.fixed32.push(fixed32), + UnknownValue::Varint(varint) => self.varint.push(varint), + UnknownValue::LengthDelimited(length_delimited) => { + self.length_delimited.push(length_delimited) + } + }; + } + + /// Iterate over unknown values + pub fn iter<'s>(&'s self) -> UnknownValuesIter<'s> { + UnknownValuesIter { + fixed32: self.fixed32.iter(), + fixed64: self.fixed64.iter(), + varint: self.varint.iter(), + length_delimited: self.length_delimited.iter(), + } + } +} + +impl<'a> IntoIterator for &'a UnknownValues { + type Item = UnknownValueRef<'a>; + type IntoIter = UnknownValuesIter<'a>; + + fn into_iter(self) -> UnknownValuesIter<'a> { + self.iter() + } +} + +/// Iterator over unknown values +pub struct UnknownValuesIter<'o> { + fixed32: slice::Iter<'o, u32>, + fixed64: slice::Iter<'o, u64>, + varint: slice::Iter<'o, u64>, + length_delimited: slice::Iter<'o, Vec<u8>>, +} + +impl<'o> Iterator for UnknownValuesIter<'o> { + type Item = UnknownValueRef<'o>; + + fn next(&mut self) -> Option<UnknownValueRef<'o>> { + let fixed32 = self.fixed32.next(); + if fixed32.is_some() { + return Some(UnknownValueRef::Fixed32(*fixed32.unwrap())); + } + let fixed64 = self.fixed64.next(); + if fixed64.is_some() { + return Some(UnknownValueRef::Fixed64(*fixed64.unwrap())); + } + let varint = self.varint.next(); + if varint.is_some() { + return Some(UnknownValueRef::Varint(*varint.unwrap())); + } + let length_delimited = self.length_delimited.next(); + if length_delimited.is_some() { + return Some(UnknownValueRef::LengthDelimited(&length_delimited.unwrap())); + } + None + } +} + +/// Hold "unknown" fields in parsed message. +/// +/// Field may be unknown if it they are added in newer version of `.proto`. +/// Unknown fields are stored in `UnknownFields` structure, so +/// protobuf message could process messages without losing data. +/// +/// For example, in this operation: load from DB, modify, store to DB, +/// even when working with older `.proto` file, new fields won't be lost. +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct UnknownFields { + /// The map. + // + // `Option` is needed, because HashMap constructor performs allocation, + // and very expensive. + // + // We use "default hasher" to make iteration order deterministic. + // Which is used to make codegen output deterministic in presence of unknown fields + // (e. g. file options are represented as unknown fields). + // Using default hasher is suboptimal, because it makes unknown fields less safe. + // Note, Google Protobuf C++ simply uses linear map (which can exploitable the same way), + // and Google Protobuf Java uses tree map to store unknown fields + // (which is more expensive than hashmap). + // TODO: hide + pub fields: Option<Box<HashMap<u32, UnknownValues, BuildHasherDefault<DefaultHasher>>>>, +} + +/// Very simple hash implementation of `Hash` for `UnknownFields`. +/// Since map is unordered, we cannot put entry hashes into hasher, +/// instead we summing hashes of entries. +impl Hash for UnknownFields { + fn hash<H: Hasher>(&self, state: &mut H) { + if let Some(ref map) = self.fields { + if !map.is_empty() { + let mut hash: u64 = 0; + for (k, v) in &**map { + let mut entry_hasher = DefaultHasher::new(); + Hash::hash(&(k, v), &mut entry_hasher); + hash = hash.wrapping_add(entry_hasher.finish()); + } + Hash::hash(&map.len(), state); + Hash::hash(&hash, state); + } + } + } +} + +impl UnknownFields { + /// Empty unknown fields + pub fn new() -> UnknownFields { + Default::default() + } + + fn init_map(&mut self) { + if self.fields.is_none() { + self.fields = Some(Default::default()); + } + } + + fn find_field<'a>(&'a mut self, number: &'a u32) -> &'a mut UnknownValues { + self.init_map(); + + match self.fields.as_mut().unwrap().entry(*number) { + hash_map::Entry::Occupied(e) => e.into_mut(), + hash_map::Entry::Vacant(e) => e.insert(Default::default()), + } + } + + /// Add unknown fixed 32-bit + pub fn add_fixed32(&mut self, number: u32, fixed32: u32) { + self.find_field(&number).fixed32.push(fixed32); + } + + /// Add unknown fixed 64-bit + pub fn add_fixed64(&mut self, number: u32, fixed64: u64) { + self.find_field(&number).fixed64.push(fixed64); + } + + /// Add unknown varint + pub fn add_varint(&mut self, number: u32, varint: u64) { + self.find_field(&number).varint.push(varint); + } + + /// Add unknown length delimited + pub fn add_length_delimited(&mut self, number: u32, length_delimited: Vec<u8>) { + self.find_field(&number) + .length_delimited + .push(length_delimited); + } + + /// Add unknown value + pub fn add_value(&mut self, number: u32, value: UnknownValue) { + self.find_field(&number).add_value(value); + } + + /// Remove unknown field by number + pub fn remove(&mut self, field_number: u32) { + if let Some(fields) = &mut self.fields { + fields.remove(&field_number); + } + } + + /// Iterate over all unknowns + pub fn iter<'s>(&'s self) -> UnknownFieldsIter<'s> { + UnknownFieldsIter { + entries: self.fields.as_ref().map(|m| m.iter()), + } + } + + /// Find unknown field by number + pub fn get(&self, field_number: u32) -> Option<&UnknownValues> { + match self.fields { + Some(ref map) => map.get(&field_number), + None => None, + } + } +} + +impl Clear for UnknownFields { + fn clear(&mut self) { + if let Some(ref mut fields) = self.fields { + fields.clear(); + } + } +} + +impl<'a> IntoIterator for &'a UnknownFields { + type Item = (u32, &'a UnknownValues); + type IntoIter = UnknownFieldsIter<'a>; + + fn into_iter(self) -> UnknownFieldsIter<'a> { + self.iter() + } +} + +/// Iterator over [`UnknownFields`](crate::UnknownFields) +pub struct UnknownFieldsIter<'s> { + entries: Option<hash_map::Iter<'s, u32, UnknownValues>>, +} + +impl<'s> Iterator for UnknownFieldsIter<'s> { + type Item = (u32, &'s UnknownValues); + + fn next(&mut self) -> Option<(u32, &'s UnknownValues)> { + match self.entries { + Some(ref mut entries) => entries.next().map(|(&number, values)| (number, values)), + None => None, + } + } +} + +#[cfg(test)] +mod test { + use std::collections::hash_map::DefaultHasher; + use std::hash::Hash; + use std::hash::Hasher; + + use super::UnknownFields; + + #[test] + fn unknown_fields_hash() { + let mut unknown_fields_1 = UnknownFields::new(); + let mut unknown_fields_2 = UnknownFields::new(); + + // Check field order is not important + + unknown_fields_1.add_fixed32(10, 222); + unknown_fields_1.add_fixed32(10, 223); + unknown_fields_1.add_fixed64(14, 224); + + unknown_fields_2.add_fixed32(10, 222); + unknown_fields_2.add_fixed64(14, 224); + unknown_fields_2.add_fixed32(10, 223); + + fn hash(unknown_fields: &UnknownFields) -> u64 { + let mut hasher = DefaultHasher::new(); + Hash::hash(unknown_fields, &mut hasher); + hasher.finish() + } + + assert_eq!(hash(&unknown_fields_1), hash(&unknown_fields_2)); + } + + #[test] + fn unknown_fields_iteration_order_deterministic() { + let mut u_1 = UnknownFields::new(); + let mut u_2 = UnknownFields::new(); + for u in &mut [&mut u_1, &mut u_2] { + u.add_fixed32(10, 20); + u.add_varint(30, 40); + u.add_fixed64(50, 60); + u.add_length_delimited(70, Vec::new()); + u.add_varint(80, 90); + u.add_fixed32(11, 22); + u.add_fixed64(33, 44); + } + + let items_1: Vec<_> = u_1.iter().collect(); + let items_2: Vec<_> = u_2.iter().collect(); + assert_eq!(items_1, items_2); + } +} diff --git a/2.27.1/src/varint.rs b/2.27.1/src/varint.rs new file mode 100644 index 0000000..8e542bc --- /dev/null +++ b/2.27.1/src/varint.rs @@ -0,0 +1,39 @@ +use std::mem::MaybeUninit; + +use crate::misc::maybe_uninit_write; + +/// Encode u64 as varint. +/// Panics if buffer length is less than 10. +#[inline] +pub fn encode_varint64(mut value: u64, buf: &mut [MaybeUninit<u8>]) -> usize { + assert!(buf.len() >= 10); + + unsafe { + let mut i = 0; + while (value & !0x7F) > 0 { + maybe_uninit_write(buf.get_unchecked_mut(i), ((value & 0x7F) | 0x80) as u8); + value >>= 7; + i += 1; + } + maybe_uninit_write(buf.get_unchecked_mut(i), value as u8); + i + 1 + } +} + +/// Encode u32 value as varint. +/// Panics if buffer length is less than 5. +#[inline] +pub fn encode_varint32(mut value: u32, buf: &mut [MaybeUninit<u8>]) -> usize { + assert!(buf.len() >= 5); + + unsafe { + let mut i = 0; + while (value & !0x7F) > 0 { + maybe_uninit_write(buf.get_unchecked_mut(i), ((value & 0x7F) | 0x80) as u8); + value >>= 7; + i += 1; + } + maybe_uninit_write(buf.get_unchecked_mut(i), value as u8); + i + 1 + } +} diff --git a/2.27.1/src/well_known_types/any.rs b/2.27.1/src/well_known_types/any.rs new file mode 100644 index 0000000..e46065f --- /dev/null +++ b/2.27.1/src/well_known_types/any.rs @@ -0,0 +1,374 @@ +// This file is generated by rust-protobuf 2.26.0. Do not edit +// @generated + +// https://github.com/rust-lang/rust-clippy/issues/702 +#![allow(unknown_lints)] +#![allow(clippy::all)] + +#![allow(unused_attributes)] +#![cfg_attr(rustfmt, rustfmt::skip)] + +#![allow(box_pointers)] +#![allow(dead_code)] +#![allow(missing_docs)] +#![allow(non_camel_case_types)] +#![allow(non_snake_case)] +#![allow(non_upper_case_globals)] +#![allow(trivial_casts)] +#![allow(unused_imports)] +#![allow(unused_results)] +//! Generated file from `google/protobuf/any.proto` + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct Any { + // message fields + pub type_url: ::std::string::String, + pub value: ::std::vec::Vec<u8>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a Any { + fn default() -> &'a Any { + <Any as crate::Message>::default_instance() + } +} + +impl Any { + pub fn new() -> Any { + ::std::default::Default::default() + } + + // string type_url = 1; + + + pub fn get_type_url(&self) -> &str { + &self.type_url + } + pub fn clear_type_url(&mut self) { + self.type_url.clear(); + } + + // Param is passed by value, moved + pub fn set_type_url(&mut self, v: ::std::string::String) { + self.type_url = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_type_url(&mut self) -> &mut ::std::string::String { + &mut self.type_url + } + + // Take field + pub fn take_type_url(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.type_url, ::std::string::String::new()) + } + + // bytes value = 2; + + + pub fn get_value(&self) -> &[u8] { + &self.value + } + pub fn clear_value(&mut self) { + self.value.clear(); + } + + // Param is passed by value, moved + pub fn set_value(&mut self, v: ::std::vec::Vec<u8>) { + self.value = 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> { + &mut self.value + } + + // Take field + pub fn take_value(&mut self) -> ::std::vec::Vec<u8> { + ::std::mem::replace(&mut self.value, ::std::vec::Vec::new()) + } +} + +impl crate::Message for Any { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_proto3_string_into(wire_type, is, &mut self.type_url)?; + }, + 2 => { + crate::rt::read_singular_proto3_bytes_into(wire_type, is, &mut self.value)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if !self.type_url.is_empty() { + my_size += crate::rt::string_size(1, &self.type_url); + } + if !self.value.is_empty() { + my_size += crate::rt::bytes_size(2, &self.value); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if !self.type_url.is_empty() { + os.write_string(1, &self.type_url)?; + } + if !self.value.is_empty() { + os.write_bytes(2, &self.value)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> Any { + Any::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeString>( + "type_url", + |m: &Any| { &m.type_url }, + |m: &mut Any| { &mut m.type_url }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeBytes>( + "value", + |m: &Any| { &m.value }, + |m: &mut Any| { &mut m.value }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<Any>( + "Any", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static Any { + static instance: crate::rt::LazyV2<Any> = crate::rt::LazyV2::INIT; + instance.get(Any::new) + } +} + +impl crate::Clear for Any { + fn clear(&mut self) { + self.type_url.clear(); + self.value.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for Any { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for Any { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +static file_descriptor_proto_data: &'static [u8] = b"\ + \n\x19google/protobuf/any.proto\x12\x0fgoogle.protobuf\"6\n\x03Any\x12\ + \x19\n\x08type_url\x18\x01\x20\x01(\tR\x07typeUrl\x12\x14\n\x05value\x18\ + \x02\x20\x01(\x0cR\x05valueBv\n\x13com.google.protobufB\x08AnyProtoP\x01\ + Z,google.golang.org/protobuf/types/known/anypb\xa2\x02\x03GPB\xaa\x02\ + \x1eGoogle.Protobuf.WellKnownTypesJ\xf9*\n\x07\x12\x05\x1e\0\x9d\x01\x01\ + \n\xcc\x0c\n\x01\x0c\x12\x03\x1e\0\x122\xc1\x0c\x20Protocol\x20Buffers\ + \x20-\x20Google's\x20data\x20interchange\x20format\n\x20Copyright\x20200\ + 8\x20Google\x20Inc.\x20\x20All\x20rights\x20reserved.\n\x20https://devel\ + opers.google.com/protocol-buffers/\n\n\x20Redistribution\x20and\x20use\ + \x20in\x20source\x20and\x20binary\x20forms,\x20with\x20or\x20without\n\ + \x20modification,\x20are\x20permitted\x20provided\x20that\x20the\x20foll\ + owing\x20conditions\x20are\n\x20met:\n\n\x20\x20\x20\x20\x20*\x20Redistr\ + ibutions\x20of\x20source\x20code\x20must\x20retain\x20the\x20above\x20co\ + pyright\n\x20notice,\x20this\x20list\x20of\x20conditions\x20and\x20the\ + \x20following\x20disclaimer.\n\x20\x20\x20\x20\x20*\x20Redistributions\ + \x20in\x20binary\x20form\x20must\x20reproduce\x20the\x20above\n\x20copyr\ + ight\x20notice,\x20this\x20list\x20of\x20conditions\x20and\x20the\x20fol\ + lowing\x20disclaimer\n\x20in\x20the\x20documentation\x20and/or\x20other\ + \x20materials\x20provided\x20with\x20the\n\x20distribution.\n\x20\x20\ + \x20\x20\x20*\x20Neither\x20the\x20name\x20of\x20Google\x20Inc.\x20nor\ + \x20the\x20names\x20of\x20its\n\x20contributors\x20may\x20be\x20used\x20\ + to\x20endorse\x20or\x20promote\x20products\x20derived\x20from\n\x20this\ + \x20software\x20without\x20specific\x20prior\x20written\x20permission.\n\ + \n\x20THIS\x20SOFTWARE\x20IS\x20PROVIDED\x20BY\x20THE\x20COPYRIGHT\x20HO\ + LDERS\x20AND\x20CONTRIBUTORS\n\x20\"AS\x20IS\"\x20AND\x20ANY\x20EXPRESS\ + \x20OR\x20IMPLIED\x20WARRANTIES,\x20INCLUDING,\x20BUT\x20NOT\n\x20LIMITE\ + D\x20TO,\x20THE\x20IMPLIED\x20WARRANTIES\x20OF\x20MERCHANTABILITY\x20AND\ + \x20FITNESS\x20FOR\n\x20A\x20PARTICULAR\x20PURPOSE\x20ARE\x20DISCLAIMED.\ + \x20IN\x20NO\x20EVENT\x20SHALL\x20THE\x20COPYRIGHT\n\x20OWNER\x20OR\x20C\ + ONTRIBUTORS\x20BE\x20LIABLE\x20FOR\x20ANY\x20DIRECT,\x20INDIRECT,\x20INC\ + IDENTAL,\n\x20SPECIAL,\x20EXEMPLARY,\x20OR\x20CONSEQUENTIAL\x20DAMAGES\ + \x20(INCLUDING,\x20BUT\x20NOT\n\x20LIMITED\x20TO,\x20PROCUREMENT\x20OF\ + \x20SUBSTITUTE\x20GOODS\x20OR\x20SERVICES;\x20LOSS\x20OF\x20USE,\n\x20DA\ + TA,\x20OR\x20PROFITS;\x20OR\x20BUSINESS\x20INTERRUPTION)\x20HOWEVER\x20C\ + AUSED\x20AND\x20ON\x20ANY\n\x20THEORY\x20OF\x20LIABILITY,\x20WHETHER\x20\ + IN\x20CONTRACT,\x20STRICT\x20LIABILITY,\x20OR\x20TORT\n\x20(INCLUDING\ + \x20NEGLIGENCE\x20OR\x20OTHERWISE)\x20ARISING\x20IN\x20ANY\x20WAY\x20OUT\ + \x20OF\x20THE\x20USE\n\x20OF\x20THIS\x20SOFTWARE,\x20EVEN\x20IF\x20ADVIS\ + ED\x20OF\x20THE\x20POSSIBILITY\x20OF\x20SUCH\x20DAMAGE.\n\n\x08\n\x01\ + \x02\x12\x03\x20\0\x18\n\x08\n\x01\x08\x12\x03\"\0;\n\t\n\x02\x08%\x12\ + \x03\"\0;\n\x08\n\x01\x08\x12\x03#\0C\n\t\n\x02\x08\x0b\x12\x03#\0C\n\ + \x08\n\x01\x08\x12\x03$\0,\n\t\n\x02\x08\x01\x12\x03$\0,\n\x08\n\x01\x08\ + \x12\x03%\0)\n\t\n\x02\x08\x08\x12\x03%\0)\n\x08\n\x01\x08\x12\x03&\0\"\ + \n\t\n\x02\x08\n\x12\x03&\0\"\n\x08\n\x01\x08\x12\x03'\0!\n\t\n\x02\x08$\ + \x12\x03'\0!\n\xfd\x10\n\x02\x04\0\x12\x05|\0\x9d\x01\x01\x1a\xef\x10\ + \x20`Any`\x20contains\x20an\x20arbitrary\x20serialized\x20protocol\x20bu\ + ffer\x20message\x20along\x20with\x20a\n\x20URL\x20that\x20describes\x20t\ + he\x20type\x20of\x20the\x20serialized\x20message.\n\n\x20Protobuf\x20lib\ + rary\x20provides\x20support\x20to\x20pack/unpack\x20Any\x20values\x20in\ + \x20the\x20form\n\x20of\x20utility\x20functions\x20or\x20additional\x20g\ + enerated\x20methods\x20of\x20the\x20Any\x20type.\n\n\x20Example\x201:\ + \x20Pack\x20and\x20unpack\x20a\x20message\x20in\x20C++.\n\n\x20\x20\x20\ + \x20\x20Foo\x20foo\x20=\x20...;\n\x20\x20\x20\x20\x20Any\x20any;\n\x20\ + \x20\x20\x20\x20any.PackFrom(foo);\n\x20\x20\x20\x20\x20...\n\x20\x20\ + \x20\x20\x20if\x20(any.UnpackTo(&foo))\x20{\n\x20\x20\x20\x20\x20\x20\ + \x20...\n\x20\x20\x20\x20\x20}\n\n\x20Example\x202:\x20Pack\x20and\x20un\ + pack\x20a\x20message\x20in\x20Java.\n\n\x20\x20\x20\x20\x20Foo\x20foo\ + \x20=\x20...;\n\x20\x20\x20\x20\x20Any\x20any\x20=\x20Any.pack(foo);\n\ + \x20\x20\x20\x20\x20...\n\x20\x20\x20\x20\x20if\x20(any.is(Foo.class))\ + \x20{\n\x20\x20\x20\x20\x20\x20\x20foo\x20=\x20any.unpack(Foo.class);\n\ + \x20\x20\x20\x20\x20}\n\n\x20\x20Example\x203:\x20Pack\x20and\x20unpack\ + \x20a\x20message\x20in\x20Python.\n\n\x20\x20\x20\x20\x20foo\x20=\x20Foo\ + (...)\n\x20\x20\x20\x20\x20any\x20=\x20Any()\n\x20\x20\x20\x20\x20any.Pa\ + ck(foo)\n\x20\x20\x20\x20\x20...\n\x20\x20\x20\x20\x20if\x20any.Is(Foo.D\ + ESCRIPTOR):\n\x20\x20\x20\x20\x20\x20\x20any.Unpack(foo)\n\x20\x20\x20\ + \x20\x20\x20\x20...\n\n\x20\x20Example\x204:\x20Pack\x20and\x20unpack\ + \x20a\x20message\x20in\x20Go\n\n\x20\x20\x20\x20\x20\x20foo\x20:=\x20&pb\ + .Foo{...}\n\x20\x20\x20\x20\x20\x20any,\x20err\x20:=\x20anypb.New(foo)\n\ + \x20\x20\x20\x20\x20\x20if\x20err\x20!=\x20nil\x20{\n\x20\x20\x20\x20\ + \x20\x20\x20\x20...\n\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20\x20\ + ...\n\x20\x20\x20\x20\x20\x20foo\x20:=\x20&pb.Foo{}\n\x20\x20\x20\x20\ + \x20\x20if\x20err\x20:=\x20any.UnmarshalTo(foo);\x20err\x20!=\x20nil\x20\ + {\n\x20\x20\x20\x20\x20\x20\x20\x20...\n\x20\x20\x20\x20\x20\x20}\n\n\ + \x20The\x20pack\x20methods\x20provided\x20by\x20protobuf\x20library\x20w\ + ill\x20by\x20default\x20use\n\x20'type.googleapis.com/full.type.name'\ + \x20as\x20the\x20type\x20URL\x20and\x20the\x20unpack\n\x20methods\x20onl\ + y\x20use\x20the\x20fully\x20qualified\x20type\x20name\x20after\x20the\ + \x20last\x20'/'\n\x20in\x20the\x20type\x20URL,\x20for\x20example\x20\"fo\ + o.bar.com/x/y.z\"\x20will\x20yield\x20type\n\x20name\x20\"y.z\".\n\n\n\ + \x20JSON\n\x20====\n\x20The\x20JSON\x20representation\x20of\x20an\x20`An\ + y`\x20value\x20uses\x20the\x20regular\n\x20representation\x20of\x20the\ + \x20deserialized,\x20embedded\x20message,\x20with\x20an\n\x20additional\ + \x20field\x20`@type`\x20which\x20contains\x20the\x20type\x20URL.\x20Exam\ + ple:\n\n\x20\x20\x20\x20\x20package\x20google.profile;\n\x20\x20\x20\x20\ + \x20message\x20Person\x20{\n\x20\x20\x20\x20\x20\x20\x20string\x20first_\ + name\x20=\x201;\n\x20\x20\x20\x20\x20\x20\x20string\x20last_name\x20=\ + \x202;\n\x20\x20\x20\x20\x20}\n\n\x20\x20\x20\x20\x20{\n\x20\x20\x20\x20\ + \x20\x20\x20\"@type\":\x20\"type.googleapis.com/google.profile.Person\",\ + \n\x20\x20\x20\x20\x20\x20\x20\"firstName\":\x20<string>,\n\x20\x20\x20\ + \x20\x20\x20\x20\"lastName\":\x20<string>\n\x20\x20\x20\x20\x20}\n\n\x20\ + If\x20the\x20embedded\x20message\x20type\x20is\x20well-known\x20and\x20h\ + as\x20a\x20custom\x20JSON\n\x20representation,\x20that\x20representation\ + \x20will\x20be\x20embedded\x20adding\x20a\x20field\n\x20`value`\x20which\ + \x20holds\x20the\x20custom\x20JSON\x20in\x20addition\x20to\x20the\x20`@t\ + ype`\n\x20field.\x20Example\x20(for\x20message\x20[google.protobuf.Durat\ + ion][]):\n\n\x20\x20\x20\x20\x20{\n\x20\x20\x20\x20\x20\x20\x20\"@type\"\ + :\x20\"type.googleapis.com/google.protobuf.Duration\",\n\x20\x20\x20\x20\ + \x20\x20\x20\"value\":\x20\"1.212s\"\n\x20\x20\x20\x20\x20}\n\n\n\n\n\ + \x03\x04\0\x01\x12\x03|\x08\x0b\n\xd7\n\n\x04\x04\0\x02\0\x12\x04\x99\ + \x01\x02\x16\x1a\xc8\n\x20A\x20URL/resource\x20name\x20that\x20uniquely\ + \x20identifies\x20the\x20type\x20of\x20the\x20serialized\n\x20protocol\ + \x20buffer\x20message.\x20This\x20string\x20must\x20contain\x20at\x20lea\ + st\n\x20one\x20\"/\"\x20character.\x20The\x20last\x20segment\x20of\x20th\ + e\x20URL's\x20path\x20must\x20represent\n\x20the\x20fully\x20qualified\ + \x20name\x20of\x20the\x20type\x20(as\x20in\n\x20`path/google.protobuf.Du\ + ration`).\x20The\x20name\x20should\x20be\x20in\x20a\x20canonical\x20form\ + \n\x20(e.g.,\x20leading\x20\".\"\x20is\x20not\x20accepted).\n\n\x20In\ + \x20practice,\x20teams\x20usually\x20precompile\x20into\x20the\x20binary\ + \x20all\x20types\x20that\x20they\n\x20expect\x20it\x20to\x20use\x20in\ + \x20the\x20context\x20of\x20Any.\x20However,\x20for\x20URLs\x20which\x20\ + use\x20the\n\x20scheme\x20`http`,\x20`https`,\x20or\x20no\x20scheme,\x20\ + one\x20can\x20optionally\x20set\x20up\x20a\x20type\n\x20server\x20that\ + \x20maps\x20type\x20URLs\x20to\x20message\x20definitions\x20as\x20follow\ + s:\n\n\x20*\x20If\x20no\x20scheme\x20is\x20provided,\x20`https`\x20is\ + \x20assumed.\n\x20*\x20An\x20HTTP\x20GET\x20on\x20the\x20URL\x20must\x20\ + yield\x20a\x20[google.protobuf.Type][]\n\x20\x20\x20value\x20in\x20binar\ + y\x20format,\x20or\x20produce\x20an\x20error.\n\x20*\x20Applications\x20\ + are\x20allowed\x20to\x20cache\x20lookup\x20results\x20based\x20on\x20the\ + \n\x20\x20\x20URL,\x20or\x20have\x20them\x20precompiled\x20into\x20a\x20\ + binary\x20to\x20avoid\x20any\n\x20\x20\x20lookup.\x20Therefore,\x20binar\ + y\x20compatibility\x20needs\x20to\x20be\x20preserved\n\x20\x20\x20on\x20\ + changes\x20to\x20types.\x20(Use\x20versioned\x20type\x20names\x20to\x20m\ + anage\n\x20\x20\x20breaking\x20changes.)\n\n\x20Note:\x20this\x20functio\ + nality\x20is\x20not\x20currently\x20available\x20in\x20the\x20official\n\ + \x20protobuf\x20release,\x20and\x20it\x20is\x20not\x20used\x20for\x20typ\ + e\x20URLs\x20beginning\x20with\n\x20type.googleapis.com.\n\n\x20Schemes\ + \x20other\x20than\x20`http`,\x20`https`\x20(or\x20the\x20empty\x20scheme\ + )\x20might\x20be\n\x20used\x20with\x20implementation\x20specific\x20sema\ + ntics.\n\n\n\r\n\x05\x04\0\x02\0\x05\x12\x04\x99\x01\x02\x08\n\r\n\x05\ + \x04\0\x02\0\x01\x12\x04\x99\x01\t\x11\n\r\n\x05\x04\0\x02\0\x03\x12\x04\ + \x99\x01\x14\x15\nW\n\x04\x04\0\x02\x01\x12\x04\x9c\x01\x02\x12\x1aI\x20\ + Must\x20be\x20a\x20valid\x20serialized\x20protocol\x20buffer\x20of\x20th\ + e\x20above\x20specified\x20type.\n\n\r\n\x05\x04\0\x02\x01\x05\x12\x04\ + \x9c\x01\x02\x07\n\r\n\x05\x04\0\x02\x01\x01\x12\x04\x9c\x01\x08\r\n\r\n\ + \x05\x04\0\x02\x01\x03\x12\x04\x9c\x01\x10\x11b\x06proto3\ +"; + +static file_descriptor_proto_lazy: crate::rt::LazyV2<crate::descriptor::FileDescriptorProto> = crate::rt::LazyV2::INIT; + +fn parse_descriptor_proto() -> crate::descriptor::FileDescriptorProto { + crate::Message::parse_from_bytes(file_descriptor_proto_data).unwrap() +} + +pub fn file_descriptor_proto() -> &'static crate::descriptor::FileDescriptorProto { + file_descriptor_proto_lazy.get(|| { + parse_descriptor_proto() + }) +} diff --git a/2.27.1/src/well_known_types/api.rs b/2.27.1/src/well_known_types/api.rs new file mode 100644 index 0000000..ef97015 --- /dev/null +++ b/2.27.1/src/well_known_types/api.rs @@ -0,0 +1,1292 @@ +// This file is generated by rust-protobuf 2.26.0. Do not edit +// @generated + +// https://github.com/rust-lang/rust-clippy/issues/702 +#![allow(unknown_lints)] +#![allow(clippy::all)] + +#![allow(unused_attributes)] +#![cfg_attr(rustfmt, rustfmt::skip)] + +#![allow(box_pointers)] +#![allow(dead_code)] +#![allow(missing_docs)] +#![allow(non_camel_case_types)] +#![allow(non_snake_case)] +#![allow(non_upper_case_globals)] +#![allow(trivial_casts)] +#![allow(unused_imports)] +#![allow(unused_results)] +//! Generated file from `google/protobuf/api.proto` + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct Api { + // message fields + pub name: ::std::string::String, + pub methods: crate::RepeatedField<Method>, + pub options: crate::RepeatedField<crate::well_known_types::Option>, + pub version: ::std::string::String, + pub source_context: crate::SingularPtrField<crate::well_known_types::SourceContext>, + pub mixins: crate::RepeatedField<Mixin>, + pub syntax: crate::well_known_types::Syntax, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a Api { + fn default() -> &'a Api { + <Api as crate::Message>::default_instance() + } +} + +impl Api { + pub fn new() -> Api { + ::std::default::Default::default() + } + + // string name = 1; + + + pub fn get_name(&self) -> &str { + &self.name + } + pub fn clear_name(&mut self) { + self.name.clear(); + } + + // Param is passed by value, moved + pub fn set_name(&mut self, v: ::std::string::String) { + self.name = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_name(&mut self) -> &mut ::std::string::String { + &mut self.name + } + + // Take field + pub fn take_name(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.name, ::std::string::String::new()) + } + + // repeated .google.protobuf.Method methods = 2; + + + pub fn get_methods(&self) -> &[Method] { + &self.methods + } + pub fn clear_methods(&mut self) { + self.methods.clear(); + } + + // Param is passed by value, moved + pub fn set_methods(&mut self, v: crate::RepeatedField<Method>) { + self.methods = v; + } + + // Mutable pointer to the field. + pub fn mut_methods(&mut self) -> &mut crate::RepeatedField<Method> { + &mut self.methods + } + + // Take field + pub fn take_methods(&mut self) -> crate::RepeatedField<Method> { + ::std::mem::replace(&mut self.methods, crate::RepeatedField::new()) + } + + // repeated .google.protobuf.Option options = 3; + + + pub fn get_options(&self) -> &[crate::well_known_types::Option] { + &self.options + } + pub fn clear_options(&mut self) { + self.options.clear(); + } + + // Param is passed by value, moved + pub fn set_options(&mut self, v: crate::RepeatedField<crate::well_known_types::Option>) { + self.options = v; + } + + // Mutable pointer to the field. + pub fn mut_options(&mut self) -> &mut crate::RepeatedField<crate::well_known_types::Option> { + &mut self.options + } + + // Take field + pub fn take_options(&mut self) -> crate::RepeatedField<crate::well_known_types::Option> { + ::std::mem::replace(&mut self.options, crate::RepeatedField::new()) + } + + // string version = 4; + + + pub fn get_version(&self) -> &str { + &self.version + } + pub fn clear_version(&mut self) { + self.version.clear(); + } + + // Param is passed by value, moved + pub fn set_version(&mut self, v: ::std::string::String) { + self.version = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_version(&mut self) -> &mut ::std::string::String { + &mut self.version + } + + // Take field + pub fn take_version(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.version, ::std::string::String::new()) + } + + // .google.protobuf.SourceContext source_context = 5; + + + pub fn get_source_context(&self) -> &crate::well_known_types::SourceContext { + self.source_context.as_ref().unwrap_or_else(|| <crate::well_known_types::SourceContext as crate::Message>::default_instance()) + } + pub fn clear_source_context(&mut self) { + self.source_context.clear(); + } + + pub fn has_source_context(&self) -> bool { + self.source_context.is_some() + } + + // Param is passed by value, moved + pub fn set_source_context(&mut self, v: crate::well_known_types::SourceContext) { + self.source_context = crate::SingularPtrField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_source_context(&mut self) -> &mut crate::well_known_types::SourceContext { + if self.source_context.is_none() { + self.source_context.set_default(); + } + self.source_context.as_mut().unwrap() + } + + // Take field + pub fn take_source_context(&mut self) -> crate::well_known_types::SourceContext { + self.source_context.take().unwrap_or_else(|| crate::well_known_types::SourceContext::new()) + } + + // repeated .google.protobuf.Mixin mixins = 6; + + + pub fn get_mixins(&self) -> &[Mixin] { + &self.mixins + } + pub fn clear_mixins(&mut self) { + self.mixins.clear(); + } + + // Param is passed by value, moved + pub fn set_mixins(&mut self, v: crate::RepeatedField<Mixin>) { + self.mixins = v; + } + + // Mutable pointer to the field. + pub fn mut_mixins(&mut self) -> &mut crate::RepeatedField<Mixin> { + &mut self.mixins + } + + // Take field + pub fn take_mixins(&mut self) -> crate::RepeatedField<Mixin> { + ::std::mem::replace(&mut self.mixins, crate::RepeatedField::new()) + } + + // .google.protobuf.Syntax syntax = 7; + + + pub fn get_syntax(&self) -> crate::well_known_types::Syntax { + self.syntax + } + pub fn clear_syntax(&mut self) { + self.syntax = crate::well_known_types::Syntax::SYNTAX_PROTO2; + } + + // Param is passed by value, moved + pub fn set_syntax(&mut self, v: crate::well_known_types::Syntax) { + self.syntax = v; + } +} + +impl crate::Message for Api { + fn is_initialized(&self) -> bool { + for v in &self.methods { + if !v.is_initialized() { + return false; + } + }; + for v in &self.options { + if !v.is_initialized() { + return false; + } + }; + for v in &self.source_context { + if !v.is_initialized() { + return false; + } + }; + for v in &self.mixins { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_proto3_string_into(wire_type, is, &mut self.name)?; + }, + 2 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.methods)?; + }, + 3 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.options)?; + }, + 4 => { + crate::rt::read_singular_proto3_string_into(wire_type, is, &mut self.version)?; + }, + 5 => { + crate::rt::read_singular_message_into(wire_type, is, &mut self.source_context)?; + }, + 6 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.mixins)?; + }, + 7 => { + crate::rt::read_proto3_enum_with_unknown_fields_into(wire_type, is, &mut self.syntax, 7, &mut self.unknown_fields)? + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if !self.name.is_empty() { + my_size += crate::rt::string_size(1, &self.name); + } + for value in &self.methods { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + for value in &self.options { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + if !self.version.is_empty() { + my_size += crate::rt::string_size(4, &self.version); + } + if let Some(ref v) = self.source_context.as_ref() { + let len = v.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + } + for value in &self.mixins { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + if self.syntax != crate::well_known_types::Syntax::SYNTAX_PROTO2 { + my_size += crate::rt::enum_size(7, self.syntax); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if !self.name.is_empty() { + os.write_string(1, &self.name)?; + } + for v in &self.methods { + os.write_tag(2, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + for v in &self.options { + os.write_tag(3, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + if !self.version.is_empty() { + os.write_string(4, &self.version)?; + } + if let Some(ref v) = self.source_context.as_ref() { + os.write_tag(5, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + } + for v in &self.mixins { + os.write_tag(6, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + if self.syntax != crate::well_known_types::Syntax::SYNTAX_PROTO2 { + os.write_enum(7, crate::ProtobufEnum::value(&self.syntax))?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> Api { + Api::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeString>( + "name", + |m: &Api| { &m.name }, + |m: &mut Api| { &mut m.name }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<Method>>( + "methods", + |m: &Api| { &m.methods }, + |m: &mut Api| { &mut m.methods }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<crate::well_known_types::Option>>( + "options", + |m: &Api| { &m.options }, + |m: &mut Api| { &mut m.options }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeString>( + "version", + |m: &Api| { &m.version }, + |m: &mut Api| { &mut m.version }, + )); + fields.push(crate::reflect::accessor::make_singular_ptr_field_accessor::<_, crate::types::ProtobufTypeMessage<crate::well_known_types::SourceContext>>( + "source_context", + |m: &Api| { &m.source_context }, + |m: &mut Api| { &mut m.source_context }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<Mixin>>( + "mixins", + |m: &Api| { &m.mixins }, + |m: &mut Api| { &mut m.mixins }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeEnum<crate::well_known_types::Syntax>>( + "syntax", + |m: &Api| { &m.syntax }, + |m: &mut Api| { &mut m.syntax }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<Api>( + "Api", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static Api { + static instance: crate::rt::LazyV2<Api> = crate::rt::LazyV2::INIT; + instance.get(Api::new) + } +} + +impl crate::Clear for Api { + fn clear(&mut self) { + self.name.clear(); + self.methods.clear(); + self.options.clear(); + self.version.clear(); + self.source_context.clear(); + self.mixins.clear(); + self.syntax = crate::well_known_types::Syntax::SYNTAX_PROTO2; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for Api { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for Api { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct Method { + // message fields + pub name: ::std::string::String, + pub request_type_url: ::std::string::String, + pub request_streaming: bool, + pub response_type_url: ::std::string::String, + pub response_streaming: bool, + pub options: crate::RepeatedField<crate::well_known_types::Option>, + pub syntax: crate::well_known_types::Syntax, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a Method { + fn default() -> &'a Method { + <Method as crate::Message>::default_instance() + } +} + +impl Method { + pub fn new() -> Method { + ::std::default::Default::default() + } + + // string name = 1; + + + pub fn get_name(&self) -> &str { + &self.name + } + pub fn clear_name(&mut self) { + self.name.clear(); + } + + // Param is passed by value, moved + pub fn set_name(&mut self, v: ::std::string::String) { + self.name = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_name(&mut self) -> &mut ::std::string::String { + &mut self.name + } + + // Take field + pub fn take_name(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.name, ::std::string::String::new()) + } + + // string request_type_url = 2; + + + pub fn get_request_type_url(&self) -> &str { + &self.request_type_url + } + pub fn clear_request_type_url(&mut self) { + self.request_type_url.clear(); + } + + // Param is passed by value, moved + pub fn set_request_type_url(&mut self, v: ::std::string::String) { + self.request_type_url = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_request_type_url(&mut self) -> &mut ::std::string::String { + &mut self.request_type_url + } + + // Take field + pub fn take_request_type_url(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.request_type_url, ::std::string::String::new()) + } + + // bool request_streaming = 3; + + + pub fn get_request_streaming(&self) -> bool { + self.request_streaming + } + pub fn clear_request_streaming(&mut self) { + self.request_streaming = false; + } + + // Param is passed by value, moved + pub fn set_request_streaming(&mut self, v: bool) { + self.request_streaming = v; + } + + // string response_type_url = 4; + + + pub fn get_response_type_url(&self) -> &str { + &self.response_type_url + } + pub fn clear_response_type_url(&mut self) { + self.response_type_url.clear(); + } + + // Param is passed by value, moved + pub fn set_response_type_url(&mut self, v: ::std::string::String) { + self.response_type_url = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_response_type_url(&mut self) -> &mut ::std::string::String { + &mut self.response_type_url + } + + // Take field + pub fn take_response_type_url(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.response_type_url, ::std::string::String::new()) + } + + // bool response_streaming = 5; + + + pub fn get_response_streaming(&self) -> bool { + self.response_streaming + } + pub fn clear_response_streaming(&mut self) { + self.response_streaming = false; + } + + // Param is passed by value, moved + pub fn set_response_streaming(&mut self, v: bool) { + self.response_streaming = v; + } + + // repeated .google.protobuf.Option options = 6; + + + pub fn get_options(&self) -> &[crate::well_known_types::Option] { + &self.options + } + pub fn clear_options(&mut self) { + self.options.clear(); + } + + // Param is passed by value, moved + pub fn set_options(&mut self, v: crate::RepeatedField<crate::well_known_types::Option>) { + self.options = v; + } + + // Mutable pointer to the field. + pub fn mut_options(&mut self) -> &mut crate::RepeatedField<crate::well_known_types::Option> { + &mut self.options + } + + // Take field + pub fn take_options(&mut self) -> crate::RepeatedField<crate::well_known_types::Option> { + ::std::mem::replace(&mut self.options, crate::RepeatedField::new()) + } + + // .google.protobuf.Syntax syntax = 7; + + + pub fn get_syntax(&self) -> crate::well_known_types::Syntax { + self.syntax + } + pub fn clear_syntax(&mut self) { + self.syntax = crate::well_known_types::Syntax::SYNTAX_PROTO2; + } + + // Param is passed by value, moved + pub fn set_syntax(&mut self, v: crate::well_known_types::Syntax) { + self.syntax = v; + } +} + +impl crate::Message for Method { + fn is_initialized(&self) -> bool { + for v in &self.options { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_proto3_string_into(wire_type, is, &mut self.name)?; + }, + 2 => { + crate::rt::read_singular_proto3_string_into(wire_type, is, &mut self.request_type_url)?; + }, + 3 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.request_streaming = tmp; + }, + 4 => { + crate::rt::read_singular_proto3_string_into(wire_type, is, &mut self.response_type_url)?; + }, + 5 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.response_streaming = tmp; + }, + 6 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.options)?; + }, + 7 => { + crate::rt::read_proto3_enum_with_unknown_fields_into(wire_type, is, &mut self.syntax, 7, &mut self.unknown_fields)? + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if !self.name.is_empty() { + my_size += crate::rt::string_size(1, &self.name); + } + if !self.request_type_url.is_empty() { + my_size += crate::rt::string_size(2, &self.request_type_url); + } + if self.request_streaming != false { + my_size += 2; + } + if !self.response_type_url.is_empty() { + my_size += crate::rt::string_size(4, &self.response_type_url); + } + if self.response_streaming != false { + my_size += 2; + } + for value in &self.options { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + if self.syntax != crate::well_known_types::Syntax::SYNTAX_PROTO2 { + my_size += crate::rt::enum_size(7, self.syntax); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if !self.name.is_empty() { + os.write_string(1, &self.name)?; + } + if !self.request_type_url.is_empty() { + os.write_string(2, &self.request_type_url)?; + } + if self.request_streaming != false { + os.write_bool(3, self.request_streaming)?; + } + if !self.response_type_url.is_empty() { + os.write_string(4, &self.response_type_url)?; + } + if self.response_streaming != false { + os.write_bool(5, self.response_streaming)?; + } + for v in &self.options { + os.write_tag(6, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + if self.syntax != crate::well_known_types::Syntax::SYNTAX_PROTO2 { + os.write_enum(7, crate::ProtobufEnum::value(&self.syntax))?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> Method { + Method::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeString>( + "name", + |m: &Method| { &m.name }, + |m: &mut Method| { &mut m.name }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeString>( + "request_type_url", + |m: &Method| { &m.request_type_url }, + |m: &mut Method| { &mut m.request_type_url }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeBool>( + "request_streaming", + |m: &Method| { &m.request_streaming }, + |m: &mut Method| { &mut m.request_streaming }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeString>( + "response_type_url", + |m: &Method| { &m.response_type_url }, + |m: &mut Method| { &mut m.response_type_url }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeBool>( + "response_streaming", + |m: &Method| { &m.response_streaming }, + |m: &mut Method| { &mut m.response_streaming }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<crate::well_known_types::Option>>( + "options", + |m: &Method| { &m.options }, + |m: &mut Method| { &mut m.options }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeEnum<crate::well_known_types::Syntax>>( + "syntax", + |m: &Method| { &m.syntax }, + |m: &mut Method| { &mut m.syntax }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<Method>( + "Method", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static Method { + static instance: crate::rt::LazyV2<Method> = crate::rt::LazyV2::INIT; + instance.get(Method::new) + } +} + +impl crate::Clear for Method { + fn clear(&mut self) { + self.name.clear(); + self.request_type_url.clear(); + self.request_streaming = false; + self.response_type_url.clear(); + self.response_streaming = false; + self.options.clear(); + self.syntax = crate::well_known_types::Syntax::SYNTAX_PROTO2; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for Method { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for Method { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct Mixin { + // message fields + pub name: ::std::string::String, + pub root: ::std::string::String, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a Mixin { + fn default() -> &'a Mixin { + <Mixin as crate::Message>::default_instance() + } +} + +impl Mixin { + pub fn new() -> Mixin { + ::std::default::Default::default() + } + + // string name = 1; + + + pub fn get_name(&self) -> &str { + &self.name + } + pub fn clear_name(&mut self) { + self.name.clear(); + } + + // Param is passed by value, moved + pub fn set_name(&mut self, v: ::std::string::String) { + self.name = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_name(&mut self) -> &mut ::std::string::String { + &mut self.name + } + + // Take field + pub fn take_name(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.name, ::std::string::String::new()) + } + + // string root = 2; + + + pub fn get_root(&self) -> &str { + &self.root + } + pub fn clear_root(&mut self) { + self.root.clear(); + } + + // Param is passed by value, moved + pub fn set_root(&mut self, v: ::std::string::String) { + self.root = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_root(&mut self) -> &mut ::std::string::String { + &mut self.root + } + + // Take field + pub fn take_root(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.root, ::std::string::String::new()) + } +} + +impl crate::Message for Mixin { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_proto3_string_into(wire_type, is, &mut self.name)?; + }, + 2 => { + crate::rt::read_singular_proto3_string_into(wire_type, is, &mut self.root)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if !self.name.is_empty() { + my_size += crate::rt::string_size(1, &self.name); + } + if !self.root.is_empty() { + my_size += crate::rt::string_size(2, &self.root); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if !self.name.is_empty() { + os.write_string(1, &self.name)?; + } + if !self.root.is_empty() { + os.write_string(2, &self.root)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> Mixin { + Mixin::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeString>( + "name", + |m: &Mixin| { &m.name }, + |m: &mut Mixin| { &mut m.name }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeString>( + "root", + |m: &Mixin| { &m.root }, + |m: &mut Mixin| { &mut m.root }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<Mixin>( + "Mixin", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static Mixin { + static instance: crate::rt::LazyV2<Mixin> = crate::rt::LazyV2::INIT; + instance.get(Mixin::new) + } +} + +impl crate::Clear for Mixin { + fn clear(&mut self) { + self.name.clear(); + self.root.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for Mixin { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for Mixin { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +static file_descriptor_proto_data: &'static [u8] = b"\ + \n\x19google/protobuf/api.proto\x12\x0fgoogle.protobuf\x1a$google/protob\ + uf/source_context.proto\x1a\x1agoogle/protobuf/type.proto\"\xc1\x02\n\ + \x03Api\x12\x12\n\x04name\x18\x01\x20\x01(\tR\x04name\x121\n\x07methods\ + \x18\x02\x20\x03(\x0b2\x17.google.protobuf.MethodR\x07methods\x121\n\x07\ + options\x18\x03\x20\x03(\x0b2\x17.google.protobuf.OptionR\x07options\x12\ + \x18\n\x07version\x18\x04\x20\x01(\tR\x07version\x12E\n\x0esource_contex\ + t\x18\x05\x20\x01(\x0b2\x1e.google.protobuf.SourceContextR\rsourceContex\ + t\x12.\n\x06mixins\x18\x06\x20\x03(\x0b2\x16.google.protobuf.MixinR\x06m\ + ixins\x12/\n\x06syntax\x18\x07\x20\x01(\x0e2\x17.google.protobuf.SyntaxR\ + \x06syntax\"\xb2\x02\n\x06Method\x12\x12\n\x04name\x18\x01\x20\x01(\tR\ + \x04name\x12(\n\x10request_type_url\x18\x02\x20\x01(\tR\x0erequestTypeUr\ + l\x12+\n\x11request_streaming\x18\x03\x20\x01(\x08R\x10requestStreaming\ + \x12*\n\x11response_type_url\x18\x04\x20\x01(\tR\x0fresponseTypeUrl\x12-\ + \n\x12response_streaming\x18\x05\x20\x01(\x08R\x11responseStreaming\x121\ + \n\x07options\x18\x06\x20\x03(\x0b2\x17.google.protobuf.OptionR\x07optio\ + ns\x12/\n\x06syntax\x18\x07\x20\x01(\x0e2\x17.google.protobuf.SyntaxR\ + \x06syntax\"/\n\x05Mixin\x12\x12\n\x04name\x18\x01\x20\x01(\tR\x04name\ + \x12\x12\n\x04root\x18\x02\x20\x01(\tR\x04rootBv\n\x13com.google.protobu\ + fB\x08ApiProtoP\x01Z,google.golang.org/protobuf/types/known/apipb\xa2\ + \x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesJ\x81<\n\x07\x12\ + \x05\x1e\0\xcf\x01\x01\n\xcc\x0c\n\x01\x0c\x12\x03\x1e\0\x122\xc1\x0c\ + \x20Protocol\x20Buffers\x20-\x20Google's\x20data\x20interchange\x20forma\ + t\n\x20Copyright\x202008\x20Google\x20Inc.\x20\x20All\x20rights\x20reser\ + ved.\n\x20https://developers.google.com/protocol-buffers/\n\n\x20Redistr\ + ibution\x20and\x20use\x20in\x20source\x20and\x20binary\x20forms,\x20with\ + \x20or\x20without\n\x20modification,\x20are\x20permitted\x20provided\x20\ + that\x20the\x20following\x20conditions\x20are\n\x20met:\n\n\x20\x20\x20\ + \x20\x20*\x20Redistributions\x20of\x20source\x20code\x20must\x20retain\ + \x20the\x20above\x20copyright\n\x20notice,\x20this\x20list\x20of\x20cond\ + itions\x20and\x20the\x20following\x20disclaimer.\n\x20\x20\x20\x20\x20*\ + \x20Redistributions\x20in\x20binary\x20form\x20must\x20reproduce\x20the\ + \x20above\n\x20copyright\x20notice,\x20this\x20list\x20of\x20conditions\ + \x20and\x20the\x20following\x20disclaimer\n\x20in\x20the\x20documentatio\ + n\x20and/or\x20other\x20materials\x20provided\x20with\x20the\n\x20distri\ + bution.\n\x20\x20\x20\x20\x20*\x20Neither\x20the\x20name\x20of\x20Google\ + \x20Inc.\x20nor\x20the\x20names\x20of\x20its\n\x20contributors\x20may\ + \x20be\x20used\x20to\x20endorse\x20or\x20promote\x20products\x20derived\ + \x20from\n\x20this\x20software\x20without\x20specific\x20prior\x20writte\ + n\x20permission.\n\n\x20THIS\x20SOFTWARE\x20IS\x20PROVIDED\x20BY\x20THE\ + \x20COPYRIGHT\x20HOLDERS\x20AND\x20CONTRIBUTORS\n\x20\"AS\x20IS\"\x20AND\ + \x20ANY\x20EXPRESS\x20OR\x20IMPLIED\x20WARRANTIES,\x20INCLUDING,\x20BUT\ + \x20NOT\n\x20LIMITED\x20TO,\x20THE\x20IMPLIED\x20WARRANTIES\x20OF\x20MER\ + CHANTABILITY\x20AND\x20FITNESS\x20FOR\n\x20A\x20PARTICULAR\x20PURPOSE\ + \x20ARE\x20DISCLAIMED.\x20IN\x20NO\x20EVENT\x20SHALL\x20THE\x20COPYRIGHT\ + \n\x20OWNER\x20OR\x20CONTRIBUTORS\x20BE\x20LIABLE\x20FOR\x20ANY\x20DIREC\ + T,\x20INDIRECT,\x20INCIDENTAL,\n\x20SPECIAL,\x20EXEMPLARY,\x20OR\x20CONS\ + EQUENTIAL\x20DAMAGES\x20(INCLUDING,\x20BUT\x20NOT\n\x20LIMITED\x20TO,\ + \x20PROCUREMENT\x20OF\x20SUBSTITUTE\x20GOODS\x20OR\x20SERVICES;\x20LOSS\ + \x20OF\x20USE,\n\x20DATA,\x20OR\x20PROFITS;\x20OR\x20BUSINESS\x20INTERRU\ + PTION)\x20HOWEVER\x20CAUSED\x20AND\x20ON\x20ANY\n\x20THEORY\x20OF\x20LIA\ + BILITY,\x20WHETHER\x20IN\x20CONTRACT,\x20STRICT\x20LIABILITY,\x20OR\x20T\ + ORT\n\x20(INCLUDING\x20NEGLIGENCE\x20OR\x20OTHERWISE)\x20ARISING\x20IN\ + \x20ANY\x20WAY\x20OUT\x20OF\x20THE\x20USE\n\x20OF\x20THIS\x20SOFTWARE,\ + \x20EVEN\x20IF\x20ADVISED\x20OF\x20THE\x20POSSIBILITY\x20OF\x20SUCH\x20D\ + AMAGE.\n\n\x08\n\x01\x02\x12\x03\x20\0\x18\n\t\n\x02\x03\0\x12\x03\"\0.\ + \n\t\n\x02\x03\x01\x12\x03#\0$\n\x08\n\x01\x08\x12\x03%\0;\n\t\n\x02\x08\ + %\x12\x03%\0;\n\x08\n\x01\x08\x12\x03&\0,\n\t\n\x02\x08\x01\x12\x03&\0,\ + \n\x08\n\x01\x08\x12\x03'\0)\n\t\n\x02\x08\x08\x12\x03'\0)\n\x08\n\x01\ + \x08\x12\x03(\0\"\n\t\n\x02\x08\n\x12\x03(\0\"\n\x08\n\x01\x08\x12\x03)\ + \0!\n\t\n\x02\x08$\x12\x03)\0!\n\x08\n\x01\x08\x12\x03*\0C\n\t\n\x02\x08\ + \x0b\x12\x03*\0C\n\xab\x04\n\x02\x04\0\x12\x045\0`\x01\x1a\x9e\x04\x20Ap\ + i\x20is\x20a\x20light-weight\x20descriptor\x20for\x20an\x20API\x20Interf\ + ace.\n\n\x20Interfaces\x20are\x20also\x20described\x20as\x20\"protocol\ + \x20buffer\x20services\"\x20in\x20some\x20contexts,\n\x20such\x20as\x20b\ + y\x20the\x20\"service\"\x20keyword\x20in\x20a\x20.proto\x20file,\x20but\ + \x20they\x20are\x20different\n\x20from\x20API\x20Services,\x20which\x20r\ + epresent\x20a\x20concrete\x20implementation\x20of\x20an\x20interface\n\ + \x20as\x20opposed\x20to\x20simply\x20a\x20description\x20of\x20methods\ + \x20and\x20bindings.\x20They\x20are\x20also\n\x20sometimes\x20simply\x20\ + referred\x20to\x20as\x20\"APIs\"\x20in\x20other\x20contexts,\x20such\x20\ + as\x20the\x20name\x20of\n\x20this\x20message\x20itself.\x20See\x20https:\ + //cloud.google.com/apis/design/glossary\x20for\n\x20detailed\x20terminol\ + ogy.\n\n\n\n\x03\x04\0\x01\x12\x035\x08\x0b\n{\n\x04\x04\0\x02\0\x12\x03\ + 8\x02\x12\x1an\x20The\x20fully\x20qualified\x20name\x20of\x20this\x20int\ + erface,\x20including\x20package\x20name\n\x20followed\x20by\x20the\x20in\ + terface's\x20simple\x20name.\n\n\x0c\n\x05\x04\0\x02\0\x05\x12\x038\x02\ + \x08\n\x0c\n\x05\x04\0\x02\0\x01\x12\x038\t\r\n\x0c\n\x05\x04\0\x02\0\ + \x03\x12\x038\x10\x11\nC\n\x04\x04\0\x02\x01\x12\x03;\x02\x1e\x1a6\x20Th\ + e\x20methods\x20of\x20this\x20interface,\x20in\x20unspecified\x20order.\ + \n\n\x0c\n\x05\x04\0\x02\x01\x04\x12\x03;\x02\n\n\x0c\n\x05\x04\0\x02\ + \x01\x06\x12\x03;\x0b\x11\n\x0c\n\x05\x04\0\x02\x01\x01\x12\x03;\x12\x19\ + \n\x0c\n\x05\x04\0\x02\x01\x03\x12\x03;\x1c\x1d\n6\n\x04\x04\0\x02\x02\ + \x12\x03>\x02\x1e\x1a)\x20Any\x20metadata\x20attached\x20to\x20the\x20in\ + terface.\n\n\x0c\n\x05\x04\0\x02\x02\x04\x12\x03>\x02\n\n\x0c\n\x05\x04\ + \0\x02\x02\x06\x12\x03>\x0b\x11\n\x0c\n\x05\x04\0\x02\x02\x01\x12\x03>\ + \x12\x19\n\x0c\n\x05\x04\0\x02\x02\x03\x12\x03>\x1c\x1d\n\x82\x08\n\x04\ + \x04\0\x02\x03\x12\x03U\x02\x15\x1a\xf4\x07\x20A\x20version\x20string\ + \x20for\x20this\x20interface.\x20If\x20specified,\x20must\x20have\x20the\ + \x20form\n\x20`major-version.minor-version`,\x20as\x20in\x20`1.10`.\x20I\ + f\x20the\x20minor\x20version\x20is\n\x20omitted,\x20it\x20defaults\x20to\ + \x20zero.\x20If\x20the\x20entire\x20version\x20field\x20is\x20empty,\x20\ + the\n\x20major\x20version\x20is\x20derived\x20from\x20the\x20package\x20\ + name,\x20as\x20outlined\x20below.\x20If\x20the\n\x20field\x20is\x20not\ + \x20empty,\x20the\x20version\x20in\x20the\x20package\x20name\x20will\x20\ + be\x20verified\x20to\x20be\n\x20consistent\x20with\x20what\x20is\x20prov\ + ided\x20here.\n\n\x20The\x20versioning\x20schema\x20uses\x20[semantic\n\ + \x20versioning](http://semver.org)\x20where\x20the\x20major\x20version\ + \x20number\n\x20indicates\x20a\x20breaking\x20change\x20and\x20the\x20mi\ + nor\x20version\x20an\x20additive,\n\x20non-breaking\x20change.\x20Both\ + \x20version\x20numbers\x20are\x20signals\x20to\x20users\n\x20what\x20to\ + \x20expect\x20from\x20different\x20versions,\x20and\x20should\x20be\x20c\ + arefully\n\x20chosen\x20based\x20on\x20the\x20product\x20plan.\n\n\x20Th\ + e\x20major\x20version\x20is\x20also\x20reflected\x20in\x20the\x20package\ + \x20name\x20of\x20the\n\x20interface,\x20which\x20must\x20end\x20in\x20`\ + v<major-version>`,\x20as\x20in\n\x20`google.feature.v1`.\x20For\x20major\ + \x20versions\x200\x20and\x201,\x20the\x20suffix\x20can\n\x20be\x20omitte\ + d.\x20Zero\x20major\x20versions\x20must\x20only\x20be\x20used\x20for\n\ + \x20experimental,\x20non-GA\x20interfaces.\n\n\n\n\x0c\n\x05\x04\0\x02\ + \x03\x05\x12\x03U\x02\x08\n\x0c\n\x05\x04\0\x02\x03\x01\x12\x03U\t\x10\n\ + \x0c\n\x05\x04\0\x02\x03\x03\x12\x03U\x13\x14\n[\n\x04\x04\0\x02\x04\x12\ + \x03Y\x02#\x1aN\x20Source\x20context\x20for\x20the\x20protocol\x20buffer\ + \x20service\x20represented\x20by\x20this\n\x20message.\n\n\x0c\n\x05\x04\ + \0\x02\x04\x06\x12\x03Y\x02\x0f\n\x0c\n\x05\x04\0\x02\x04\x01\x12\x03Y\ + \x10\x1e\n\x0c\n\x05\x04\0\x02\x04\x03\x12\x03Y!\"\n2\n\x04\x04\0\x02\ + \x05\x12\x03\\\x02\x1c\x1a%\x20Included\x20interfaces.\x20See\x20[Mixin]\ + [].\n\n\x0c\n\x05\x04\0\x02\x05\x04\x12\x03\\\x02\n\n\x0c\n\x05\x04\0\ + \x02\x05\x06\x12\x03\\\x0b\x10\n\x0c\n\x05\x04\0\x02\x05\x01\x12\x03\\\ + \x11\x17\n\x0c\n\x05\x04\0\x02\x05\x03\x12\x03\\\x1a\x1b\n0\n\x04\x04\0\ + \x02\x06\x12\x03_\x02\x14\x1a#\x20The\x20source\x20syntax\x20of\x20the\ + \x20service.\n\n\x0c\n\x05\x04\0\x02\x06\x06\x12\x03_\x02\x08\n\x0c\n\ + \x05\x04\0\x02\x06\x01\x12\x03_\t\x0f\n\x0c\n\x05\x04\0\x02\x06\x03\x12\ + \x03_\x12\x13\n=\n\x02\x04\x01\x12\x04c\0x\x01\x1a1\x20Method\x20represe\ + nts\x20a\x20method\x20of\x20an\x20API\x20interface.\n\n\n\n\x03\x04\x01\ + \x01\x12\x03c\x08\x0e\n.\n\x04\x04\x01\x02\0\x12\x03e\x02\x12\x1a!\x20Th\ + e\x20simple\x20name\x20of\x20this\x20method.\n\n\x0c\n\x05\x04\x01\x02\0\ + \x05\x12\x03e\x02\x08\n\x0c\n\x05\x04\x01\x02\0\x01\x12\x03e\t\r\n\x0c\n\ + \x05\x04\x01\x02\0\x03\x12\x03e\x10\x11\n/\n\x04\x04\x01\x02\x01\x12\x03\ + h\x02\x1e\x1a\"\x20A\x20URL\x20of\x20the\x20input\x20message\x20type.\n\ + \n\x0c\n\x05\x04\x01\x02\x01\x05\x12\x03h\x02\x08\n\x0c\n\x05\x04\x01\ + \x02\x01\x01\x12\x03h\t\x19\n\x0c\n\x05\x04\x01\x02\x01\x03\x12\x03h\x1c\ + \x1d\n0\n\x04\x04\x01\x02\x02\x12\x03k\x02\x1d\x1a#\x20If\x20true,\x20th\ + e\x20request\x20is\x20streamed.\n\n\x0c\n\x05\x04\x01\x02\x02\x05\x12\ + \x03k\x02\x06\n\x0c\n\x05\x04\x01\x02\x02\x01\x12\x03k\x07\x18\n\x0c\n\ + \x05\x04\x01\x02\x02\x03\x12\x03k\x1b\x1c\n2\n\x04\x04\x01\x02\x03\x12\ + \x03n\x02\x1f\x1a%\x20The\x20URL\x20of\x20the\x20output\x20message\x20ty\ + pe.\n\n\x0c\n\x05\x04\x01\x02\x03\x05\x12\x03n\x02\x08\n\x0c\n\x05\x04\ + \x01\x02\x03\x01\x12\x03n\t\x1a\n\x0c\n\x05\x04\x01\x02\x03\x03\x12\x03n\ + \x1d\x1e\n1\n\x04\x04\x01\x02\x04\x12\x03q\x02\x1e\x1a$\x20If\x20true,\ + \x20the\x20response\x20is\x20streamed.\n\n\x0c\n\x05\x04\x01\x02\x04\x05\ + \x12\x03q\x02\x06\n\x0c\n\x05\x04\x01\x02\x04\x01\x12\x03q\x07\x19\n\x0c\ + \n\x05\x04\x01\x02\x04\x03\x12\x03q\x1c\x1d\n3\n\x04\x04\x01\x02\x05\x12\ + \x03t\x02\x1e\x1a&\x20Any\x20metadata\x20attached\x20to\x20the\x20method\ + .\n\n\x0c\n\x05\x04\x01\x02\x05\x04\x12\x03t\x02\n\n\x0c\n\x05\x04\x01\ + \x02\x05\x06\x12\x03t\x0b\x11\n\x0c\n\x05\x04\x01\x02\x05\x01\x12\x03t\ + \x12\x19\n\x0c\n\x05\x04\x01\x02\x05\x03\x12\x03t\x1c\x1d\n0\n\x04\x04\ + \x01\x02\x06\x12\x03w\x02\x14\x1a#\x20The\x20source\x20syntax\x20of\x20t\ + his\x20method.\n\n\x0c\n\x05\x04\x01\x02\x06\x06\x12\x03w\x02\x08\n\x0c\ + \n\x05\x04\x01\x02\x06\x01\x12\x03w\t\x0f\n\x0c\n\x05\x04\x01\x02\x06\ + \x03\x12\x03w\x12\x13\n\xca\x13\n\x02\x04\x02\x12\x06\xc8\x01\0\xcf\x01\ + \x01\x1a\xbb\x13\x20Declares\x20an\x20API\x20Interface\x20to\x20be\x20in\ + cluded\x20in\x20this\x20interface.\x20The\x20including\n\x20interface\ + \x20must\x20redeclare\x20all\x20the\x20methods\x20from\x20the\x20include\ + d\x20interface,\x20but\n\x20documentation\x20and\x20options\x20are\x20in\ + herited\x20as\x20follows:\n\n\x20-\x20If\x20after\x20comment\x20and\x20w\ + hitespace\x20stripping,\x20the\x20documentation\n\x20\x20\x20string\x20o\ + f\x20the\x20redeclared\x20method\x20is\x20empty,\x20it\x20will\x20be\x20\ + inherited\n\x20\x20\x20from\x20the\x20original\x20method.\n\n\x20-\x20Ea\ + ch\x20annotation\x20belonging\x20to\x20the\x20service\x20config\x20(http\ + ,\n\x20\x20\x20visibility)\x20which\x20is\x20not\x20set\x20in\x20the\x20\ + redeclared\x20method\x20will\x20be\n\x20\x20\x20inherited.\n\n\x20-\x20I\ + f\x20an\x20http\x20annotation\x20is\x20inherited,\x20the\x20path\x20patt\ + ern\x20will\x20be\n\x20\x20\x20modified\x20as\x20follows.\x20Any\x20vers\ + ion\x20prefix\x20will\x20be\x20replaced\x20by\x20the\n\x20\x20\x20versio\ + n\x20of\x20the\x20including\x20interface\x20plus\x20the\x20[root][]\x20p\ + ath\x20if\n\x20\x20\x20specified.\n\n\x20Example\x20of\x20a\x20simple\ + \x20mixin:\n\n\x20\x20\x20\x20\x20package\x20google.acl.v1;\n\x20\x20\ + \x20\x20\x20service\x20AccessControl\x20{\n\x20\x20\x20\x20\x20\x20\x20/\ + /\x20Get\x20the\x20underlying\x20ACL\x20object.\n\x20\x20\x20\x20\x20\ + \x20\x20rpc\x20GetAcl(GetAclRequest)\x20returns\x20(Acl)\x20{\n\x20\x20\ + \x20\x20\x20\x20\x20\x20\x20option\x20(google.api.http).get\x20=\x20\"/v\ + 1/{resource=**}:getAcl\";\n\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\ + \x20\x20}\n\n\x20\x20\x20\x20\x20package\x20google.storage.v2;\n\x20\x20\ + \x20\x20\x20service\x20Storage\x20{\n\x20\x20\x20\x20\x20\x20\x20rpc\x20\ + GetAcl(GetAclRequest)\x20returns\x20(Acl);\n\n\x20\x20\x20\x20\x20\x20\ + \x20//\x20Get\x20a\x20data\x20record.\n\x20\x20\x20\x20\x20\x20\x20rpc\ + \x20GetData(GetDataRequest)\x20returns\x20(Data)\x20{\n\x20\x20\x20\x20\ + \x20\x20\x20\x20\x20option\x20(google.api.http).get\x20=\x20\"/v2/{resou\ + rce=**}\";\n\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20}\n\n\x20\ + Example\x20of\x20a\x20mixin\x20configuration:\n\n\x20\x20\x20\x20\x20api\ + s:\n\x20\x20\x20\x20\x20-\x20name:\x20google.storage.v2.Storage\n\x20\ + \x20\x20\x20\x20\x20\x20mixins:\n\x20\x20\x20\x20\x20\x20\x20-\x20name:\ + \x20google.acl.v1.AccessControl\n\n\x20The\x20mixin\x20construct\x20impl\ + ies\x20that\x20all\x20methods\x20in\x20`AccessControl`\x20are\n\x20also\ + \x20declared\x20with\x20same\x20name\x20and\x20request/response\x20types\ + \x20in\n\x20`Storage`.\x20A\x20documentation\x20generator\x20or\x20annot\ + ation\x20processor\x20will\n\x20see\x20the\x20effective\x20`Storage.GetA\ + cl`\x20method\x20after\x20inheriting\n\x20documentation\x20and\x20annota\ + tions\x20as\x20follows:\n\n\x20\x20\x20\x20\x20service\x20Storage\x20{\n\ + \x20\x20\x20\x20\x20\x20\x20//\x20Get\x20the\x20underlying\x20ACL\x20obj\ + ect.\n\x20\x20\x20\x20\x20\x20\x20rpc\x20GetAcl(GetAclRequest)\x20return\ + s\x20(Acl)\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20option\x20(google.a\ + pi.http).get\x20=\x20\"/v2/{resource=**}:getAcl\";\n\x20\x20\x20\x20\x20\ + \x20\x20}\n\x20\x20\x20\x20\x20\x20\x20...\n\x20\x20\x20\x20\x20}\n\n\ + \x20Note\x20how\x20the\x20version\x20in\x20the\x20path\x20pattern\x20cha\ + nged\x20from\x20`v1`\x20to\x20`v2`.\n\n\x20If\x20the\x20`root`\x20field\ + \x20in\x20the\x20mixin\x20is\x20specified,\x20it\x20should\x20be\x20a\n\ + \x20relative\x20path\x20under\x20which\x20inherited\x20HTTP\x20paths\x20\ + are\x20placed.\x20Example:\n\n\x20\x20\x20\x20\x20apis:\n\x20\x20\x20\ + \x20\x20-\x20name:\x20google.storage.v2.Storage\n\x20\x20\x20\x20\x20\ + \x20\x20mixins:\n\x20\x20\x20\x20\x20\x20\x20-\x20name:\x20google.acl.v1\ + .AccessControl\n\x20\x20\x20\x20\x20\x20\x20\x20\x20root:\x20acls\n\n\ + \x20This\x20implies\x20the\x20following\x20inherited\x20HTTP\x20annotati\ + on:\n\n\x20\x20\x20\x20\x20service\x20Storage\x20{\n\x20\x20\x20\x20\x20\ + \x20\x20//\x20Get\x20the\x20underlying\x20ACL\x20object.\n\x20\x20\x20\ + \x20\x20\x20\x20rpc\x20GetAcl(GetAclRequest)\x20returns\x20(Acl)\x20{\n\ + \x20\x20\x20\x20\x20\x20\x20\x20\x20option\x20(google.api.http).get\x20=\ + \x20\"/v2/acls/{resource=**}:getAcl\";\n\x20\x20\x20\x20\x20\x20\x20}\n\ + \x20\x20\x20\x20\x20\x20\x20...\n\x20\x20\x20\x20\x20}\n\n\x0b\n\x03\x04\ + \x02\x01\x12\x04\xc8\x01\x08\r\nL\n\x04\x04\x02\x02\0\x12\x04\xca\x01\ + \x02\x12\x1a>\x20The\x20fully\x20qualified\x20name\x20of\x20the\x20inter\ + face\x20which\x20is\x20included.\n\n\r\n\x05\x04\x02\x02\0\x05\x12\x04\ + \xca\x01\x02\x08\n\r\n\x05\x04\x02\x02\0\x01\x12\x04\xca\x01\t\r\n\r\n\ + \x05\x04\x02\x02\0\x03\x12\x04\xca\x01\x10\x11\n[\n\x04\x04\x02\x02\x01\ + \x12\x04\xce\x01\x02\x12\x1aM\x20If\x20non-empty\x20specifies\x20a\x20pa\ + th\x20under\x20which\x20inherited\x20HTTP\x20paths\n\x20are\x20rooted.\n\ + \n\r\n\x05\x04\x02\x02\x01\x05\x12\x04\xce\x01\x02\x08\n\r\n\x05\x04\x02\ + \x02\x01\x01\x12\x04\xce\x01\t\r\n\r\n\x05\x04\x02\x02\x01\x03\x12\x04\ + \xce\x01\x10\x11b\x06proto3\ +"; + +static file_descriptor_proto_lazy: crate::rt::LazyV2<crate::descriptor::FileDescriptorProto> = crate::rt::LazyV2::INIT; + +fn parse_descriptor_proto() -> crate::descriptor::FileDescriptorProto { + crate::Message::parse_from_bytes(file_descriptor_proto_data).unwrap() +} + +pub fn file_descriptor_proto() -> &'static crate::descriptor::FileDescriptorProto { + file_descriptor_proto_lazy.get(|| { + parse_descriptor_proto() + }) +} diff --git a/2.27.1/src/well_known_types/duration.rs b/2.27.1/src/well_known_types/duration.rs new file mode 100644 index 0000000..822061a --- /dev/null +++ b/2.27.1/src/well_known_types/duration.rs @@ -0,0 +1,338 @@ +// This file is generated by rust-protobuf 2.26.0. Do not edit +// @generated + +// https://github.com/rust-lang/rust-clippy/issues/702 +#![allow(unknown_lints)] +#![allow(clippy::all)] + +#![allow(unused_attributes)] +#![cfg_attr(rustfmt, rustfmt::skip)] + +#![allow(box_pointers)] +#![allow(dead_code)] +#![allow(missing_docs)] +#![allow(non_camel_case_types)] +#![allow(non_snake_case)] +#![allow(non_upper_case_globals)] +#![allow(trivial_casts)] +#![allow(unused_imports)] +#![allow(unused_results)] +//! Generated file from `google/protobuf/duration.proto` + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct Duration { + // message fields + pub seconds: i64, + pub nanos: i32, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a Duration { + fn default() -> &'a Duration { + <Duration as crate::Message>::default_instance() + } +} + +impl Duration { + pub fn new() -> Duration { + ::std::default::Default::default() + } + + // int64 seconds = 1; + + + pub fn get_seconds(&self) -> i64 { + self.seconds + } + pub fn clear_seconds(&mut self) { + self.seconds = 0; + } + + // Param is passed by value, moved + pub fn set_seconds(&mut self, v: i64) { + self.seconds = v; + } + + // int32 nanos = 2; + + + pub fn get_nanos(&self) -> i32 { + self.nanos + } + pub fn clear_nanos(&mut self) { + self.nanos = 0; + } + + // Param is passed by value, moved + pub fn set_nanos(&mut self, v: i32) { + self.nanos = v; + } +} + +impl crate::Message for Duration { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int64()?; + self.seconds = tmp; + }, + 2 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int32()?; + self.nanos = tmp; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if self.seconds != 0 { + my_size += crate::rt::value_size(1, self.seconds, crate::wire_format::WireTypeVarint); + } + if self.nanos != 0 { + my_size += crate::rt::value_size(2, self.nanos, crate::wire_format::WireTypeVarint); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if self.seconds != 0 { + os.write_int64(1, self.seconds)?; + } + if self.nanos != 0 { + os.write_int32(2, self.nanos)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> Duration { + Duration::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeInt64>( + "seconds", + |m: &Duration| { &m.seconds }, + |m: &mut Duration| { &mut m.seconds }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeInt32>( + "nanos", + |m: &Duration| { &m.nanos }, + |m: &mut Duration| { &mut m.nanos }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<Duration>( + "Duration", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static Duration { + static instance: crate::rt::LazyV2<Duration> = crate::rt::LazyV2::INIT; + instance.get(Duration::new) + } +} + +impl crate::Clear for Duration { + fn clear(&mut self) { + self.seconds = 0; + self.nanos = 0; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for Duration { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for Duration { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +static file_descriptor_proto_data: &'static [u8] = b"\ + \n\x1egoogle/protobuf/duration.proto\x12\x0fgoogle.protobuf\":\n\x08Dura\ + tion\x12\x18\n\x07seconds\x18\x01\x20\x01(\x03R\x07seconds\x12\x14\n\x05\ + nanos\x18\x02\x20\x01(\x05R\x05nanosB\x83\x01\n\x13com.google.protobufB\ + \rDurationProtoP\x01Z1google.golang.org/protobuf/types/known/durationpb\ + \xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesJ\ + \xda#\n\x06\x12\x04\x1e\0s\x01\n\xcc\x0c\n\x01\x0c\x12\x03\x1e\0\x122\ + \xc1\x0c\x20Protocol\x20Buffers\x20-\x20Google's\x20data\x20interchange\ + \x20format\n\x20Copyright\x202008\x20Google\x20Inc.\x20\x20All\x20rights\ + \x20reserved.\n\x20https://developers.google.com/protocol-buffers/\n\n\ + \x20Redistribution\x20and\x20use\x20in\x20source\x20and\x20binary\x20for\ + ms,\x20with\x20or\x20without\n\x20modification,\x20are\x20permitted\x20p\ + rovided\x20that\x20the\x20following\x20conditions\x20are\n\x20met:\n\n\ + \x20\x20\x20\x20\x20*\x20Redistributions\x20of\x20source\x20code\x20must\ + \x20retain\x20the\x20above\x20copyright\n\x20notice,\x20this\x20list\x20\ + of\x20conditions\x20and\x20the\x20following\x20disclaimer.\n\x20\x20\x20\ + \x20\x20*\x20Redistributions\x20in\x20binary\x20form\x20must\x20reproduc\ + e\x20the\x20above\n\x20copyright\x20notice,\x20this\x20list\x20of\x20con\ + ditions\x20and\x20the\x20following\x20disclaimer\n\x20in\x20the\x20docum\ + entation\x20and/or\x20other\x20materials\x20provided\x20with\x20the\n\ + \x20distribution.\n\x20\x20\x20\x20\x20*\x20Neither\x20the\x20name\x20of\ + \x20Google\x20Inc.\x20nor\x20the\x20names\x20of\x20its\n\x20contributors\ + \x20may\x20be\x20used\x20to\x20endorse\x20or\x20promote\x20products\x20d\ + erived\x20from\n\x20this\x20software\x20without\x20specific\x20prior\x20\ + written\x20permission.\n\n\x20THIS\x20SOFTWARE\x20IS\x20PROVIDED\x20BY\ + \x20THE\x20COPYRIGHT\x20HOLDERS\x20AND\x20CONTRIBUTORS\n\x20\"AS\x20IS\"\ + \x20AND\x20ANY\x20EXPRESS\x20OR\x20IMPLIED\x20WARRANTIES,\x20INCLUDING,\ + \x20BUT\x20NOT\n\x20LIMITED\x20TO,\x20THE\x20IMPLIED\x20WARRANTIES\x20OF\ + \x20MERCHANTABILITY\x20AND\x20FITNESS\x20FOR\n\x20A\x20PARTICULAR\x20PUR\ + POSE\x20ARE\x20DISCLAIMED.\x20IN\x20NO\x20EVENT\x20SHALL\x20THE\x20COPYR\ + IGHT\n\x20OWNER\x20OR\x20CONTRIBUTORS\x20BE\x20LIABLE\x20FOR\x20ANY\x20D\ + IRECT,\x20INDIRECT,\x20INCIDENTAL,\n\x20SPECIAL,\x20EXEMPLARY,\x20OR\x20\ + CONSEQUENTIAL\x20DAMAGES\x20(INCLUDING,\x20BUT\x20NOT\n\x20LIMITED\x20TO\ + ,\x20PROCUREMENT\x20OF\x20SUBSTITUTE\x20GOODS\x20OR\x20SERVICES;\x20LOSS\ + \x20OF\x20USE,\n\x20DATA,\x20OR\x20PROFITS;\x20OR\x20BUSINESS\x20INTERRU\ + PTION)\x20HOWEVER\x20CAUSED\x20AND\x20ON\x20ANY\n\x20THEORY\x20OF\x20LIA\ + BILITY,\x20WHETHER\x20IN\x20CONTRACT,\x20STRICT\x20LIABILITY,\x20OR\x20T\ + ORT\n\x20(INCLUDING\x20NEGLIGENCE\x20OR\x20OTHERWISE)\x20ARISING\x20IN\ + \x20ANY\x20WAY\x20OUT\x20OF\x20THE\x20USE\n\x20OF\x20THIS\x20SOFTWARE,\ + \x20EVEN\x20IF\x20ADVISED\x20OF\x20THE\x20POSSIBILITY\x20OF\x20SUCH\x20D\ + AMAGE.\n\n\x08\n\x01\x02\x12\x03\x20\0\x18\n\x08\n\x01\x08\x12\x03\"\0;\ + \n\t\n\x02\x08%\x12\x03\"\0;\n\x08\n\x01\x08\x12\x03#\0\x1f\n\t\n\x02\ + \x08\x1f\x12\x03#\0\x1f\n\x08\n\x01\x08\x12\x03$\0H\n\t\n\x02\x08\x0b\ + \x12\x03$\0H\n\x08\n\x01\x08\x12\x03%\0,\n\t\n\x02\x08\x01\x12\x03%\0,\n\ + \x08\n\x01\x08\x12\x03&\0.\n\t\n\x02\x08\x08\x12\x03&\0.\n\x08\n\x01\x08\ + \x12\x03'\0\"\n\t\n\x02\x08\n\x12\x03'\0\"\n\x08\n\x01\x08\x12\x03(\0!\n\ + \t\n\x02\x08$\x12\x03(\0!\n\x9e\x10\n\x02\x04\0\x12\x04f\0s\x01\x1a\x91\ + \x10\x20A\x20Duration\x20represents\x20a\x20signed,\x20fixed-length\x20s\ + pan\x20of\x20time\x20represented\n\x20as\x20a\x20count\x20of\x20seconds\ + \x20and\x20fractions\x20of\x20seconds\x20at\x20nanosecond\n\x20resolutio\ + n.\x20It\x20is\x20independent\x20of\x20any\x20calendar\x20and\x20concept\ + s\x20like\x20\"day\"\n\x20or\x20\"month\".\x20It\x20is\x20related\x20to\ + \x20Timestamp\x20in\x20that\x20the\x20difference\x20between\n\x20two\x20\ + Timestamp\x20values\x20is\x20a\x20Duration\x20and\x20it\x20can\x20be\x20\ + added\x20or\x20subtracted\n\x20from\x20a\x20Timestamp.\x20Range\x20is\ + \x20approximately\x20+-10,000\x20years.\n\n\x20#\x20Examples\n\n\x20Exam\ + ple\x201:\x20Compute\x20Duration\x20from\x20two\x20Timestamps\x20in\x20p\ + seudo\x20code.\n\n\x20\x20\x20\x20\x20Timestamp\x20start\x20=\x20...;\n\ + \x20\x20\x20\x20\x20Timestamp\x20end\x20=\x20...;\n\x20\x20\x20\x20\x20D\ + uration\x20duration\x20=\x20...;\n\n\x20\x20\x20\x20\x20duration.seconds\ + \x20=\x20end.seconds\x20-\x20start.seconds;\n\x20\x20\x20\x20\x20duratio\ + n.nanos\x20=\x20end.nanos\x20-\x20start.nanos;\n\n\x20\x20\x20\x20\x20if\ + \x20(duration.seconds\x20<\x200\x20&&\x20duration.nanos\x20>\x200)\x20{\ + \n\x20\x20\x20\x20\x20\x20\x20duration.seconds\x20+=\x201;\n\x20\x20\x20\ + \x20\x20\x20\x20duration.nanos\x20-=\x201000000000;\n\x20\x20\x20\x20\ + \x20}\x20else\x20if\x20(duration.seconds\x20>\x200\x20&&\x20duration.nan\ + os\x20<\x200)\x20{\n\x20\x20\x20\x20\x20\x20\x20duration.seconds\x20-=\ + \x201;\n\x20\x20\x20\x20\x20\x20\x20duration.nanos\x20+=\x201000000000;\ + \n\x20\x20\x20\x20\x20}\n\n\x20Example\x202:\x20Compute\x20Timestamp\x20\ + from\x20Timestamp\x20+\x20Duration\x20in\x20pseudo\x20code.\n\n\x20\x20\ + \x20\x20\x20Timestamp\x20start\x20=\x20...;\n\x20\x20\x20\x20\x20Duratio\ + n\x20duration\x20=\x20...;\n\x20\x20\x20\x20\x20Timestamp\x20end\x20=\ + \x20...;\n\n\x20\x20\x20\x20\x20end.seconds\x20=\x20start.seconds\x20+\ + \x20duration.seconds;\n\x20\x20\x20\x20\x20end.nanos\x20=\x20start.nanos\ + \x20+\x20duration.nanos;\n\n\x20\x20\x20\x20\x20if\x20(end.nanos\x20<\ + \x200)\x20{\n\x20\x20\x20\x20\x20\x20\x20end.seconds\x20-=\x201;\n\x20\ + \x20\x20\x20\x20\x20\x20end.nanos\x20+=\x201000000000;\n\x20\x20\x20\x20\ + \x20}\x20else\x20if\x20(end.nanos\x20>=\x201000000000)\x20{\n\x20\x20\ + \x20\x20\x20\x20\x20end.seconds\x20+=\x201;\n\x20\x20\x20\x20\x20\x20\ + \x20end.nanos\x20-=\x201000000000;\n\x20\x20\x20\x20\x20}\n\n\x20Example\ + \x203:\x20Compute\x20Duration\x20from\x20datetime.timedelta\x20in\x20Pyt\ + hon.\n\n\x20\x20\x20\x20\x20td\x20=\x20datetime.timedelta(days=3,\x20min\ + utes=10)\n\x20\x20\x20\x20\x20duration\x20=\x20Duration()\n\x20\x20\x20\ + \x20\x20duration.FromTimedelta(td)\n\n\x20#\x20JSON\x20Mapping\n\n\x20In\ + \x20JSON\x20format,\x20the\x20Duration\x20type\x20is\x20encoded\x20as\ + \x20a\x20string\x20rather\x20than\x20an\n\x20object,\x20where\x20the\x20\ + string\x20ends\x20in\x20the\x20suffix\x20\"s\"\x20(indicating\x20seconds\ + )\x20and\n\x20is\x20preceded\x20by\x20the\x20number\x20of\x20seconds,\ + \x20with\x20nanoseconds\x20expressed\x20as\n\x20fractional\x20seconds.\ + \x20For\x20example,\x203\x20seconds\x20with\x200\x20nanoseconds\x20shoul\ + d\x20be\n\x20encoded\x20in\x20JSON\x20format\x20as\x20\"3s\",\x20while\ + \x203\x20seconds\x20and\x201\x20nanosecond\x20should\n\x20be\x20expresse\ + d\x20in\x20JSON\x20format\x20as\x20\"3.000000001s\",\x20and\x203\x20seco\ + nds\x20and\x201\n\x20microsecond\x20should\x20be\x20expressed\x20in\x20J\ + SON\x20format\x20as\x20\"3.000001s\".\n\n\n\n\n\n\x03\x04\0\x01\x12\x03f\ + \x08\x10\n\xdc\x01\n\x04\x04\0\x02\0\x12\x03j\x02\x14\x1a\xce\x01\x20Sig\ + ned\x20seconds\x20of\x20the\x20span\x20of\x20time.\x20Must\x20be\x20from\ + \x20-315,576,000,000\n\x20to\x20+315,576,000,000\x20inclusive.\x20Note:\ + \x20these\x20bounds\x20are\x20computed\x20from:\n\x2060\x20sec/min\x20*\ + \x2060\x20min/hr\x20*\x2024\x20hr/day\x20*\x20365.25\x20days/year\x20*\ + \x2010000\x20years\n\n\x0c\n\x05\x04\0\x02\0\x05\x12\x03j\x02\x07\n\x0c\ + \n\x05\x04\0\x02\0\x01\x12\x03j\x08\x0f\n\x0c\n\x05\x04\0\x02\0\x03\x12\ + \x03j\x12\x13\n\x83\x03\n\x04\x04\0\x02\x01\x12\x03r\x02\x12\x1a\xf5\x02\ + \x20Signed\x20fractions\x20of\x20a\x20second\x20at\x20nanosecond\x20reso\ + lution\x20of\x20the\x20span\n\x20of\x20time.\x20Durations\x20less\x20tha\ + n\x20one\x20second\x20are\x20represented\x20with\x20a\x200\n\x20`seconds\ + `\x20field\x20and\x20a\x20positive\x20or\x20negative\x20`nanos`\x20field\ + .\x20For\x20durations\n\x20of\x20one\x20second\x20or\x20more,\x20a\x20no\ + n-zero\x20value\x20for\x20the\x20`nanos`\x20field\x20must\x20be\n\x20of\ + \x20the\x20same\x20sign\x20as\x20the\x20`seconds`\x20field.\x20Must\x20b\ + e\x20from\x20-999,999,999\n\x20to\x20+999,999,999\x20inclusive.\n\n\x0c\ + \n\x05\x04\0\x02\x01\x05\x12\x03r\x02\x07\n\x0c\n\x05\x04\0\x02\x01\x01\ + \x12\x03r\x08\r\n\x0c\n\x05\x04\0\x02\x01\x03\x12\x03r\x10\x11b\x06proto\ + 3\ +"; + +static file_descriptor_proto_lazy: crate::rt::LazyV2<crate::descriptor::FileDescriptorProto> = crate::rt::LazyV2::INIT; + +fn parse_descriptor_proto() -> crate::descriptor::FileDescriptorProto { + crate::Message::parse_from_bytes(file_descriptor_proto_data).unwrap() +} + +pub fn file_descriptor_proto() -> &'static crate::descriptor::FileDescriptorProto { + file_descriptor_proto_lazy.get(|| { + parse_descriptor_proto() + }) +} diff --git a/2.27.1/src/well_known_types/empty.rs b/2.27.1/src/well_known_types/empty.rs new file mode 100644 index 0000000..d55e517 --- /dev/null +++ b/2.27.1/src/well_known_types/empty.rs @@ -0,0 +1,208 @@ +// This file is generated by rust-protobuf 2.26.0. Do not edit +// @generated + +// https://github.com/rust-lang/rust-clippy/issues/702 +#![allow(unknown_lints)] +#![allow(clippy::all)] + +#![allow(unused_attributes)] +#![cfg_attr(rustfmt, rustfmt::skip)] + +#![allow(box_pointers)] +#![allow(dead_code)] +#![allow(missing_docs)] +#![allow(non_camel_case_types)] +#![allow(non_snake_case)] +#![allow(non_upper_case_globals)] +#![allow(trivial_casts)] +#![allow(unused_imports)] +#![allow(unused_results)] +//! Generated file from `google/protobuf/empty.proto` + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct Empty { + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a Empty { + fn default() -> &'a Empty { + <Empty as crate::Message>::default_instance() + } +} + +impl Empty { + pub fn new() -> Empty { + ::std::default::Default::default() + } +} + +impl crate::Message for Empty { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> Empty { + Empty::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let fields = ::std::vec::Vec::new(); + crate::reflect::MessageDescriptor::new_pb_name::<Empty>( + "Empty", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static Empty { + static instance: crate::rt::LazyV2<Empty> = crate::rt::LazyV2::INIT; + instance.get(Empty::new) + } +} + +impl crate::Clear for Empty { + fn clear(&mut self) { + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for Empty { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for Empty { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +static file_descriptor_proto_data: &'static [u8] = b"\ + \n\x1bgoogle/protobuf/empty.proto\x12\x0fgoogle.protobuf\"\x07\n\x05Empt\ + yB}\n\x13com.google.protobufB\nEmptyProtoP\x01Z.google.golang.org/protob\ + uf/types/known/emptypb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Prot\ + obuf.WellKnownTypesJ\xfe\x10\n\x06\x12\x04\x1e\03\x10\n\xcc\x0c\n\x01\ + \x0c\x12\x03\x1e\0\x122\xc1\x0c\x20Protocol\x20Buffers\x20-\x20Google's\ + \x20data\x20interchange\x20format\n\x20Copyright\x202008\x20Google\x20In\ + c.\x20\x20All\x20rights\x20reserved.\n\x20https://developers.google.com/\ + protocol-buffers/\n\n\x20Redistribution\x20and\x20use\x20in\x20source\ + \x20and\x20binary\x20forms,\x20with\x20or\x20without\n\x20modification,\ + \x20are\x20permitted\x20provided\x20that\x20the\x20following\x20conditio\ + ns\x20are\n\x20met:\n\n\x20\x20\x20\x20\x20*\x20Redistributions\x20of\ + \x20source\x20code\x20must\x20retain\x20the\x20above\x20copyright\n\x20n\ + otice,\x20this\x20list\x20of\x20conditions\x20and\x20the\x20following\ + \x20disclaimer.\n\x20\x20\x20\x20\x20*\x20Redistributions\x20in\x20binar\ + y\x20form\x20must\x20reproduce\x20the\x20above\n\x20copyright\x20notice,\ + \x20this\x20list\x20of\x20conditions\x20and\x20the\x20following\x20discl\ + aimer\n\x20in\x20the\x20documentation\x20and/or\x20other\x20materials\ + \x20provided\x20with\x20the\n\x20distribution.\n\x20\x20\x20\x20\x20*\ + \x20Neither\x20the\x20name\x20of\x20Google\x20Inc.\x20nor\x20the\x20name\ + s\x20of\x20its\n\x20contributors\x20may\x20be\x20used\x20to\x20endorse\ + \x20or\x20promote\x20products\x20derived\x20from\n\x20this\x20software\ + \x20without\x20specific\x20prior\x20written\x20permission.\n\n\x20THIS\ + \x20SOFTWARE\x20IS\x20PROVIDED\x20BY\x20THE\x20COPYRIGHT\x20HOLDERS\x20A\ + ND\x20CONTRIBUTORS\n\x20\"AS\x20IS\"\x20AND\x20ANY\x20EXPRESS\x20OR\x20I\ + MPLIED\x20WARRANTIES,\x20INCLUDING,\x20BUT\x20NOT\n\x20LIMITED\x20TO,\ + \x20THE\x20IMPLIED\x20WARRANTIES\x20OF\x20MERCHANTABILITY\x20AND\x20FITN\ + ESS\x20FOR\n\x20A\x20PARTICULAR\x20PURPOSE\x20ARE\x20DISCLAIMED.\x20IN\ + \x20NO\x20EVENT\x20SHALL\x20THE\x20COPYRIGHT\n\x20OWNER\x20OR\x20CONTRIB\ + UTORS\x20BE\x20LIABLE\x20FOR\x20ANY\x20DIRECT,\x20INDIRECT,\x20INCIDENTA\ + L,\n\x20SPECIAL,\x20EXEMPLARY,\x20OR\x20CONSEQUENTIAL\x20DAMAGES\x20(INC\ + LUDING,\x20BUT\x20NOT\n\x20LIMITED\x20TO,\x20PROCUREMENT\x20OF\x20SUBSTI\ + TUTE\x20GOODS\x20OR\x20SERVICES;\x20LOSS\x20OF\x20USE,\n\x20DATA,\x20OR\ + \x20PROFITS;\x20OR\x20BUSINESS\x20INTERRUPTION)\x20HOWEVER\x20CAUSED\x20\ + AND\x20ON\x20ANY\n\x20THEORY\x20OF\x20LIABILITY,\x20WHETHER\x20IN\x20CON\ + TRACT,\x20STRICT\x20LIABILITY,\x20OR\x20TORT\n\x20(INCLUDING\x20NEGLIGEN\ + CE\x20OR\x20OTHERWISE)\x20ARISING\x20IN\x20ANY\x20WAY\x20OUT\x20OF\x20TH\ + E\x20USE\n\x20OF\x20THIS\x20SOFTWARE,\x20EVEN\x20IF\x20ADVISED\x20OF\x20\ + THE\x20POSSIBILITY\x20OF\x20SUCH\x20DAMAGE.\n\n\x08\n\x01\x02\x12\x03\ + \x20\0\x18\n\x08\n\x01\x08\x12\x03\"\0;\n\t\n\x02\x08%\x12\x03\"\0;\n\ + \x08\n\x01\x08\x12\x03#\0E\n\t\n\x02\x08\x0b\x12\x03#\0E\n\x08\n\x01\x08\ + \x12\x03$\0,\n\t\n\x02\x08\x01\x12\x03$\0,\n\x08\n\x01\x08\x12\x03%\0+\n\ + \t\n\x02\x08\x08\x12\x03%\0+\n\x08\n\x01\x08\x12\x03&\0\"\n\t\n\x02\x08\ + \n\x12\x03&\0\"\n\x08\n\x01\x08\x12\x03'\0!\n\t\n\x02\x08$\x12\x03'\0!\n\ + \x08\n\x01\x08\x12\x03(\0\x1f\n\t\n\x02\x08\x1f\x12\x03(\0\x1f\n\xfb\x02\ + \n\x02\x04\0\x12\x033\0\x10\x1a\xef\x02\x20A\x20generic\x20empty\x20mess\ + age\x20that\x20you\x20can\x20re-use\x20to\x20avoid\x20defining\x20duplic\ + ated\n\x20empty\x20messages\x20in\x20your\x20APIs.\x20A\x20typical\x20ex\ + ample\x20is\x20to\x20use\x20it\x20as\x20the\x20request\n\x20or\x20the\ + \x20response\x20type\x20of\x20an\x20API\x20method.\x20For\x20instance:\n\ + \n\x20\x20\x20\x20\x20service\x20Foo\x20{\n\x20\x20\x20\x20\x20\x20\x20r\ + pc\x20Bar(google.protobuf.Empty)\x20returns\x20(google.protobuf.Empty);\ + \n\x20\x20\x20\x20\x20}\n\n\x20The\x20JSON\x20representation\x20for\x20`\ + Empty`\x20is\x20empty\x20JSON\x20object\x20`{}`.\n\n\n\n\x03\x04\0\x01\ + \x12\x033\x08\rb\x06proto3\ +"; + +static file_descriptor_proto_lazy: crate::rt::LazyV2<crate::descriptor::FileDescriptorProto> = crate::rt::LazyV2::INIT; + +fn parse_descriptor_proto() -> crate::descriptor::FileDescriptorProto { + crate::Message::parse_from_bytes(file_descriptor_proto_data).unwrap() +} + +pub fn file_descriptor_proto() -> &'static crate::descriptor::FileDescriptorProto { + file_descriptor_proto_lazy.get(|| { + parse_descriptor_proto() + }) +} diff --git a/2.27.1/src/well_known_types/field_mask.rs b/2.27.1/src/well_known_types/field_mask.rs new file mode 100644 index 0000000..e98eb53 --- /dev/null +++ b/2.27.1/src/well_known_types/field_mask.rs @@ -0,0 +1,385 @@ +// This file is generated by rust-protobuf 2.26.0. Do not edit +// @generated + +// https://github.com/rust-lang/rust-clippy/issues/702 +#![allow(unknown_lints)] +#![allow(clippy::all)] + +#![allow(unused_attributes)] +#![cfg_attr(rustfmt, rustfmt::skip)] + +#![allow(box_pointers)] +#![allow(dead_code)] +#![allow(missing_docs)] +#![allow(non_camel_case_types)] +#![allow(non_snake_case)] +#![allow(non_upper_case_globals)] +#![allow(trivial_casts)] +#![allow(unused_imports)] +#![allow(unused_results)] +//! Generated file from `google/protobuf/field_mask.proto` + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct FieldMask { + // message fields + pub paths: crate::RepeatedField<::std::string::String>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a FieldMask { + fn default() -> &'a FieldMask { + <FieldMask as crate::Message>::default_instance() + } +} + +impl FieldMask { + pub fn new() -> FieldMask { + ::std::default::Default::default() + } + + // repeated string paths = 1; + + + pub fn get_paths(&self) -> &[::std::string::String] { + &self.paths + } + pub fn clear_paths(&mut self) { + self.paths.clear(); + } + + // Param is passed by value, moved + pub fn set_paths(&mut self, v: crate::RepeatedField<::std::string::String>) { + self.paths = v; + } + + // Mutable pointer to the field. + pub fn mut_paths(&mut self) -> &mut crate::RepeatedField<::std::string::String> { + &mut self.paths + } + + // Take field + pub fn take_paths(&mut self) -> crate::RepeatedField<::std::string::String> { + ::std::mem::replace(&mut self.paths, crate::RepeatedField::new()) + } +} + +impl crate::Message for FieldMask { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_repeated_string_into(wire_type, is, &mut self.paths)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + for value in &self.paths { + my_size += crate::rt::string_size(1, &value); + }; + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + for v in &self.paths { + os.write_string(1, &v)?; + }; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> FieldMask { + FieldMask::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeString>( + "paths", + |m: &FieldMask| { &m.paths }, + |m: &mut FieldMask| { &mut m.paths }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<FieldMask>( + "FieldMask", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static FieldMask { + static instance: crate::rt::LazyV2<FieldMask> = crate::rt::LazyV2::INIT; + instance.get(FieldMask::new) + } +} + +impl crate::Clear for FieldMask { + fn clear(&mut self) { + self.paths.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for FieldMask { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for FieldMask { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +static file_descriptor_proto_data: &'static [u8] = b"\ + \n\x20google/protobuf/field_mask.proto\x12\x0fgoogle.protobuf\"!\n\tFiel\ + dMask\x12\x14\n\x05paths\x18\x01\x20\x03(\tR\x05pathsB\x85\x01\n\x13com.\ + google.protobufB\x0eFieldMaskProtoP\x01Z2google.golang.org/protobuf/type\ + s/known/fieldmaskpb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobu\ + f.WellKnownTypesJ\xa1;\n\x07\x12\x05\x1e\0\xf4\x01\x01\n\xcc\x0c\n\x01\ + \x0c\x12\x03\x1e\0\x122\xc1\x0c\x20Protocol\x20Buffers\x20-\x20Google's\ + \x20data\x20interchange\x20format\n\x20Copyright\x202008\x20Google\x20In\ + c.\x20\x20All\x20rights\x20reserved.\n\x20https://developers.google.com/\ + protocol-buffers/\n\n\x20Redistribution\x20and\x20use\x20in\x20source\ + \x20and\x20binary\x20forms,\x20with\x20or\x20without\n\x20modification,\ + \x20are\x20permitted\x20provided\x20that\x20the\x20following\x20conditio\ + ns\x20are\n\x20met:\n\n\x20\x20\x20\x20\x20*\x20Redistributions\x20of\ + \x20source\x20code\x20must\x20retain\x20the\x20above\x20copyright\n\x20n\ + otice,\x20this\x20list\x20of\x20conditions\x20and\x20the\x20following\ + \x20disclaimer.\n\x20\x20\x20\x20\x20*\x20Redistributions\x20in\x20binar\ + y\x20form\x20must\x20reproduce\x20the\x20above\n\x20copyright\x20notice,\ + \x20this\x20list\x20of\x20conditions\x20and\x20the\x20following\x20discl\ + aimer\n\x20in\x20the\x20documentation\x20and/or\x20other\x20materials\ + \x20provided\x20with\x20the\n\x20distribution.\n\x20\x20\x20\x20\x20*\ + \x20Neither\x20the\x20name\x20of\x20Google\x20Inc.\x20nor\x20the\x20name\ + s\x20of\x20its\n\x20contributors\x20may\x20be\x20used\x20to\x20endorse\ + \x20or\x20promote\x20products\x20derived\x20from\n\x20this\x20software\ + \x20without\x20specific\x20prior\x20written\x20permission.\n\n\x20THIS\ + \x20SOFTWARE\x20IS\x20PROVIDED\x20BY\x20THE\x20COPYRIGHT\x20HOLDERS\x20A\ + ND\x20CONTRIBUTORS\n\x20\"AS\x20IS\"\x20AND\x20ANY\x20EXPRESS\x20OR\x20I\ + MPLIED\x20WARRANTIES,\x20INCLUDING,\x20BUT\x20NOT\n\x20LIMITED\x20TO,\ + \x20THE\x20IMPLIED\x20WARRANTIES\x20OF\x20MERCHANTABILITY\x20AND\x20FITN\ + ESS\x20FOR\n\x20A\x20PARTICULAR\x20PURPOSE\x20ARE\x20DISCLAIMED.\x20IN\ + \x20NO\x20EVENT\x20SHALL\x20THE\x20COPYRIGHT\n\x20OWNER\x20OR\x20CONTRIB\ + UTORS\x20BE\x20LIABLE\x20FOR\x20ANY\x20DIRECT,\x20INDIRECT,\x20INCIDENTA\ + L,\n\x20SPECIAL,\x20EXEMPLARY,\x20OR\x20CONSEQUENTIAL\x20DAMAGES\x20(INC\ + LUDING,\x20BUT\x20NOT\n\x20LIMITED\x20TO,\x20PROCUREMENT\x20OF\x20SUBSTI\ + TUTE\x20GOODS\x20OR\x20SERVICES;\x20LOSS\x20OF\x20USE,\n\x20DATA,\x20OR\ + \x20PROFITS;\x20OR\x20BUSINESS\x20INTERRUPTION)\x20HOWEVER\x20CAUSED\x20\ + AND\x20ON\x20ANY\n\x20THEORY\x20OF\x20LIABILITY,\x20WHETHER\x20IN\x20CON\ + TRACT,\x20STRICT\x20LIABILITY,\x20OR\x20TORT\n\x20(INCLUDING\x20NEGLIGEN\ + CE\x20OR\x20OTHERWISE)\x20ARISING\x20IN\x20ANY\x20WAY\x20OUT\x20OF\x20TH\ + E\x20USE\n\x20OF\x20THIS\x20SOFTWARE,\x20EVEN\x20IF\x20ADVISED\x20OF\x20\ + THE\x20POSSIBILITY\x20OF\x20SUCH\x20DAMAGE.\n\n\x08\n\x01\x02\x12\x03\ + \x20\0\x18\n\x08\n\x01\x08\x12\x03\"\0;\n\t\n\x02\x08%\x12\x03\"\0;\n\ + \x08\n\x01\x08\x12\x03#\0,\n\t\n\x02\x08\x01\x12\x03#\0,\n\x08\n\x01\x08\ + \x12\x03$\0/\n\t\n\x02\x08\x08\x12\x03$\0/\n\x08\n\x01\x08\x12\x03%\0\"\ + \n\t\n\x02\x08\n\x12\x03%\0\"\n\x08\n\x01\x08\x12\x03&\0!\n\t\n\x02\x08$\ + \x12\x03&\0!\n\x08\n\x01\x08\x12\x03'\0I\n\t\n\x02\x08\x0b\x12\x03'\0I\n\ + \x08\n\x01\x08\x12\x03(\0\x1f\n\t\n\x02\x08\x1f\x12\x03(\0\x1f\n\xb2,\n\ + \x02\x04\0\x12\x06\xf1\x01\0\xf4\x01\x01\x1a\xa3,\x20`FieldMask`\x20repr\ + esents\x20a\x20set\x20of\x20symbolic\x20field\x20paths,\x20for\x20exampl\ + e:\n\n\x20\x20\x20\x20\x20paths:\x20\"f.a\"\n\x20\x20\x20\x20\x20paths:\ + \x20\"f.b.d\"\n\n\x20Here\x20`f`\x20represents\x20a\x20field\x20in\x20so\ + me\x20root\x20message,\x20`a`\x20and\x20`b`\n\x20fields\x20in\x20the\x20\ + message\x20found\x20in\x20`f`,\x20and\x20`d`\x20a\x20field\x20found\x20i\ + n\x20the\n\x20message\x20in\x20`f.b`.\n\n\x20Field\x20masks\x20are\x20us\ + ed\x20to\x20specify\x20a\x20subset\x20of\x20fields\x20that\x20should\x20\ + be\n\x20returned\x20by\x20a\x20get\x20operation\x20or\x20modified\x20by\ + \x20an\x20update\x20operation.\n\x20Field\x20masks\x20also\x20have\x20a\ + \x20custom\x20JSON\x20encoding\x20(see\x20below).\n\n\x20#\x20Field\x20M\ + asks\x20in\x20Projections\n\n\x20When\x20used\x20in\x20the\x20context\ + \x20of\x20a\x20projection,\x20a\x20response\x20message\x20or\n\x20sub-me\ + ssage\x20is\x20filtered\x20by\x20the\x20API\x20to\x20only\x20contain\x20\ + those\x20fields\x20as\n\x20specified\x20in\x20the\x20mask.\x20For\x20exa\ + mple,\x20if\x20the\x20mask\x20in\x20the\x20previous\n\x20example\x20is\ + \x20applied\x20to\x20a\x20response\x20message\x20as\x20follows:\n\n\x20\ + \x20\x20\x20\x20f\x20{\n\x20\x20\x20\x20\x20\x20\x20a\x20:\x2022\n\x20\ + \x20\x20\x20\x20\x20\x20b\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20d\ + \x20:\x201\n\x20\x20\x20\x20\x20\x20\x20\x20\x20x\x20:\x202\n\x20\x20\ + \x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20\x20\x20y\x20:\x2013\n\x20\ + \x20\x20\x20\x20}\n\x20\x20\x20\x20\x20z:\x208\n\n\x20The\x20result\x20w\ + ill\x20not\x20contain\x20specific\x20values\x20for\x20fields\x20x,y\x20a\ + nd\x20z\n\x20(their\x20value\x20will\x20be\x20set\x20to\x20the\x20defaul\ + t,\x20and\x20omitted\x20in\x20proto\x20text\n\x20output):\n\n\n\x20\x20\ + \x20\x20\x20f\x20{\n\x20\x20\x20\x20\x20\x20\x20a\x20:\x2022\n\x20\x20\ + \x20\x20\x20\x20\x20b\x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20d\x20:\ + \x201\n\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20}\n\n\x20A\x20\ + repeated\x20field\x20is\x20not\x20allowed\x20except\x20at\x20the\x20last\ + \x20position\x20of\x20a\n\x20paths\x20string.\n\n\x20If\x20a\x20FieldMas\ + k\x20object\x20is\x20not\x20present\x20in\x20a\x20get\x20operation,\x20t\ + he\n\x20operation\x20applies\x20to\x20all\x20fields\x20(as\x20if\x20a\ + \x20FieldMask\x20of\x20all\x20fields\n\x20had\x20been\x20specified).\n\n\ + \x20Note\x20that\x20a\x20field\x20mask\x20does\x20not\x20necessarily\x20\ + apply\x20to\x20the\n\x20top-level\x20response\x20message.\x20In\x20case\ + \x20of\x20a\x20REST\x20get\x20operation,\x20the\n\x20field\x20mask\x20ap\ + plies\x20directly\x20to\x20the\x20response,\x20but\x20in\x20case\x20of\ + \x20a\x20REST\n\x20list\x20operation,\x20the\x20mask\x20instead\x20appli\ + es\x20to\x20each\x20individual\x20message\n\x20in\x20the\x20returned\x20\ + resource\x20list.\x20In\x20case\x20of\x20a\x20REST\x20custom\x20method,\ + \n\x20other\x20definitions\x20may\x20be\x20used.\x20Where\x20the\x20mask\ + \x20applies\x20will\x20be\n\x20clearly\x20documented\x20together\x20with\ + \x20its\x20declaration\x20in\x20the\x20API.\x20\x20In\n\x20any\x20case,\ + \x20the\x20effect\x20on\x20the\x20returned\x20resource/resources\x20is\ + \x20required\n\x20behavior\x20for\x20APIs.\n\n\x20#\x20Field\x20Masks\ + \x20in\x20Update\x20Operations\n\n\x20A\x20field\x20mask\x20in\x20update\ + \x20operations\x20specifies\x20which\x20fields\x20of\x20the\n\x20targete\ + d\x20resource\x20are\x20going\x20to\x20be\x20updated.\x20The\x20API\x20i\ + s\x20required\n\x20to\x20only\x20change\x20the\x20values\x20of\x20the\ + \x20fields\x20as\x20specified\x20in\x20the\x20mask\n\x20and\x20leave\x20\ + the\x20others\x20untouched.\x20If\x20a\x20resource\x20is\x20passed\x20in\ + \x20to\n\x20describe\x20the\x20updated\x20values,\x20the\x20API\x20ignor\ + es\x20the\x20values\x20of\x20all\n\x20fields\x20not\x20covered\x20by\x20\ + the\x20mask.\n\n\x20If\x20a\x20repeated\x20field\x20is\x20specified\x20f\ + or\x20an\x20update\x20operation,\x20new\x20values\x20will\n\x20be\x20app\ + ended\x20to\x20the\x20existing\x20repeated\x20field\x20in\x20the\x20targ\ + et\x20resource.\x20Note\x20that\n\x20a\x20repeated\x20field\x20is\x20onl\ + y\x20allowed\x20in\x20the\x20last\x20position\x20of\x20a\x20`paths`\x20s\ + tring.\n\n\x20If\x20a\x20sub-message\x20is\x20specified\x20in\x20the\x20\ + last\x20position\x20of\x20the\x20field\x20mask\x20for\x20an\n\x20update\ + \x20operation,\x20then\x20new\x20value\x20will\x20be\x20merged\x20into\ + \x20the\x20existing\x20sub-message\n\x20in\x20the\x20target\x20resource.\ + \n\n\x20For\x20example,\x20given\x20the\x20target\x20message:\n\n\x20\ + \x20\x20\x20\x20f\x20{\n\x20\x20\x20\x20\x20\x20\x20b\x20{\n\x20\x20\x20\ + \x20\x20\x20\x20\x20\x20d:\x201\n\x20\x20\x20\x20\x20\x20\x20\x20\x20x:\ + \x202\n\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20\x20\x20c:\x20\ + [1]\n\x20\x20\x20\x20\x20}\n\n\x20And\x20an\x20update\x20message:\n\n\ + \x20\x20\x20\x20\x20f\x20{\n\x20\x20\x20\x20\x20\x20\x20b\x20{\n\x20\x20\ + \x20\x20\x20\x20\x20\x20\x20d:\x2010\n\x20\x20\x20\x20\x20\x20\x20}\n\ + \x20\x20\x20\x20\x20\x20\x20c:\x20[2]\n\x20\x20\x20\x20\x20}\n\n\x20then\ + \x20if\x20the\x20field\x20mask\x20is:\n\n\x20\x20paths:\x20[\"f.b\",\x20\ + \"f.c\"]\n\n\x20then\x20the\x20result\x20will\x20be:\n\n\x20\x20\x20\x20\ + \x20f\x20{\n\x20\x20\x20\x20\x20\x20\x20b\x20{\n\x20\x20\x20\x20\x20\x20\ + \x20\x20\x20d:\x2010\n\x20\x20\x20\x20\x20\x20\x20\x20\x20x:\x202\n\x20\ + \x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20\x20\x20c:\x20[1,\x202]\n\ + \x20\x20\x20\x20\x20}\n\n\x20An\x20implementation\x20may\x20provide\x20o\ + ptions\x20to\x20override\x20this\x20default\x20behavior\x20for\n\x20repe\ + ated\x20and\x20message\x20fields.\n\n\x20In\x20order\x20to\x20reset\x20a\ + \x20field's\x20value\x20to\x20the\x20default,\x20the\x20field\x20must\n\ + \x20be\x20in\x20the\x20mask\x20and\x20set\x20to\x20the\x20default\x20val\ + ue\x20in\x20the\x20provided\x20resource.\n\x20Hence,\x20in\x20order\x20t\ + o\x20reset\x20all\x20fields\x20of\x20a\x20resource,\x20provide\x20a\x20d\ + efault\n\x20instance\x20of\x20the\x20resource\x20and\x20set\x20all\x20fi\ + elds\x20in\x20the\x20mask,\x20or\x20do\n\x20not\x20provide\x20a\x20mask\ + \x20as\x20described\x20below.\n\n\x20If\x20a\x20field\x20mask\x20is\x20n\ + ot\x20present\x20on\x20update,\x20the\x20operation\x20applies\x20to\n\ + \x20all\x20fields\x20(as\x20if\x20a\x20field\x20mask\x20of\x20all\x20fie\ + lds\x20has\x20been\x20specified).\n\x20Note\x20that\x20in\x20the\x20pres\ + ence\x20of\x20schema\x20evolution,\x20this\x20may\x20mean\x20that\n\x20f\ + ields\x20the\x20client\x20does\x20not\x20know\x20and\x20has\x20therefore\ + \x20not\x20filled\x20into\n\x20the\x20request\x20will\x20be\x20reset\x20\ + to\x20their\x20default.\x20If\x20this\x20is\x20unwanted\n\x20behavior,\ + \x20a\x20specific\x20service\x20may\x20require\x20a\x20client\x20to\x20a\ + lways\x20specify\n\x20a\x20field\x20mask,\x20producing\x20an\x20error\ + \x20if\x20not.\n\n\x20As\x20with\x20get\x20operations,\x20the\x20locatio\ + n\x20of\x20the\x20resource\x20which\n\x20describes\x20the\x20updated\x20\ + values\x20in\x20the\x20request\x20message\x20depends\x20on\x20the\n\x20o\ + peration\x20kind.\x20In\x20any\x20case,\x20the\x20effect\x20of\x20the\ + \x20field\x20mask\x20is\n\x20required\x20to\x20be\x20honored\x20by\x20th\ + e\x20API.\n\n\x20##\x20Considerations\x20for\x20HTTP\x20REST\n\n\x20The\ + \x20HTTP\x20kind\x20of\x20an\x20update\x20operation\x20which\x20uses\x20\ + a\x20field\x20mask\x20must\n\x20be\x20set\x20to\x20PATCH\x20instead\x20o\ + f\x20PUT\x20in\x20order\x20to\x20satisfy\x20HTTP\x20semantics\n\x20(PUT\ + \x20must\x20only\x20be\x20used\x20for\x20full\x20updates).\n\n\x20#\x20J\ + SON\x20Encoding\x20of\x20Field\x20Masks\n\n\x20In\x20JSON,\x20a\x20field\ + \x20mask\x20is\x20encoded\x20as\x20a\x20single\x20string\x20where\x20pat\ + hs\x20are\n\x20separated\x20by\x20a\x20comma.\x20Fields\x20name\x20in\ + \x20each\x20path\x20are\x20converted\n\x20to/from\x20lower-camel\x20nami\ + ng\x20conventions.\n\n\x20As\x20an\x20example,\x20consider\x20the\x20fol\ + lowing\x20message\x20declarations:\n\n\x20\x20\x20\x20\x20message\x20Pro\ + file\x20{\n\x20\x20\x20\x20\x20\x20\x20User\x20user\x20=\x201;\n\x20\x20\ + \x20\x20\x20\x20\x20Photo\x20photo\x20=\x202;\n\x20\x20\x20\x20\x20}\n\ + \x20\x20\x20\x20\x20message\x20User\x20{\n\x20\x20\x20\x20\x20\x20\x20st\ + ring\x20display_name\x20=\x201;\n\x20\x20\x20\x20\x20\x20\x20string\x20a\ + ddress\x20=\x202;\n\x20\x20\x20\x20\x20}\n\n\x20In\x20proto\x20a\x20fiel\ + d\x20mask\x20for\x20`Profile`\x20may\x20look\x20as\x20such:\n\n\x20\x20\ + \x20\x20\x20mask\x20{\n\x20\x20\x20\x20\x20\x20\x20paths:\x20\"user.disp\ + lay_name\"\n\x20\x20\x20\x20\x20\x20\x20paths:\x20\"photo\"\n\x20\x20\ + \x20\x20\x20}\n\n\x20In\x20JSON,\x20the\x20same\x20mask\x20is\x20represe\ + nted\x20as\x20below:\n\n\x20\x20\x20\x20\x20{\n\x20\x20\x20\x20\x20\x20\ + \x20mask:\x20\"user.displayName,photo\"\n\x20\x20\x20\x20\x20}\n\n\x20#\ + \x20Field\x20Masks\x20and\x20Oneof\x20Fields\n\n\x20Field\x20masks\x20tr\ + eat\x20fields\x20in\x20oneofs\x20just\x20as\x20regular\x20fields.\x20Con\ + sider\x20the\n\x20following\x20message:\n\n\x20\x20\x20\x20\x20message\ + \x20SampleMessage\x20{\n\x20\x20\x20\x20\x20\x20\x20oneof\x20test_oneof\ + \x20{\n\x20\x20\x20\x20\x20\x20\x20\x20\x20string\x20name\x20=\x204;\n\ + \x20\x20\x20\x20\x20\x20\x20\x20\x20SubMessage\x20sub_message\x20=\x209;\ + \n\x20\x20\x20\x20\x20\x20\x20}\n\x20\x20\x20\x20\x20}\n\n\x20The\x20fie\ + ld\x20mask\x20can\x20be:\n\n\x20\x20\x20\x20\x20mask\x20{\n\x20\x20\x20\ + \x20\x20\x20\x20paths:\x20\"name\"\n\x20\x20\x20\x20\x20}\n\n\x20Or:\n\n\ + \x20\x20\x20\x20\x20mask\x20{\n\x20\x20\x20\x20\x20\x20\x20paths:\x20\"s\ + ub_message\"\n\x20\x20\x20\x20\x20}\n\n\x20Note\x20that\x20oneof\x20type\ + \x20names\x20(\"test_oneof\"\x20in\x20this\x20case)\x20cannot\x20be\x20u\ + sed\x20in\n\x20paths.\n\n\x20##\x20Field\x20Mask\x20Verification\n\n\x20\ + The\x20implementation\x20of\x20any\x20API\x20method\x20which\x20has\x20a\ + \x20FieldMask\x20type\x20field\x20in\x20the\n\x20request\x20should\x20ve\ + rify\x20the\x20included\x20field\x20paths,\x20and\x20return\x20an\n\x20`\ + INVALID_ARGUMENT`\x20error\x20if\x20any\x20path\x20is\x20unmappable.\n\n\ + \x0b\n\x03\x04\0\x01\x12\x04\xf1\x01\x08\x11\n,\n\x04\x04\0\x02\0\x12\ + \x04\xf3\x01\x02\x1c\x1a\x1e\x20The\x20set\x20of\x20field\x20mask\x20pat\ + hs.\n\n\r\n\x05\x04\0\x02\0\x04\x12\x04\xf3\x01\x02\n\n\r\n\x05\x04\0\ + \x02\0\x05\x12\x04\xf3\x01\x0b\x11\n\r\n\x05\x04\0\x02\0\x01\x12\x04\xf3\ + \x01\x12\x17\n\r\n\x05\x04\0\x02\0\x03\x12\x04\xf3\x01\x1a\x1bb\x06proto\ + 3\ +"; + +static file_descriptor_proto_lazy: crate::rt::LazyV2<crate::descriptor::FileDescriptorProto> = crate::rt::LazyV2::INIT; + +fn parse_descriptor_proto() -> crate::descriptor::FileDescriptorProto { + crate::Message::parse_from_bytes(file_descriptor_proto_data).unwrap() +} + +pub fn file_descriptor_proto() -> &'static crate::descriptor::FileDescriptorProto { + file_descriptor_proto_lazy.get(|| { + parse_descriptor_proto() + }) +} diff --git a/2.27.1/src/well_known_types/mod.rs b/2.27.1/src/well_known_types/mod.rs new file mode 100644 index 0000000..9ecf8fb --- /dev/null +++ b/2.27.1/src/well_known_types/mod.rs @@ -0,0 +1,26 @@ +// This file is generated. Do not edit +//! Generated code for "well known types" +//! +//! [This document](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf) describes these types. + +mod any; +mod api; +mod duration; +mod empty; +mod field_mask; +mod source_context; +mod struct_pb; +mod timestamp; +mod type_pb; +mod wrappers; + +pub use self::any::*; +pub use self::api::*; +pub use self::duration::*; +pub use self::empty::*; +pub use self::field_mask::*; +pub use self::source_context::*; +pub use self::struct_pb::*; +pub use self::timestamp::*; +pub use self::type_pb::*; +pub use self::wrappers::*; diff --git a/2.27.1/src/well_known_types/source_context.rs b/2.27.1/src/well_known_types/source_context.rs new file mode 100644 index 0000000..646e87d --- /dev/null +++ b/2.27.1/src/well_known_types/source_context.rs @@ -0,0 +1,251 @@ +// This file is generated by rust-protobuf 2.26.0. Do not edit +// @generated + +// https://github.com/rust-lang/rust-clippy/issues/702 +#![allow(unknown_lints)] +#![allow(clippy::all)] + +#![allow(unused_attributes)] +#![cfg_attr(rustfmt, rustfmt::skip)] + +#![allow(box_pointers)] +#![allow(dead_code)] +#![allow(missing_docs)] +#![allow(non_camel_case_types)] +#![allow(non_snake_case)] +#![allow(non_upper_case_globals)] +#![allow(trivial_casts)] +#![allow(unused_imports)] +#![allow(unused_results)] +//! Generated file from `google/protobuf/source_context.proto` + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct SourceContext { + // message fields + pub file_name: ::std::string::String, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a SourceContext { + fn default() -> &'a SourceContext { + <SourceContext as crate::Message>::default_instance() + } +} + +impl SourceContext { + pub fn new() -> SourceContext { + ::std::default::Default::default() + } + + // string file_name = 1; + + + pub fn get_file_name(&self) -> &str { + &self.file_name + } + pub fn clear_file_name(&mut self) { + self.file_name.clear(); + } + + // Param is passed by value, moved + pub fn set_file_name(&mut self, v: ::std::string::String) { + self.file_name = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_file_name(&mut self) -> &mut ::std::string::String { + &mut self.file_name + } + + // Take field + pub fn take_file_name(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.file_name, ::std::string::String::new()) + } +} + +impl crate::Message for SourceContext { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_proto3_string_into(wire_type, is, &mut self.file_name)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if !self.file_name.is_empty() { + my_size += crate::rt::string_size(1, &self.file_name); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if !self.file_name.is_empty() { + os.write_string(1, &self.file_name)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> SourceContext { + SourceContext::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeString>( + "file_name", + |m: &SourceContext| { &m.file_name }, + |m: &mut SourceContext| { &mut m.file_name }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<SourceContext>( + "SourceContext", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static SourceContext { + static instance: crate::rt::LazyV2<SourceContext> = crate::rt::LazyV2::INIT; + instance.get(SourceContext::new) + } +} + +impl crate::Clear for SourceContext { + fn clear(&mut self) { + self.file_name.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for SourceContext { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for SourceContext { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +static file_descriptor_proto_data: &'static [u8] = b"\ + \n$google/protobuf/source_context.proto\x12\x0fgoogle.protobuf\",\n\rSou\ + rceContext\x12\x1b\n\tfile_name\x18\x01\x20\x01(\tR\x08fileNameB\x8a\x01\ + \n\x13com.google.protobufB\x12SourceContextProtoP\x01Z6google.golang.org\ + /protobuf/types/known/sourcecontextpb\xa2\x02\x03GPB\xaa\x02\x1eGoogle.P\ + rotobuf.WellKnownTypesJ\xc1\x10\n\x06\x12\x04\x1e\0/\x01\n\xcc\x0c\n\x01\ + \x0c\x12\x03\x1e\0\x122\xc1\x0c\x20Protocol\x20Buffers\x20-\x20Google's\ + \x20data\x20interchange\x20format\n\x20Copyright\x202008\x20Google\x20In\ + c.\x20\x20All\x20rights\x20reserved.\n\x20https://developers.google.com/\ + protocol-buffers/\n\n\x20Redistribution\x20and\x20use\x20in\x20source\ + \x20and\x20binary\x20forms,\x20with\x20or\x20without\n\x20modification,\ + \x20are\x20permitted\x20provided\x20that\x20the\x20following\x20conditio\ + ns\x20are\n\x20met:\n\n\x20\x20\x20\x20\x20*\x20Redistributions\x20of\ + \x20source\x20code\x20must\x20retain\x20the\x20above\x20copyright\n\x20n\ + otice,\x20this\x20list\x20of\x20conditions\x20and\x20the\x20following\ + \x20disclaimer.\n\x20\x20\x20\x20\x20*\x20Redistributions\x20in\x20binar\ + y\x20form\x20must\x20reproduce\x20the\x20above\n\x20copyright\x20notice,\ + \x20this\x20list\x20of\x20conditions\x20and\x20the\x20following\x20discl\ + aimer\n\x20in\x20the\x20documentation\x20and/or\x20other\x20materials\ + \x20provided\x20with\x20the\n\x20distribution.\n\x20\x20\x20\x20\x20*\ + \x20Neither\x20the\x20name\x20of\x20Google\x20Inc.\x20nor\x20the\x20name\ + s\x20of\x20its\n\x20contributors\x20may\x20be\x20used\x20to\x20endorse\ + \x20or\x20promote\x20products\x20derived\x20from\n\x20this\x20software\ + \x20without\x20specific\x20prior\x20written\x20permission.\n\n\x20THIS\ + \x20SOFTWARE\x20IS\x20PROVIDED\x20BY\x20THE\x20COPYRIGHT\x20HOLDERS\x20A\ + ND\x20CONTRIBUTORS\n\x20\"AS\x20IS\"\x20AND\x20ANY\x20EXPRESS\x20OR\x20I\ + MPLIED\x20WARRANTIES,\x20INCLUDING,\x20BUT\x20NOT\n\x20LIMITED\x20TO,\ + \x20THE\x20IMPLIED\x20WARRANTIES\x20OF\x20MERCHANTABILITY\x20AND\x20FITN\ + ESS\x20FOR\n\x20A\x20PARTICULAR\x20PURPOSE\x20ARE\x20DISCLAIMED.\x20IN\ + \x20NO\x20EVENT\x20SHALL\x20THE\x20COPYRIGHT\n\x20OWNER\x20OR\x20CONTRIB\ + UTORS\x20BE\x20LIABLE\x20FOR\x20ANY\x20DIRECT,\x20INDIRECT,\x20INCIDENTA\ + L,\n\x20SPECIAL,\x20EXEMPLARY,\x20OR\x20CONSEQUENTIAL\x20DAMAGES\x20(INC\ + LUDING,\x20BUT\x20NOT\n\x20LIMITED\x20TO,\x20PROCUREMENT\x20OF\x20SUBSTI\ + TUTE\x20GOODS\x20OR\x20SERVICES;\x20LOSS\x20OF\x20USE,\n\x20DATA,\x20OR\ + \x20PROFITS;\x20OR\x20BUSINESS\x20INTERRUPTION)\x20HOWEVER\x20CAUSED\x20\ + AND\x20ON\x20ANY\n\x20THEORY\x20OF\x20LIABILITY,\x20WHETHER\x20IN\x20CON\ + TRACT,\x20STRICT\x20LIABILITY,\x20OR\x20TORT\n\x20(INCLUDING\x20NEGLIGEN\ + CE\x20OR\x20OTHERWISE)\x20ARISING\x20IN\x20ANY\x20WAY\x20OUT\x20OF\x20TH\ + E\x20USE\n\x20OF\x20THIS\x20SOFTWARE,\x20EVEN\x20IF\x20ADVISED\x20OF\x20\ + THE\x20POSSIBILITY\x20OF\x20SUCH\x20DAMAGE.\n\n\x08\n\x01\x02\x12\x03\ + \x20\0\x18\n\x08\n\x01\x08\x12\x03\"\0;\n\t\n\x02\x08%\x12\x03\"\0;\n\ + \x08\n\x01\x08\x12\x03#\0,\n\t\n\x02\x08\x01\x12\x03#\0,\n\x08\n\x01\x08\ + \x12\x03$\03\n\t\n\x02\x08\x08\x12\x03$\03\n\x08\n\x01\x08\x12\x03%\0\"\ + \n\t\n\x02\x08\n\x12\x03%\0\"\n\x08\n\x01\x08\x12\x03&\0!\n\t\n\x02\x08$\ + \x12\x03&\0!\n\x08\n\x01\x08\x12\x03'\0M\n\t\n\x02\x08\x0b\x12\x03'\0M\n\ + \x83\x01\n\x02\x04\0\x12\x04+\0/\x01\x1aw\x20`SourceContext`\x20represen\ + ts\x20information\x20about\x20the\x20source\x20of\x20a\n\x20protobuf\x20\ + element,\x20like\x20the\x20file\x20in\x20which\x20it\x20is\x20defined.\n\ + \n\n\n\x03\x04\0\x01\x12\x03+\x08\x15\n\xa3\x01\n\x04\x04\0\x02\0\x12\ + \x03.\x02\x17\x1a\x95\x01\x20The\x20path-qualified\x20name\x20of\x20the\ + \x20.proto\x20file\x20that\x20contained\x20the\x20associated\n\x20protob\ + uf\x20element.\x20\x20For\x20example:\x20`\"google/protobuf/source_conte\ + xt.proto\"`.\n\n\x0c\n\x05\x04\0\x02\0\x05\x12\x03.\x02\x08\n\x0c\n\x05\ + \x04\0\x02\0\x01\x12\x03.\t\x12\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03.\x15\ + \x16b\x06proto3\ +"; + +static file_descriptor_proto_lazy: crate::rt::LazyV2<crate::descriptor::FileDescriptorProto> = crate::rt::LazyV2::INIT; + +fn parse_descriptor_proto() -> crate::descriptor::FileDescriptorProto { + crate::Message::parse_from_bytes(file_descriptor_proto_data).unwrap() +} + +pub fn file_descriptor_proto() -> &'static crate::descriptor::FileDescriptorProto { + file_descriptor_proto_lazy.get(|| { + parse_descriptor_proto() + }) +} diff --git a/2.27.1/src/well_known_types/struct_pb.rs b/2.27.1/src/well_known_types/struct_pb.rs new file mode 100644 index 0000000..5f18a42 --- /dev/null +++ b/2.27.1/src/well_known_types/struct_pb.rs @@ -0,0 +1,1009 @@ +// This file is generated by rust-protobuf 2.26.0. Do not edit +// @generated + +// https://github.com/rust-lang/rust-clippy/issues/702 +#![allow(unknown_lints)] +#![allow(clippy::all)] + +#![allow(unused_attributes)] +#![cfg_attr(rustfmt, rustfmt::skip)] + +#![allow(box_pointers)] +#![allow(dead_code)] +#![allow(missing_docs)] +#![allow(non_camel_case_types)] +#![allow(non_snake_case)] +#![allow(non_upper_case_globals)] +#![allow(trivial_casts)] +#![allow(unused_imports)] +#![allow(unused_results)] +//! Generated file from `google/protobuf/struct.proto` + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct Struct { + // message fields + pub fields: ::std::collections::HashMap<::std::string::String, Value>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a Struct { + fn default() -> &'a Struct { + <Struct as crate::Message>::default_instance() + } +} + +impl Struct { + pub fn new() -> Struct { + ::std::default::Default::default() + } + + // repeated .google.protobuf.Struct.FieldsEntry fields = 1; + + + pub fn get_fields(&self) -> &::std::collections::HashMap<::std::string::String, Value> { + &self.fields + } + pub fn clear_fields(&mut self) { + self.fields.clear(); + } + + // Param is passed by value, moved + pub fn set_fields(&mut self, v: ::std::collections::HashMap<::std::string::String, Value>) { + self.fields = v; + } + + // Mutable pointer to the field. + pub fn mut_fields(&mut self) -> &mut ::std::collections::HashMap<::std::string::String, Value> { + &mut self.fields + } + + // Take field + pub fn take_fields(&mut self) -> ::std::collections::HashMap<::std::string::String, Value> { + ::std::mem::replace(&mut self.fields, ::std::collections::HashMap::new()) + } +} + +impl crate::Message for Struct { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_map_into::<crate::types::ProtobufTypeString, crate::types::ProtobufTypeMessage<Value>>(wire_type, is, &mut self.fields)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + my_size += crate::rt::compute_map_size::<crate::types::ProtobufTypeString, crate::types::ProtobufTypeMessage<Value>>(1, &self.fields); + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + crate::rt::write_map_with_cached_sizes::<crate::types::ProtobufTypeString, crate::types::ProtobufTypeMessage<Value>>(1, &self.fields, os)?; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> Struct { + Struct::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_map_accessor::<_, crate::types::ProtobufTypeString, crate::types::ProtobufTypeMessage<Value>>( + "fields", + |m: &Struct| { &m.fields }, + |m: &mut Struct| { &mut m.fields }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<Struct>( + "Struct", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static Struct { + static instance: crate::rt::LazyV2<Struct> = crate::rt::LazyV2::INIT; + instance.get(Struct::new) + } +} + +impl crate::Clear for Struct { + fn clear(&mut self) { + self.fields.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for Struct { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for Struct { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct Value { + // message oneof groups + pub kind: ::std::option::Option<Value_oneof_kind>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a Value { + fn default() -> &'a Value { + <Value as crate::Message>::default_instance() + } +} + +#[derive(Clone,PartialEq,Debug)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub enum Value_oneof_kind { + null_value(NullValue), + number_value(f64), + string_value(::std::string::String), + bool_value(bool), + struct_value(Struct), + list_value(ListValue), +} + +impl Value { + pub fn new() -> Value { + ::std::default::Default::default() + } + + // .google.protobuf.NullValue null_value = 1; + + + pub fn get_null_value(&self) -> NullValue { + match self.kind { + ::std::option::Option::Some(Value_oneof_kind::null_value(v)) => v, + _ => NullValue::NULL_VALUE, + } + } + pub fn clear_null_value(&mut self) { + self.kind = ::std::option::Option::None; + } + + pub fn has_null_value(&self) -> bool { + match self.kind { + ::std::option::Option::Some(Value_oneof_kind::null_value(..)) => true, + _ => false, + } + } + + // Param is passed by value, moved + pub fn set_null_value(&mut self, v: NullValue) { + self.kind = ::std::option::Option::Some(Value_oneof_kind::null_value(v)) + } + + // double number_value = 2; + + + pub fn get_number_value(&self) -> f64 { + match self.kind { + ::std::option::Option::Some(Value_oneof_kind::number_value(v)) => v, + _ => 0., + } + } + pub fn clear_number_value(&mut self) { + self.kind = ::std::option::Option::None; + } + + pub fn has_number_value(&self) -> bool { + match self.kind { + ::std::option::Option::Some(Value_oneof_kind::number_value(..)) => true, + _ => false, + } + } + + // Param is passed by value, moved + pub fn set_number_value(&mut self, v: f64) { + self.kind = ::std::option::Option::Some(Value_oneof_kind::number_value(v)) + } + + // string string_value = 3; + + + pub fn get_string_value(&self) -> &str { + match self.kind { + ::std::option::Option::Some(Value_oneof_kind::string_value(ref v)) => v, + _ => "", + } + } + pub fn clear_string_value(&mut self) { + self.kind = ::std::option::Option::None; + } + + pub fn has_string_value(&self) -> bool { + match self.kind { + ::std::option::Option::Some(Value_oneof_kind::string_value(..)) => true, + _ => false, + } + } + + // Param is passed by value, moved + pub fn set_string_value(&mut self, v: ::std::string::String) { + self.kind = ::std::option::Option::Some(Value_oneof_kind::string_value(v)) + } + + // Mutable pointer to the field. + pub fn mut_string_value(&mut self) -> &mut ::std::string::String { + if let ::std::option::Option::Some(Value_oneof_kind::string_value(_)) = self.kind { + } else { + self.kind = ::std::option::Option::Some(Value_oneof_kind::string_value(::std::string::String::new())); + } + match self.kind { + ::std::option::Option::Some(Value_oneof_kind::string_value(ref mut v)) => v, + _ => panic!(), + } + } + + // Take field + pub fn take_string_value(&mut self) -> ::std::string::String { + if self.has_string_value() { + match self.kind.take() { + ::std::option::Option::Some(Value_oneof_kind::string_value(v)) => v, + _ => panic!(), + } + } else { + ::std::string::String::new() + } + } + + // bool bool_value = 4; + + + pub fn get_bool_value(&self) -> bool { + match self.kind { + ::std::option::Option::Some(Value_oneof_kind::bool_value(v)) => v, + _ => false, + } + } + pub fn clear_bool_value(&mut self) { + self.kind = ::std::option::Option::None; + } + + pub fn has_bool_value(&self) -> bool { + match self.kind { + ::std::option::Option::Some(Value_oneof_kind::bool_value(..)) => true, + _ => false, + } + } + + // Param is passed by value, moved + pub fn set_bool_value(&mut self, v: bool) { + self.kind = ::std::option::Option::Some(Value_oneof_kind::bool_value(v)) + } + + // .google.protobuf.Struct struct_value = 5; + + + pub fn get_struct_value(&self) -> &Struct { + match self.kind { + ::std::option::Option::Some(Value_oneof_kind::struct_value(ref v)) => v, + _ => <Struct as crate::Message>::default_instance(), + } + } + pub fn clear_struct_value(&mut self) { + self.kind = ::std::option::Option::None; + } + + pub fn has_struct_value(&self) -> bool { + match self.kind { + ::std::option::Option::Some(Value_oneof_kind::struct_value(..)) => true, + _ => false, + } + } + + // Param is passed by value, moved + pub fn set_struct_value(&mut self, v: Struct) { + self.kind = ::std::option::Option::Some(Value_oneof_kind::struct_value(v)) + } + + // Mutable pointer to the field. + pub fn mut_struct_value(&mut self) -> &mut Struct { + if let ::std::option::Option::Some(Value_oneof_kind::struct_value(_)) = self.kind { + } else { + self.kind = ::std::option::Option::Some(Value_oneof_kind::struct_value(Struct::new())); + } + match self.kind { + ::std::option::Option::Some(Value_oneof_kind::struct_value(ref mut v)) => v, + _ => panic!(), + } + } + + // Take field + pub fn take_struct_value(&mut self) -> Struct { + if self.has_struct_value() { + match self.kind.take() { + ::std::option::Option::Some(Value_oneof_kind::struct_value(v)) => v, + _ => panic!(), + } + } else { + Struct::new() + } + } + + // .google.protobuf.ListValue list_value = 6; + + + pub fn get_list_value(&self) -> &ListValue { + match self.kind { + ::std::option::Option::Some(Value_oneof_kind::list_value(ref v)) => v, + _ => <ListValue as crate::Message>::default_instance(), + } + } + pub fn clear_list_value(&mut self) { + self.kind = ::std::option::Option::None; + } + + pub fn has_list_value(&self) -> bool { + match self.kind { + ::std::option::Option::Some(Value_oneof_kind::list_value(..)) => true, + _ => false, + } + } + + // Param is passed by value, moved + pub fn set_list_value(&mut self, v: ListValue) { + self.kind = ::std::option::Option::Some(Value_oneof_kind::list_value(v)) + } + + // Mutable pointer to the field. + pub fn mut_list_value(&mut self) -> &mut ListValue { + if let ::std::option::Option::Some(Value_oneof_kind::list_value(_)) = self.kind { + } else { + self.kind = ::std::option::Option::Some(Value_oneof_kind::list_value(ListValue::new())); + } + match self.kind { + ::std::option::Option::Some(Value_oneof_kind::list_value(ref mut v)) => v, + _ => panic!(), + } + } + + // Take field + pub fn take_list_value(&mut self) -> ListValue { + if self.has_list_value() { + match self.kind.take() { + ::std::option::Option::Some(Value_oneof_kind::list_value(v)) => v, + _ => panic!(), + } + } else { + ListValue::new() + } + } +} + +impl crate::Message for Value { + fn is_initialized(&self) -> bool { + if let Some(Value_oneof_kind::struct_value(ref v)) = self.kind { + if !v.is_initialized() { + return false; + } + } + if let Some(Value_oneof_kind::list_value(ref v)) = self.kind { + if !v.is_initialized() { + return false; + } + } + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + self.kind = ::std::option::Option::Some(Value_oneof_kind::null_value(is.read_enum()?)); + }, + 2 => { + if wire_type != crate::wire_format::WireTypeFixed64 { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + self.kind = ::std::option::Option::Some(Value_oneof_kind::number_value(is.read_double()?)); + }, + 3 => { + if wire_type != crate::wire_format::WireTypeLengthDelimited { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + self.kind = ::std::option::Option::Some(Value_oneof_kind::string_value(is.read_string()?)); + }, + 4 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + self.kind = ::std::option::Option::Some(Value_oneof_kind::bool_value(is.read_bool()?)); + }, + 5 => { + if wire_type != crate::wire_format::WireTypeLengthDelimited { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + self.kind = ::std::option::Option::Some(Value_oneof_kind::struct_value(is.read_message()?)); + }, + 6 => { + if wire_type != crate::wire_format::WireTypeLengthDelimited { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + self.kind = ::std::option::Option::Some(Value_oneof_kind::list_value(is.read_message()?)); + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if let ::std::option::Option::Some(ref v) = self.kind { + match v { + &Value_oneof_kind::null_value(v) => { + my_size += crate::rt::enum_size(1, v); + }, + &Value_oneof_kind::number_value(v) => { + my_size += 9; + }, + &Value_oneof_kind::string_value(ref v) => { + my_size += crate::rt::string_size(3, &v); + }, + &Value_oneof_kind::bool_value(v) => { + my_size += 2; + }, + &Value_oneof_kind::struct_value(ref v) => { + let len = v.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }, + &Value_oneof_kind::list_value(ref v) => { + let len = v.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }, + }; + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if let ::std::option::Option::Some(ref v) = self.kind { + match v { + &Value_oneof_kind::null_value(v) => { + os.write_enum(1, crate::ProtobufEnum::value(&v))?; + }, + &Value_oneof_kind::number_value(v) => { + os.write_double(2, v)?; + }, + &Value_oneof_kind::string_value(ref v) => { + os.write_string(3, v)?; + }, + &Value_oneof_kind::bool_value(v) => { + os.write_bool(4, v)?; + }, + &Value_oneof_kind::struct_value(ref v) => { + os.write_tag(5, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }, + &Value_oneof_kind::list_value(ref v) => { + os.write_tag(6, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }, + }; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> Value { + Value::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_singular_enum_accessor::<_, NullValue>( + "null_value", + Value::has_null_value, + Value::get_null_value, + )); + fields.push(crate::reflect::accessor::make_singular_f64_accessor::<_>( + "number_value", + Value::has_number_value, + Value::get_number_value, + )); + fields.push(crate::reflect::accessor::make_singular_string_accessor::<_>( + "string_value", + Value::has_string_value, + Value::get_string_value, + )); + fields.push(crate::reflect::accessor::make_singular_bool_accessor::<_>( + "bool_value", + Value::has_bool_value, + Value::get_bool_value, + )); + fields.push(crate::reflect::accessor::make_singular_message_accessor::<_, Struct>( + "struct_value", + Value::has_struct_value, + Value::get_struct_value, + )); + fields.push(crate::reflect::accessor::make_singular_message_accessor::<_, ListValue>( + "list_value", + Value::has_list_value, + Value::get_list_value, + )); + crate::reflect::MessageDescriptor::new_pb_name::<Value>( + "Value", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static Value { + static instance: crate::rt::LazyV2<Value> = crate::rt::LazyV2::INIT; + instance.get(Value::new) + } +} + +impl crate::Clear for Value { + fn clear(&mut self) { + self.kind = ::std::option::Option::None; + self.kind = ::std::option::Option::None; + self.kind = ::std::option::Option::None; + self.kind = ::std::option::Option::None; + self.kind = ::std::option::Option::None; + self.kind = ::std::option::Option::None; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for Value { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for Value { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct ListValue { + // message fields + pub values: crate::RepeatedField<Value>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a ListValue { + fn default() -> &'a ListValue { + <ListValue as crate::Message>::default_instance() + } +} + +impl ListValue { + pub fn new() -> ListValue { + ::std::default::Default::default() + } + + // repeated .google.protobuf.Value values = 1; + + + pub fn get_values(&self) -> &[Value] { + &self.values + } + pub fn clear_values(&mut self) { + self.values.clear(); + } + + // Param is passed by value, moved + pub fn set_values(&mut self, v: crate::RepeatedField<Value>) { + self.values = v; + } + + // Mutable pointer to the field. + pub fn mut_values(&mut self) -> &mut crate::RepeatedField<Value> { + &mut self.values + } + + // Take field + pub fn take_values(&mut self) -> crate::RepeatedField<Value> { + ::std::mem::replace(&mut self.values, crate::RepeatedField::new()) + } +} + +impl crate::Message for ListValue { + fn is_initialized(&self) -> bool { + for v in &self.values { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.values)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + for value in &self.values { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + for v in &self.values { + os.write_tag(1, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> ListValue { + ListValue::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<Value>>( + "values", + |m: &ListValue| { &m.values }, + |m: &mut ListValue| { &mut m.values }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<ListValue>( + "ListValue", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static ListValue { + static instance: crate::rt::LazyV2<ListValue> = crate::rt::LazyV2::INIT; + instance.get(ListValue::new) + } +} + +impl crate::Clear for ListValue { + fn clear(&mut self) { + self.values.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for ListValue { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for ListValue { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(Clone,PartialEq,Eq,Debug,Hash)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub enum NullValue { + NULL_VALUE = 0, +} + +impl crate::ProtobufEnum for NullValue { + fn value(&self) -> i32 { + *self as i32 + } + + fn from_i32(value: i32) -> ::std::option::Option<NullValue> { + match value { + 0 => ::std::option::Option::Some(NullValue::NULL_VALUE), + _ => ::std::option::Option::None + } + } + + fn values() -> &'static [Self] { + static values: &'static [NullValue] = &[ + NullValue::NULL_VALUE, + ]; + values + } + + fn enum_descriptor_static() -> &'static crate::reflect::EnumDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::EnumDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + crate::reflect::EnumDescriptor::new_pb_name::<NullValue>("NullValue", file_descriptor_proto()) + }) + } +} + +impl ::std::marker::Copy for NullValue { +} + +impl ::std::default::Default for NullValue { + fn default() -> Self { + NullValue::NULL_VALUE + } +} + +impl crate::reflect::ProtobufValue for NullValue { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Enum(crate::ProtobufEnum::descriptor(self)) + } +} + +static file_descriptor_proto_data: &'static [u8] = b"\ + \n\x1cgoogle/protobuf/struct.proto\x12\x0fgoogle.protobuf\"\x98\x01\n\ + \x06Struct\x12;\n\x06fields\x18\x01\x20\x03(\x0b2#.google.protobuf.Struc\ + t.FieldsEntryR\x06fields\x1aQ\n\x0bFieldsEntry\x12\x10\n\x03key\x18\x01\ + \x20\x01(\tR\x03key\x12,\n\x05value\x18\x02\x20\x01(\x0b2\x16.google.pro\ + tobuf.ValueR\x05value:\x028\x01\"\xb2\x02\n\x05Value\x12;\n\nnull_value\ + \x18\x01\x20\x01(\x0e2\x1a.google.protobuf.NullValueH\0R\tnullValue\x12#\ + \n\x0cnumber_value\x18\x02\x20\x01(\x01H\0R\x0bnumberValue\x12#\n\x0cstr\ + ing_value\x18\x03\x20\x01(\tH\0R\x0bstringValue\x12\x1f\n\nbool_value\ + \x18\x04\x20\x01(\x08H\0R\tboolValue\x12<\n\x0cstruct_value\x18\x05\x20\ + \x01(\x0b2\x17.google.protobuf.StructH\0R\x0bstructValue\x12;\n\nlist_va\ + lue\x18\x06\x20\x01(\x0b2\x1a.google.protobuf.ListValueH\0R\tlistValueB\ + \x06\n\x04kind\";\n\tListValue\x12.\n\x06values\x18\x01\x20\x03(\x0b2\ + \x16.google.protobuf.ValueR\x06values*\x1b\n\tNullValue\x12\x0e\n\nNULL_\ + VALUE\x10\0B\x7f\n\x13com.google.protobufB\x0bStructProtoP\x01Z/google.g\ + olang.org/protobuf/types/known/structpb\xf8\x01\x01\xa2\x02\x03GPB\xaa\ + \x02\x1eGoogle.Protobuf.WellKnownTypesJ\x99\x1d\n\x06\x12\x04\x1e\0^\x01\ + \n\xcc\x0c\n\x01\x0c\x12\x03\x1e\0\x122\xc1\x0c\x20Protocol\x20Buffers\ + \x20-\x20Google's\x20data\x20interchange\x20format\n\x20Copyright\x20200\ + 8\x20Google\x20Inc.\x20\x20All\x20rights\x20reserved.\n\x20https://devel\ + opers.google.com/protocol-buffers/\n\n\x20Redistribution\x20and\x20use\ + \x20in\x20source\x20and\x20binary\x20forms,\x20with\x20or\x20without\n\ + \x20modification,\x20are\x20permitted\x20provided\x20that\x20the\x20foll\ + owing\x20conditions\x20are\n\x20met:\n\n\x20\x20\x20\x20\x20*\x20Redistr\ + ibutions\x20of\x20source\x20code\x20must\x20retain\x20the\x20above\x20co\ + pyright\n\x20notice,\x20this\x20list\x20of\x20conditions\x20and\x20the\ + \x20following\x20disclaimer.\n\x20\x20\x20\x20\x20*\x20Redistributions\ + \x20in\x20binary\x20form\x20must\x20reproduce\x20the\x20above\n\x20copyr\ + ight\x20notice,\x20this\x20list\x20of\x20conditions\x20and\x20the\x20fol\ + lowing\x20disclaimer\n\x20in\x20the\x20documentation\x20and/or\x20other\ + \x20materials\x20provided\x20with\x20the\n\x20distribution.\n\x20\x20\ + \x20\x20\x20*\x20Neither\x20the\x20name\x20of\x20Google\x20Inc.\x20nor\ + \x20the\x20names\x20of\x20its\n\x20contributors\x20may\x20be\x20used\x20\ + to\x20endorse\x20or\x20promote\x20products\x20derived\x20from\n\x20this\ + \x20software\x20without\x20specific\x20prior\x20written\x20permission.\n\ + \n\x20THIS\x20SOFTWARE\x20IS\x20PROVIDED\x20BY\x20THE\x20COPYRIGHT\x20HO\ + LDERS\x20AND\x20CONTRIBUTORS\n\x20\"AS\x20IS\"\x20AND\x20ANY\x20EXPRESS\ + \x20OR\x20IMPLIED\x20WARRANTIES,\x20INCLUDING,\x20BUT\x20NOT\n\x20LIMITE\ + D\x20TO,\x20THE\x20IMPLIED\x20WARRANTIES\x20OF\x20MERCHANTABILITY\x20AND\ + \x20FITNESS\x20FOR\n\x20A\x20PARTICULAR\x20PURPOSE\x20ARE\x20DISCLAIMED.\ + \x20IN\x20NO\x20EVENT\x20SHALL\x20THE\x20COPYRIGHT\n\x20OWNER\x20OR\x20C\ + ONTRIBUTORS\x20BE\x20LIABLE\x20FOR\x20ANY\x20DIRECT,\x20INDIRECT,\x20INC\ + IDENTAL,\n\x20SPECIAL,\x20EXEMPLARY,\x20OR\x20CONSEQUENTIAL\x20DAMAGES\ + \x20(INCLUDING,\x20BUT\x20NOT\n\x20LIMITED\x20TO,\x20PROCUREMENT\x20OF\ + \x20SUBSTITUTE\x20GOODS\x20OR\x20SERVICES;\x20LOSS\x20OF\x20USE,\n\x20DA\ + TA,\x20OR\x20PROFITS;\x20OR\x20BUSINESS\x20INTERRUPTION)\x20HOWEVER\x20C\ + AUSED\x20AND\x20ON\x20ANY\n\x20THEORY\x20OF\x20LIABILITY,\x20WHETHER\x20\ + IN\x20CONTRACT,\x20STRICT\x20LIABILITY,\x20OR\x20TORT\n\x20(INCLUDING\ + \x20NEGLIGENCE\x20OR\x20OTHERWISE)\x20ARISING\x20IN\x20ANY\x20WAY\x20OUT\ + \x20OF\x20THE\x20USE\n\x20OF\x20THIS\x20SOFTWARE,\x20EVEN\x20IF\x20ADVIS\ + ED\x20OF\x20THE\x20POSSIBILITY\x20OF\x20SUCH\x20DAMAGE.\n\n\x08\n\x01\ + \x02\x12\x03\x20\0\x18\n\x08\n\x01\x08\x12\x03\"\0;\n\t\n\x02\x08%\x12\ + \x03\"\0;\n\x08\n\x01\x08\x12\x03#\0\x1f\n\t\n\x02\x08\x1f\x12\x03#\0\ + \x1f\n\x08\n\x01\x08\x12\x03$\0F\n\t\n\x02\x08\x0b\x12\x03$\0F\n\x08\n\ + \x01\x08\x12\x03%\0,\n\t\n\x02\x08\x01\x12\x03%\0,\n\x08\n\x01\x08\x12\ + \x03&\0,\n\t\n\x02\x08\x08\x12\x03&\0,\n\x08\n\x01\x08\x12\x03'\0\"\n\t\ + \n\x02\x08\n\x12\x03'\0\"\n\x08\n\x01\x08\x12\x03(\0!\n\t\n\x02\x08$\x12\ + \x03(\0!\n\xb3\x03\n\x02\x04\0\x12\x042\05\x01\x1a\xa6\x03\x20`Struct`\ + \x20represents\x20a\x20structured\x20data\x20value,\x20consisting\x20of\ + \x20fields\n\x20which\x20map\x20to\x20dynamically\x20typed\x20values.\ + \x20In\x20some\x20languages,\x20`Struct`\n\x20might\x20be\x20supported\ + \x20by\x20a\x20native\x20representation.\x20For\x20example,\x20in\n\x20s\ + cripting\x20languages\x20like\x20JS\x20a\x20struct\x20is\x20represented\ + \x20as\x20an\n\x20object.\x20The\x20details\x20of\x20that\x20representat\ + ion\x20are\x20described\x20together\n\x20with\x20the\x20proto\x20support\ + \x20for\x20the\x20language.\n\n\x20The\x20JSON\x20representation\x20for\ + \x20`Struct`\x20is\x20JSON\x20object.\n\n\n\n\x03\x04\0\x01\x12\x032\x08\ + \x0e\n9\n\x04\x04\0\x02\0\x12\x034\x02\x20\x1a,\x20Unordered\x20map\x20o\ + f\x20dynamically\x20typed\x20values.\n\n\x0c\n\x05\x04\0\x02\0\x06\x12\ + \x034\x02\x14\n\x0c\n\x05\x04\0\x02\0\x01\x12\x034\x15\x1b\n\x0c\n\x05\ + \x04\0\x02\0\x03\x12\x034\x1e\x1f\n\xc3\x02\n\x02\x04\x01\x12\x04=\0M\ + \x01\x1a\xb6\x02\x20`Value`\x20represents\x20a\x20dynamically\x20typed\ + \x20value\x20which\x20can\x20be\x20either\n\x20null,\x20a\x20number,\x20\ + a\x20string,\x20a\x20boolean,\x20a\x20recursive\x20struct\x20value,\x20o\ + r\x20a\n\x20list\x20of\x20values.\x20A\x20producer\x20of\x20value\x20is\ + \x20expected\x20to\x20set\x20one\x20of\x20that\n\x20variants,\x20absence\ + \x20of\x20any\x20variant\x20indicates\x20an\x20error.\n\n\x20The\x20JSON\ + \x20representation\x20for\x20`Value`\x20is\x20JSON\x20value.\n\n\n\n\x03\ + \x04\x01\x01\x12\x03=\x08\r\n\"\n\x04\x04\x01\x08\0\x12\x04?\x02L\x03\ + \x1a\x14\x20The\x20kind\x20of\x20value.\n\n\x0c\n\x05\x04\x01\x08\0\x01\ + \x12\x03?\x08\x0c\n'\n\x04\x04\x01\x02\0\x12\x03A\x04\x1d\x1a\x1a\x20Rep\ + resents\x20a\x20null\x20value.\n\n\x0c\n\x05\x04\x01\x02\0\x06\x12\x03A\ + \x04\r\n\x0c\n\x05\x04\x01\x02\0\x01\x12\x03A\x0e\x18\n\x0c\n\x05\x04\ + \x01\x02\0\x03\x12\x03A\x1b\x1c\n)\n\x04\x04\x01\x02\x01\x12\x03C\x04\ + \x1c\x1a\x1c\x20Represents\x20a\x20double\x20value.\n\n\x0c\n\x05\x04\ + \x01\x02\x01\x05\x12\x03C\x04\n\n\x0c\n\x05\x04\x01\x02\x01\x01\x12\x03C\ + \x0b\x17\n\x0c\n\x05\x04\x01\x02\x01\x03\x12\x03C\x1a\x1b\n)\n\x04\x04\ + \x01\x02\x02\x12\x03E\x04\x1c\x1a\x1c\x20Represents\x20a\x20string\x20va\ + lue.\n\n\x0c\n\x05\x04\x01\x02\x02\x05\x12\x03E\x04\n\n\x0c\n\x05\x04\ + \x01\x02\x02\x01\x12\x03E\x0b\x17\n\x0c\n\x05\x04\x01\x02\x02\x03\x12\ + \x03E\x1a\x1b\n*\n\x04\x04\x01\x02\x03\x12\x03G\x04\x18\x1a\x1d\x20Repre\ + sents\x20a\x20boolean\x20value.\n\n\x0c\n\x05\x04\x01\x02\x03\x05\x12\ + \x03G\x04\x08\n\x0c\n\x05\x04\x01\x02\x03\x01\x12\x03G\t\x13\n\x0c\n\x05\ + \x04\x01\x02\x03\x03\x12\x03G\x16\x17\n-\n\x04\x04\x01\x02\x04\x12\x03I\ + \x04\x1c\x1a\x20\x20Represents\x20a\x20structured\x20value.\n\n\x0c\n\ + \x05\x04\x01\x02\x04\x06\x12\x03I\x04\n\n\x0c\n\x05\x04\x01\x02\x04\x01\ + \x12\x03I\x0b\x17\n\x0c\n\x05\x04\x01\x02\x04\x03\x12\x03I\x1a\x1b\n-\n\ + \x04\x04\x01\x02\x05\x12\x03K\x04\x1d\x1a\x20\x20Represents\x20a\x20repe\ + ated\x20`Value`.\n\n\x0c\n\x05\x04\x01\x02\x05\x06\x12\x03K\x04\r\n\x0c\ + \n\x05\x04\x01\x02\x05\x01\x12\x03K\x0e\x18\n\x0c\n\x05\x04\x01\x02\x05\ + \x03\x12\x03K\x1b\x1c\n\xa9\x01\n\x02\x05\0\x12\x04S\0V\x01\x1a\x9c\x01\ + \x20`NullValue`\x20is\x20a\x20singleton\x20enumeration\x20to\x20represen\ + t\x20the\x20null\x20value\x20for\x20the\n\x20`Value`\x20type\x20union.\n\ + \n\x20\x20The\x20JSON\x20representation\x20for\x20`NullValue`\x20is\x20J\ + SON\x20`null`.\n\n\n\n\x03\x05\0\x01\x12\x03S\x05\x0e\n\x1a\n\x04\x05\0\ + \x02\0\x12\x03U\x02\x11\x1a\r\x20Null\x20value.\n\n\x0c\n\x05\x05\0\x02\ + \0\x01\x12\x03U\x02\x0c\n\x0c\n\x05\x05\0\x02\0\x02\x12\x03U\x0f\x10\n\ + \x82\x01\n\x02\x04\x02\x12\x04[\0^\x01\x1av\x20`ListValue`\x20is\x20a\ + \x20wrapper\x20around\x20a\x20repeated\x20field\x20of\x20values.\n\n\x20\ + The\x20JSON\x20representation\x20for\x20`ListValue`\x20is\x20JSON\x20arr\ + ay.\n\n\n\n\x03\x04\x02\x01\x12\x03[\x08\x11\n:\n\x04\x04\x02\x02\0\x12\ + \x03]\x02\x1c\x1a-\x20Repeated\x20field\x20of\x20dynamically\x20typed\ + \x20values.\n\n\x0c\n\x05\x04\x02\x02\0\x04\x12\x03]\x02\n\n\x0c\n\x05\ + \x04\x02\x02\0\x06\x12\x03]\x0b\x10\n\x0c\n\x05\x04\x02\x02\0\x01\x12\ + \x03]\x11\x17\n\x0c\n\x05\x04\x02\x02\0\x03\x12\x03]\x1a\x1bb\x06proto3\ +"; + +static file_descriptor_proto_lazy: crate::rt::LazyV2<crate::descriptor::FileDescriptorProto> = crate::rt::LazyV2::INIT; + +fn parse_descriptor_proto() -> crate::descriptor::FileDescriptorProto { + crate::Message::parse_from_bytes(file_descriptor_proto_data).unwrap() +} + +pub fn file_descriptor_proto() -> &'static crate::descriptor::FileDescriptorProto { + file_descriptor_proto_lazy.get(|| { + parse_descriptor_proto() + }) +} diff --git a/2.27.1/src/well_known_types/timestamp.rs b/2.27.1/src/well_known_types/timestamp.rs new file mode 100644 index 0000000..25e7acf --- /dev/null +++ b/2.27.1/src/well_known_types/timestamp.rs @@ -0,0 +1,363 @@ +// This file is generated by rust-protobuf 2.26.0. Do not edit +// @generated + +// https://github.com/rust-lang/rust-clippy/issues/702 +#![allow(unknown_lints)] +#![allow(clippy::all)] + +#![allow(unused_attributes)] +#![cfg_attr(rustfmt, rustfmt::skip)] + +#![allow(box_pointers)] +#![allow(dead_code)] +#![allow(missing_docs)] +#![allow(non_camel_case_types)] +#![allow(non_snake_case)] +#![allow(non_upper_case_globals)] +#![allow(trivial_casts)] +#![allow(unused_imports)] +#![allow(unused_results)] +//! Generated file from `google/protobuf/timestamp.proto` + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct Timestamp { + // message fields + pub seconds: i64, + pub nanos: i32, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a Timestamp { + fn default() -> &'a Timestamp { + <Timestamp as crate::Message>::default_instance() + } +} + +impl Timestamp { + pub fn new() -> Timestamp { + ::std::default::Default::default() + } + + // int64 seconds = 1; + + + pub fn get_seconds(&self) -> i64 { + self.seconds + } + pub fn clear_seconds(&mut self) { + self.seconds = 0; + } + + // Param is passed by value, moved + pub fn set_seconds(&mut self, v: i64) { + self.seconds = v; + } + + // int32 nanos = 2; + + + pub fn get_nanos(&self) -> i32 { + self.nanos + } + pub fn clear_nanos(&mut self) { + self.nanos = 0; + } + + // Param is passed by value, moved + pub fn set_nanos(&mut self, v: i32) { + self.nanos = v; + } +} + +impl crate::Message for Timestamp { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int64()?; + self.seconds = tmp; + }, + 2 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int32()?; + self.nanos = tmp; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if self.seconds != 0 { + my_size += crate::rt::value_size(1, self.seconds, crate::wire_format::WireTypeVarint); + } + if self.nanos != 0 { + my_size += crate::rt::value_size(2, self.nanos, crate::wire_format::WireTypeVarint); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if self.seconds != 0 { + os.write_int64(1, self.seconds)?; + } + if self.nanos != 0 { + os.write_int32(2, self.nanos)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> Timestamp { + Timestamp::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeInt64>( + "seconds", + |m: &Timestamp| { &m.seconds }, + |m: &mut Timestamp| { &mut m.seconds }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeInt32>( + "nanos", + |m: &Timestamp| { &m.nanos }, + |m: &mut Timestamp| { &mut m.nanos }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<Timestamp>( + "Timestamp", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static Timestamp { + static instance: crate::rt::LazyV2<Timestamp> = crate::rt::LazyV2::INIT; + instance.get(Timestamp::new) + } +} + +impl crate::Clear for Timestamp { + fn clear(&mut self) { + self.seconds = 0; + self.nanos = 0; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for Timestamp { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for Timestamp { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +static file_descriptor_proto_data: &'static [u8] = b"\ + \n\x1fgoogle/protobuf/timestamp.proto\x12\x0fgoogle.protobuf\";\n\tTimes\ + tamp\x12\x18\n\x07seconds\x18\x01\x20\x01(\x03R\x07seconds\x12\x14\n\x05\ + nanos\x18\x02\x20\x01(\x05R\x05nanosB\x85\x01\n\x13com.google.protobufB\ + \x0eTimestampProtoP\x01Z2google.golang.org/protobuf/types/known/timestam\ + ppb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypes\ + J\xc5/\n\x07\x12\x05\x1e\0\x92\x01\x01\n\xcc\x0c\n\x01\x0c\x12\x03\x1e\0\ + \x122\xc1\x0c\x20Protocol\x20Buffers\x20-\x20Google's\x20data\x20interch\ + ange\x20format\n\x20Copyright\x202008\x20Google\x20Inc.\x20\x20All\x20ri\ + ghts\x20reserved.\n\x20https://developers.google.com/protocol-buffers/\n\ + \n\x20Redistribution\x20and\x20use\x20in\x20source\x20and\x20binary\x20f\ + orms,\x20with\x20or\x20without\n\x20modification,\x20are\x20permitted\ + \x20provided\x20that\x20the\x20following\x20conditions\x20are\n\x20met:\ + \n\n\x20\x20\x20\x20\x20*\x20Redistributions\x20of\x20source\x20code\x20\ + must\x20retain\x20the\x20above\x20copyright\n\x20notice,\x20this\x20list\ + \x20of\x20conditions\x20and\x20the\x20following\x20disclaimer.\n\x20\x20\ + \x20\x20\x20*\x20Redistributions\x20in\x20binary\x20form\x20must\x20repr\ + oduce\x20the\x20above\n\x20copyright\x20notice,\x20this\x20list\x20of\ + \x20conditions\x20and\x20the\x20following\x20disclaimer\n\x20in\x20the\ + \x20documentation\x20and/or\x20other\x20materials\x20provided\x20with\ + \x20the\n\x20distribution.\n\x20\x20\x20\x20\x20*\x20Neither\x20the\x20n\ + ame\x20of\x20Google\x20Inc.\x20nor\x20the\x20names\x20of\x20its\n\x20con\ + tributors\x20may\x20be\x20used\x20to\x20endorse\x20or\x20promote\x20prod\ + ucts\x20derived\x20from\n\x20this\x20software\x20without\x20specific\x20\ + prior\x20written\x20permission.\n\n\x20THIS\x20SOFTWARE\x20IS\x20PROVIDE\ + D\x20BY\x20THE\x20COPYRIGHT\x20HOLDERS\x20AND\x20CONTRIBUTORS\n\x20\"AS\ + \x20IS\"\x20AND\x20ANY\x20EXPRESS\x20OR\x20IMPLIED\x20WARRANTIES,\x20INC\ + LUDING,\x20BUT\x20NOT\n\x20LIMITED\x20TO,\x20THE\x20IMPLIED\x20WARRANTIE\ + S\x20OF\x20MERCHANTABILITY\x20AND\x20FITNESS\x20FOR\n\x20A\x20PARTICULAR\ + \x20PURPOSE\x20ARE\x20DISCLAIMED.\x20IN\x20NO\x20EVENT\x20SHALL\x20THE\ + \x20COPYRIGHT\n\x20OWNER\x20OR\x20CONTRIBUTORS\x20BE\x20LIABLE\x20FOR\ + \x20ANY\x20DIRECT,\x20INDIRECT,\x20INCIDENTAL,\n\x20SPECIAL,\x20EXEMPLAR\ + Y,\x20OR\x20CONSEQUENTIAL\x20DAMAGES\x20(INCLUDING,\x20BUT\x20NOT\n\x20L\ + IMITED\x20TO,\x20PROCUREMENT\x20OF\x20SUBSTITUTE\x20GOODS\x20OR\x20SERVI\ + CES;\x20LOSS\x20OF\x20USE,\n\x20DATA,\x20OR\x20PROFITS;\x20OR\x20BUSINES\ + S\x20INTERRUPTION)\x20HOWEVER\x20CAUSED\x20AND\x20ON\x20ANY\n\x20THEORY\ + \x20OF\x20LIABILITY,\x20WHETHER\x20IN\x20CONTRACT,\x20STRICT\x20LIABILIT\ + Y,\x20OR\x20TORT\n\x20(INCLUDING\x20NEGLIGENCE\x20OR\x20OTHERWISE)\x20AR\ + ISING\x20IN\x20ANY\x20WAY\x20OUT\x20OF\x20THE\x20USE\n\x20OF\x20THIS\x20\ + SOFTWARE,\x20EVEN\x20IF\x20ADVISED\x20OF\x20THE\x20POSSIBILITY\x20OF\x20\ + SUCH\x20DAMAGE.\n\n\x08\n\x01\x02\x12\x03\x20\0\x18\n\x08\n\x01\x08\x12\ + \x03\"\0;\n\t\n\x02\x08%\x12\x03\"\0;\n\x08\n\x01\x08\x12\x03#\0\x1f\n\t\ + \n\x02\x08\x1f\x12\x03#\0\x1f\n\x08\n\x01\x08\x12\x03$\0I\n\t\n\x02\x08\ + \x0b\x12\x03$\0I\n\x08\n\x01\x08\x12\x03%\0,\n\t\n\x02\x08\x01\x12\x03%\ + \0,\n\x08\n\x01\x08\x12\x03&\0/\n\t\n\x02\x08\x08\x12\x03&\0/\n\x08\n\ + \x01\x08\x12\x03'\0\"\n\t\n\x02\x08\n\x12\x03'\0\"\n\x08\n\x01\x08\x12\ + \x03(\0!\n\t\n\x02\x08$\x12\x03(\0!\n\xde\x1d\n\x02\x04\0\x12\x06\x87\ + \x01\0\x92\x01\x01\x1a\xcf\x1d\x20A\x20Timestamp\x20represents\x20a\x20p\ + oint\x20in\x20time\x20independent\x20of\x20any\x20time\x20zone\x20or\x20\ + local\n\x20calendar,\x20encoded\x20as\x20a\x20count\x20of\x20seconds\x20\ + and\x20fractions\x20of\x20seconds\x20at\n\x20nanosecond\x20resolution.\ + \x20The\x20count\x20is\x20relative\x20to\x20an\x20epoch\x20at\x20UTC\x20\ + midnight\x20on\n\x20January\x201,\x201970,\x20in\x20the\x20proleptic\x20\ + Gregorian\x20calendar\x20which\x20extends\x20the\n\x20Gregorian\x20calen\ + dar\x20backwards\x20to\x20year\x20one.\n\n\x20All\x20minutes\x20are\x206\ + 0\x20seconds\x20long.\x20Leap\x20seconds\x20are\x20\"smeared\"\x20so\x20\ + that\x20no\x20leap\n\x20second\x20table\x20is\x20needed\x20for\x20interp\ + retation,\x20using\x20a\x20[24-hour\x20linear\n\x20smear](https://develo\ + pers.google.com/time/smear).\n\n\x20The\x20range\x20is\x20from\x200001-0\ + 1-01T00:00:00Z\x20to\x209999-12-31T23:59:59.999999999Z.\x20By\n\x20restr\ + icting\x20to\x20that\x20range,\x20we\x20ensure\x20that\x20we\x20can\x20c\ + onvert\x20to\x20and\x20from\x20[RFC\n\x203339](https://www.ietf.org/rfc/\ + rfc3339.txt)\x20date\x20strings.\n\n\x20#\x20Examples\n\n\x20Example\x20\ + 1:\x20Compute\x20Timestamp\x20from\x20POSIX\x20`time()`.\n\n\x20\x20\x20\ + \x20\x20Timestamp\x20timestamp;\n\x20\x20\x20\x20\x20timestamp.set_secon\ + ds(time(NULL));\n\x20\x20\x20\x20\x20timestamp.set_nanos(0);\n\n\x20Exam\ + ple\x202:\x20Compute\x20Timestamp\x20from\x20POSIX\x20`gettimeofday()`.\ + \n\n\x20\x20\x20\x20\x20struct\x20timeval\x20tv;\n\x20\x20\x20\x20\x20ge\ + ttimeofday(&tv,\x20NULL);\n\n\x20\x20\x20\x20\x20Timestamp\x20timestamp;\ + \n\x20\x20\x20\x20\x20timestamp.set_seconds(tv.tv_sec);\n\x20\x20\x20\ + \x20\x20timestamp.set_nanos(tv.tv_usec\x20*\x201000);\n\n\x20Example\x20\ + 3:\x20Compute\x20Timestamp\x20from\x20Win32\x20`GetSystemTimeAsFileTime(\ + )`.\n\n\x20\x20\x20\x20\x20FILETIME\x20ft;\n\x20\x20\x20\x20\x20GetSyste\ + mTimeAsFileTime(&ft);\n\x20\x20\x20\x20\x20UINT64\x20ticks\x20=\x20(((UI\ + NT64)ft.dwHighDateTime)\x20<<\x2032)\x20|\x20ft.dwLowDateTime;\n\n\x20\ + \x20\x20\x20\x20//\x20A\x20Windows\x20tick\x20is\x20100\x20nanoseconds.\ + \x20Windows\x20epoch\x201601-01-01T00:00:00Z\n\x20\x20\x20\x20\x20//\x20\ + is\x2011644473600\x20seconds\x20before\x20Unix\x20epoch\x201970-01-01T00\ + :00:00Z.\n\x20\x20\x20\x20\x20Timestamp\x20timestamp;\n\x20\x20\x20\x20\ + \x20timestamp.set_seconds((INT64)\x20((ticks\x20/\x2010000000)\x20-\x201\ + 1644473600LL));\n\x20\x20\x20\x20\x20timestamp.set_nanos((INT32)\x20((ti\ + cks\x20%\x2010000000)\x20*\x20100));\n\n\x20Example\x204:\x20Compute\x20\ + Timestamp\x20from\x20Java\x20`System.currentTimeMillis()`.\n\n\x20\x20\ + \x20\x20\x20long\x20millis\x20=\x20System.currentTimeMillis();\n\n\x20\ + \x20\x20\x20\x20Timestamp\x20timestamp\x20=\x20Timestamp.newBuilder().se\ + tSeconds(millis\x20/\x201000)\n\x20\x20\x20\x20\x20\x20\x20\x20\x20.setN\ + anos((int)\x20((millis\x20%\x201000)\x20*\x201000000)).build();\n\n\n\ + \x20Example\x205:\x20Compute\x20Timestamp\x20from\x20Java\x20`Instant.no\ + w()`.\n\n\x20\x20\x20\x20\x20Instant\x20now\x20=\x20Instant.now();\n\n\ + \x20\x20\x20\x20\x20Timestamp\x20timestamp\x20=\n\x20\x20\x20\x20\x20\ + \x20\x20\x20\x20Timestamp.newBuilder().setSeconds(now.getEpochSecond())\ + \n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20.setNanos(now.getN\ + ano()).build();\n\n\n\x20Example\x206:\x20Compute\x20Timestamp\x20from\ + \x20current\x20time\x20in\x20Python.\n\n\x20\x20\x20\x20\x20timestamp\ + \x20=\x20Timestamp()\n\x20\x20\x20\x20\x20timestamp.GetCurrentTime()\n\n\ + \x20#\x20JSON\x20Mapping\n\n\x20In\x20JSON\x20format,\x20the\x20Timestam\ + p\x20type\x20is\x20encoded\x20as\x20a\x20string\x20in\x20the\n\x20[RFC\ + \x203339](https://www.ietf.org/rfc/rfc3339.txt)\x20format.\x20That\x20is\ + ,\x20the\n\x20format\x20is\x20\"{year}-{month}-{day}T{hour}:{min}:{sec}[\ + .{frac_sec}]Z\"\n\x20where\x20{year}\x20is\x20always\x20expressed\x20usi\ + ng\x20four\x20digits\x20while\x20{month},\x20{day},\n\x20{hour},\x20{min\ + },\x20and\x20{sec}\x20are\x20zero-padded\x20to\x20two\x20digits\x20each.\ + \x20The\x20fractional\n\x20seconds,\x20which\x20can\x20go\x20up\x20to\ + \x209\x20digits\x20(i.e.\x20up\x20to\x201\x20nanosecond\x20resolution),\ + \n\x20are\x20optional.\x20The\x20\"Z\"\x20suffix\x20indicates\x20the\x20\ + timezone\x20(\"UTC\");\x20the\x20timezone\n\x20is\x20required.\x20A\x20p\ + roto3\x20JSON\x20serializer\x20should\x20always\x20use\x20UTC\x20(as\x20\ + indicated\x20by\n\x20\"Z\")\x20when\x20printing\x20the\x20Timestamp\x20t\ + ype\x20and\x20a\x20proto3\x20JSON\x20parser\x20should\x20be\n\x20able\ + \x20to\x20accept\x20both\x20UTC\x20and\x20other\x20timezones\x20(as\x20i\ + ndicated\x20by\x20an\x20offset).\n\n\x20For\x20example,\x20\"2017-01-15T\ + 01:30:15.01Z\"\x20encodes\x2015.01\x20seconds\x20past\n\x2001:30\x20UTC\ + \x20on\x20January\x2015,\x202017.\n\n\x20In\x20JavaScript,\x20one\x20can\ + \x20convert\x20a\x20Date\x20object\x20to\x20this\x20format\x20using\x20t\ + he\n\x20standard\n\x20[toISOString()](https://developer.mozilla.org/en-U\ + S/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n\x20me\ + thod.\x20In\x20Python,\x20a\x20standard\x20`datetime.datetime`\x20object\ + \x20can\x20be\x20converted\n\x20to\x20this\x20format\x20using\n\x20[`str\ + ftime`](https://docs.python.org/2/library/time.html#time.strftime)\x20wi\ + th\n\x20the\x20time\x20format\x20spec\x20'%Y-%m-%dT%H:%M:%S.%fZ'.\x20Lik\ + ewise,\x20in\x20Java,\x20one\x20can\x20use\n\x20the\x20Joda\x20Time's\ + \x20[`ISODateTimeFormat.dateTime()`](\n\x20http://www.joda.org/joda-time\ + /apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D\n\ + \x20)\x20to\x20obtain\x20a\x20formatter\x20capable\x20of\x20generating\ + \x20timestamps\x20in\x20this\x20format.\n\n\n\n\x0b\n\x03\x04\0\x01\x12\ + \x04\x87\x01\x08\x11\n\x9d\x01\n\x04\x04\0\x02\0\x12\x04\x8b\x01\x02\x14\ + \x1a\x8e\x01\x20Represents\x20seconds\x20of\x20UTC\x20time\x20since\x20U\ + nix\x20epoch\n\x201970-01-01T00:00:00Z.\x20Must\x20be\x20from\x200001-01\ + -01T00:00:00Z\x20to\n\x209999-12-31T23:59:59Z\x20inclusive.\n\n\r\n\x05\ + \x04\0\x02\0\x05\x12\x04\x8b\x01\x02\x07\n\r\n\x05\x04\0\x02\0\x01\x12\ + \x04\x8b\x01\x08\x0f\n\r\n\x05\x04\0\x02\0\x03\x12\x04\x8b\x01\x12\x13\n\ + \xe5\x01\n\x04\x04\0\x02\x01\x12\x04\x91\x01\x02\x12\x1a\xd6\x01\x20Non-\ + negative\x20fractions\x20of\x20a\x20second\x20at\x20nanosecond\x20resolu\ + tion.\x20Negative\n\x20second\x20values\x20with\x20fractions\x20must\x20\ + still\x20have\x20non-negative\x20nanos\x20values\n\x20that\x20count\x20f\ + orward\x20in\x20time.\x20Must\x20be\x20from\x200\x20to\x20999,999,999\n\ + \x20inclusive.\n\n\r\n\x05\x04\0\x02\x01\x05\x12\x04\x91\x01\x02\x07\n\r\ + \n\x05\x04\0\x02\x01\x01\x12\x04\x91\x01\x08\r\n\r\n\x05\x04\0\x02\x01\ + \x03\x12\x04\x91\x01\x10\x11b\x06proto3\ +"; + +static file_descriptor_proto_lazy: crate::rt::LazyV2<crate::descriptor::FileDescriptorProto> = crate::rt::LazyV2::INIT; + +fn parse_descriptor_proto() -> crate::descriptor::FileDescriptorProto { + crate::Message::parse_from_bytes(file_descriptor_proto_data).unwrap() +} + +pub fn file_descriptor_proto() -> &'static crate::descriptor::FileDescriptorProto { + file_descriptor_proto_lazy.get(|| { + parse_descriptor_proto() + }) +} diff --git a/2.27.1/src/well_known_types/type_pb.rs b/2.27.1/src/well_known_types/type_pb.rs new file mode 100644 index 0000000..14bfdb2 --- /dev/null +++ b/2.27.1/src/well_known_types/type_pb.rs @@ -0,0 +1,2233 @@ +// This file is generated by rust-protobuf 2.26.0. Do not edit +// @generated + +// https://github.com/rust-lang/rust-clippy/issues/702 +#![allow(unknown_lints)] +#![allow(clippy::all)] + +#![allow(unused_attributes)] +#![cfg_attr(rustfmt, rustfmt::skip)] + +#![allow(box_pointers)] +#![allow(dead_code)] +#![allow(missing_docs)] +#![allow(non_camel_case_types)] +#![allow(non_snake_case)] +#![allow(non_upper_case_globals)] +#![allow(trivial_casts)] +#![allow(unused_imports)] +#![allow(unused_results)] +//! Generated file from `google/protobuf/type.proto` + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct Type { + // message fields + pub name: ::std::string::String, + pub fields: crate::RepeatedField<Field>, + pub oneofs: crate::RepeatedField<::std::string::String>, + pub options: crate::RepeatedField<Option>, + pub source_context: crate::SingularPtrField<crate::well_known_types::SourceContext>, + pub syntax: Syntax, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a Type { + fn default() -> &'a Type { + <Type as crate::Message>::default_instance() + } +} + +impl Type { + pub fn new() -> Type { + ::std::default::Default::default() + } + + // string name = 1; + + + pub fn get_name(&self) -> &str { + &self.name + } + pub fn clear_name(&mut self) { + self.name.clear(); + } + + // Param is passed by value, moved + pub fn set_name(&mut self, v: ::std::string::String) { + self.name = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_name(&mut self) -> &mut ::std::string::String { + &mut self.name + } + + // Take field + pub fn take_name(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.name, ::std::string::String::new()) + } + + // repeated .google.protobuf.Field fields = 2; + + + pub fn get_fields(&self) -> &[Field] { + &self.fields + } + pub fn clear_fields(&mut self) { + self.fields.clear(); + } + + // Param is passed by value, moved + pub fn set_fields(&mut self, v: crate::RepeatedField<Field>) { + self.fields = v; + } + + // Mutable pointer to the field. + pub fn mut_fields(&mut self) -> &mut crate::RepeatedField<Field> { + &mut self.fields + } + + // Take field + pub fn take_fields(&mut self) -> crate::RepeatedField<Field> { + ::std::mem::replace(&mut self.fields, crate::RepeatedField::new()) + } + + // repeated string oneofs = 3; + + + pub fn get_oneofs(&self) -> &[::std::string::String] { + &self.oneofs + } + pub fn clear_oneofs(&mut self) { + self.oneofs.clear(); + } + + // Param is passed by value, moved + pub fn set_oneofs(&mut self, v: crate::RepeatedField<::std::string::String>) { + self.oneofs = v; + } + + // Mutable pointer to the field. + pub fn mut_oneofs(&mut self) -> &mut crate::RepeatedField<::std::string::String> { + &mut self.oneofs + } + + // Take field + pub fn take_oneofs(&mut self) -> crate::RepeatedField<::std::string::String> { + ::std::mem::replace(&mut self.oneofs, crate::RepeatedField::new()) + } + + // repeated .google.protobuf.Option options = 4; + + + pub fn get_options(&self) -> &[Option] { + &self.options + } + pub fn clear_options(&mut self) { + self.options.clear(); + } + + // Param is passed by value, moved + pub fn set_options(&mut self, v: crate::RepeatedField<Option>) { + self.options = v; + } + + // Mutable pointer to the field. + pub fn mut_options(&mut self) -> &mut crate::RepeatedField<Option> { + &mut self.options + } + + // Take field + pub fn take_options(&mut self) -> crate::RepeatedField<Option> { + ::std::mem::replace(&mut self.options, crate::RepeatedField::new()) + } + + // .google.protobuf.SourceContext source_context = 5; + + + pub fn get_source_context(&self) -> &crate::well_known_types::SourceContext { + self.source_context.as_ref().unwrap_or_else(|| <crate::well_known_types::SourceContext as crate::Message>::default_instance()) + } + pub fn clear_source_context(&mut self) { + self.source_context.clear(); + } + + pub fn has_source_context(&self) -> bool { + self.source_context.is_some() + } + + // Param is passed by value, moved + pub fn set_source_context(&mut self, v: crate::well_known_types::SourceContext) { + self.source_context = crate::SingularPtrField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_source_context(&mut self) -> &mut crate::well_known_types::SourceContext { + if self.source_context.is_none() { + self.source_context.set_default(); + } + self.source_context.as_mut().unwrap() + } + + // Take field + pub fn take_source_context(&mut self) -> crate::well_known_types::SourceContext { + self.source_context.take().unwrap_or_else(|| crate::well_known_types::SourceContext::new()) + } + + // .google.protobuf.Syntax syntax = 6; + + + pub fn get_syntax(&self) -> Syntax { + self.syntax + } + pub fn clear_syntax(&mut self) { + self.syntax = Syntax::SYNTAX_PROTO2; + } + + // Param is passed by value, moved + pub fn set_syntax(&mut self, v: Syntax) { + self.syntax = v; + } +} + +impl crate::Message for Type { + fn is_initialized(&self) -> bool { + for v in &self.fields { + if !v.is_initialized() { + return false; + } + }; + for v in &self.options { + if !v.is_initialized() { + return false; + } + }; + for v in &self.source_context { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_proto3_string_into(wire_type, is, &mut self.name)?; + }, + 2 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.fields)?; + }, + 3 => { + crate::rt::read_repeated_string_into(wire_type, is, &mut self.oneofs)?; + }, + 4 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.options)?; + }, + 5 => { + crate::rt::read_singular_message_into(wire_type, is, &mut self.source_context)?; + }, + 6 => { + crate::rt::read_proto3_enum_with_unknown_fields_into(wire_type, is, &mut self.syntax, 6, &mut self.unknown_fields)? + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if !self.name.is_empty() { + my_size += crate::rt::string_size(1, &self.name); + } + for value in &self.fields { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + for value in &self.oneofs { + my_size += crate::rt::string_size(3, &value); + }; + for value in &self.options { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + if let Some(ref v) = self.source_context.as_ref() { + let len = v.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + } + if self.syntax != Syntax::SYNTAX_PROTO2 { + my_size += crate::rt::enum_size(6, self.syntax); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if !self.name.is_empty() { + os.write_string(1, &self.name)?; + } + for v in &self.fields { + os.write_tag(2, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + for v in &self.oneofs { + os.write_string(3, &v)?; + }; + for v in &self.options { + os.write_tag(4, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + if let Some(ref v) = self.source_context.as_ref() { + os.write_tag(5, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + } + if self.syntax != Syntax::SYNTAX_PROTO2 { + os.write_enum(6, crate::ProtobufEnum::value(&self.syntax))?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> Type { + Type::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeString>( + "name", + |m: &Type| { &m.name }, + |m: &mut Type| { &mut m.name }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<Field>>( + "fields", + |m: &Type| { &m.fields }, + |m: &mut Type| { &mut m.fields }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeString>( + "oneofs", + |m: &Type| { &m.oneofs }, + |m: &mut Type| { &mut m.oneofs }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<Option>>( + "options", + |m: &Type| { &m.options }, + |m: &mut Type| { &mut m.options }, + )); + fields.push(crate::reflect::accessor::make_singular_ptr_field_accessor::<_, crate::types::ProtobufTypeMessage<crate::well_known_types::SourceContext>>( + "source_context", + |m: &Type| { &m.source_context }, + |m: &mut Type| { &mut m.source_context }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeEnum<Syntax>>( + "syntax", + |m: &Type| { &m.syntax }, + |m: &mut Type| { &mut m.syntax }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<Type>( + "Type", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static Type { + static instance: crate::rt::LazyV2<Type> = crate::rt::LazyV2::INIT; + instance.get(Type::new) + } +} + +impl crate::Clear for Type { + fn clear(&mut self) { + self.name.clear(); + self.fields.clear(); + self.oneofs.clear(); + self.options.clear(); + self.source_context.clear(); + self.syntax = Syntax::SYNTAX_PROTO2; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for Type { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for Type { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct Field { + // message fields + pub kind: Field_Kind, + pub cardinality: Field_Cardinality, + pub number: i32, + pub name: ::std::string::String, + pub type_url: ::std::string::String, + pub oneof_index: i32, + pub packed: bool, + pub options: crate::RepeatedField<Option>, + pub json_name: ::std::string::String, + pub default_value: ::std::string::String, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a Field { + fn default() -> &'a Field { + <Field as crate::Message>::default_instance() + } +} + +impl Field { + pub fn new() -> Field { + ::std::default::Default::default() + } + + // .google.protobuf.Field.Kind kind = 1; + + + pub fn get_kind(&self) -> Field_Kind { + self.kind + } + pub fn clear_kind(&mut self) { + self.kind = Field_Kind::TYPE_UNKNOWN; + } + + // Param is passed by value, moved + pub fn set_kind(&mut self, v: Field_Kind) { + self.kind = v; + } + + // .google.protobuf.Field.Cardinality cardinality = 2; + + + pub fn get_cardinality(&self) -> Field_Cardinality { + self.cardinality + } + pub fn clear_cardinality(&mut self) { + self.cardinality = Field_Cardinality::CARDINALITY_UNKNOWN; + } + + // Param is passed by value, moved + pub fn set_cardinality(&mut self, v: Field_Cardinality) { + self.cardinality = v; + } + + // int32 number = 3; + + + pub fn get_number(&self) -> i32 { + self.number + } + pub fn clear_number(&mut self) { + self.number = 0; + } + + // Param is passed by value, moved + pub fn set_number(&mut self, v: i32) { + self.number = v; + } + + // string name = 4; + + + pub fn get_name(&self) -> &str { + &self.name + } + pub fn clear_name(&mut self) { + self.name.clear(); + } + + // Param is passed by value, moved + pub fn set_name(&mut self, v: ::std::string::String) { + self.name = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_name(&mut self) -> &mut ::std::string::String { + &mut self.name + } + + // Take field + pub fn take_name(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.name, ::std::string::String::new()) + } + + // string type_url = 6; + + + pub fn get_type_url(&self) -> &str { + &self.type_url + } + pub fn clear_type_url(&mut self) { + self.type_url.clear(); + } + + // Param is passed by value, moved + pub fn set_type_url(&mut self, v: ::std::string::String) { + self.type_url = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_type_url(&mut self) -> &mut ::std::string::String { + &mut self.type_url + } + + // Take field + pub fn take_type_url(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.type_url, ::std::string::String::new()) + } + + // int32 oneof_index = 7; + + + pub fn get_oneof_index(&self) -> i32 { + self.oneof_index + } + pub fn clear_oneof_index(&mut self) { + self.oneof_index = 0; + } + + // Param is passed by value, moved + pub fn set_oneof_index(&mut self, v: i32) { + self.oneof_index = v; + } + + // bool packed = 8; + + + pub fn get_packed(&self) -> bool { + self.packed + } + pub fn clear_packed(&mut self) { + self.packed = false; + } + + // Param is passed by value, moved + pub fn set_packed(&mut self, v: bool) { + self.packed = v; + } + + // repeated .google.protobuf.Option options = 9; + + + pub fn get_options(&self) -> &[Option] { + &self.options + } + pub fn clear_options(&mut self) { + self.options.clear(); + } + + // Param is passed by value, moved + pub fn set_options(&mut self, v: crate::RepeatedField<Option>) { + self.options = v; + } + + // Mutable pointer to the field. + pub fn mut_options(&mut self) -> &mut crate::RepeatedField<Option> { + &mut self.options + } + + // Take field + pub fn take_options(&mut self) -> crate::RepeatedField<Option> { + ::std::mem::replace(&mut self.options, crate::RepeatedField::new()) + } + + // string json_name = 10; + + + pub fn get_json_name(&self) -> &str { + &self.json_name + } + pub fn clear_json_name(&mut self) { + self.json_name.clear(); + } + + // Param is passed by value, moved + pub fn set_json_name(&mut self, v: ::std::string::String) { + self.json_name = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_json_name(&mut self) -> &mut ::std::string::String { + &mut self.json_name + } + + // Take field + pub fn take_json_name(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.json_name, ::std::string::String::new()) + } + + // string default_value = 11; + + + pub fn get_default_value(&self) -> &str { + &self.default_value + } + pub fn clear_default_value(&mut self) { + self.default_value.clear(); + } + + // Param is passed by value, moved + pub fn set_default_value(&mut self, v: ::std::string::String) { + self.default_value = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_default_value(&mut self) -> &mut ::std::string::String { + &mut self.default_value + } + + // Take field + pub fn take_default_value(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.default_value, ::std::string::String::new()) + } +} + +impl crate::Message for Field { + fn is_initialized(&self) -> bool { + for v in &self.options { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_proto3_enum_with_unknown_fields_into(wire_type, is, &mut self.kind, 1, &mut self.unknown_fields)? + }, + 2 => { + crate::rt::read_proto3_enum_with_unknown_fields_into(wire_type, is, &mut self.cardinality, 2, &mut self.unknown_fields)? + }, + 3 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int32()?; + self.number = tmp; + }, + 4 => { + crate::rt::read_singular_proto3_string_into(wire_type, is, &mut self.name)?; + }, + 6 => { + crate::rt::read_singular_proto3_string_into(wire_type, is, &mut self.type_url)?; + }, + 7 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int32()?; + self.oneof_index = tmp; + }, + 8 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.packed = tmp; + }, + 9 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.options)?; + }, + 10 => { + crate::rt::read_singular_proto3_string_into(wire_type, is, &mut self.json_name)?; + }, + 11 => { + crate::rt::read_singular_proto3_string_into(wire_type, is, &mut self.default_value)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if self.kind != Field_Kind::TYPE_UNKNOWN { + my_size += crate::rt::enum_size(1, self.kind); + } + if self.cardinality != Field_Cardinality::CARDINALITY_UNKNOWN { + my_size += crate::rt::enum_size(2, self.cardinality); + } + if self.number != 0 { + my_size += crate::rt::value_size(3, self.number, crate::wire_format::WireTypeVarint); + } + if !self.name.is_empty() { + my_size += crate::rt::string_size(4, &self.name); + } + if !self.type_url.is_empty() { + my_size += crate::rt::string_size(6, &self.type_url); + } + if self.oneof_index != 0 { + my_size += crate::rt::value_size(7, self.oneof_index, crate::wire_format::WireTypeVarint); + } + if self.packed != false { + my_size += 2; + } + for value in &self.options { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + if !self.json_name.is_empty() { + my_size += crate::rt::string_size(10, &self.json_name); + } + if !self.default_value.is_empty() { + my_size += crate::rt::string_size(11, &self.default_value); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if self.kind != Field_Kind::TYPE_UNKNOWN { + os.write_enum(1, crate::ProtobufEnum::value(&self.kind))?; + } + if self.cardinality != Field_Cardinality::CARDINALITY_UNKNOWN { + os.write_enum(2, crate::ProtobufEnum::value(&self.cardinality))?; + } + if self.number != 0 { + os.write_int32(3, self.number)?; + } + if !self.name.is_empty() { + os.write_string(4, &self.name)?; + } + if !self.type_url.is_empty() { + os.write_string(6, &self.type_url)?; + } + if self.oneof_index != 0 { + os.write_int32(7, self.oneof_index)?; + } + if self.packed != false { + os.write_bool(8, self.packed)?; + } + for v in &self.options { + os.write_tag(9, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + if !self.json_name.is_empty() { + os.write_string(10, &self.json_name)?; + } + if !self.default_value.is_empty() { + os.write_string(11, &self.default_value)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> Field { + Field::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeEnum<Field_Kind>>( + "kind", + |m: &Field| { &m.kind }, + |m: &mut Field| { &mut m.kind }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeEnum<Field_Cardinality>>( + "cardinality", + |m: &Field| { &m.cardinality }, + |m: &mut Field| { &mut m.cardinality }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeInt32>( + "number", + |m: &Field| { &m.number }, + |m: &mut Field| { &mut m.number }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeString>( + "name", + |m: &Field| { &m.name }, + |m: &mut Field| { &mut m.name }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeString>( + "type_url", + |m: &Field| { &m.type_url }, + |m: &mut Field| { &mut m.type_url }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeInt32>( + "oneof_index", + |m: &Field| { &m.oneof_index }, + |m: &mut Field| { &mut m.oneof_index }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeBool>( + "packed", + |m: &Field| { &m.packed }, + |m: &mut Field| { &mut m.packed }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<Option>>( + "options", + |m: &Field| { &m.options }, + |m: &mut Field| { &mut m.options }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeString>( + "json_name", + |m: &Field| { &m.json_name }, + |m: &mut Field| { &mut m.json_name }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeString>( + "default_value", + |m: &Field| { &m.default_value }, + |m: &mut Field| { &mut m.default_value }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<Field>( + "Field", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static Field { + static instance: crate::rt::LazyV2<Field> = crate::rt::LazyV2::INIT; + instance.get(Field::new) + } +} + +impl crate::Clear for Field { + fn clear(&mut self) { + self.kind = Field_Kind::TYPE_UNKNOWN; + self.cardinality = Field_Cardinality::CARDINALITY_UNKNOWN; + self.number = 0; + self.name.clear(); + self.type_url.clear(); + self.oneof_index = 0; + self.packed = false; + self.options.clear(); + self.json_name.clear(); + self.default_value.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for Field { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for Field { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(Clone,PartialEq,Eq,Debug,Hash)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub enum Field_Kind { + TYPE_UNKNOWN = 0, + TYPE_DOUBLE = 1, + TYPE_FLOAT = 2, + TYPE_INT64 = 3, + TYPE_UINT64 = 4, + TYPE_INT32 = 5, + TYPE_FIXED64 = 6, + TYPE_FIXED32 = 7, + TYPE_BOOL = 8, + TYPE_STRING = 9, + TYPE_GROUP = 10, + TYPE_MESSAGE = 11, + TYPE_BYTES = 12, + TYPE_UINT32 = 13, + TYPE_ENUM = 14, + TYPE_SFIXED32 = 15, + TYPE_SFIXED64 = 16, + TYPE_SINT32 = 17, + TYPE_SINT64 = 18, +} + +impl crate::ProtobufEnum for Field_Kind { + fn value(&self) -> i32 { + *self as i32 + } + + fn from_i32(value: i32) -> ::std::option::Option<Field_Kind> { + match value { + 0 => ::std::option::Option::Some(Field_Kind::TYPE_UNKNOWN), + 1 => ::std::option::Option::Some(Field_Kind::TYPE_DOUBLE), + 2 => ::std::option::Option::Some(Field_Kind::TYPE_FLOAT), + 3 => ::std::option::Option::Some(Field_Kind::TYPE_INT64), + 4 => ::std::option::Option::Some(Field_Kind::TYPE_UINT64), + 5 => ::std::option::Option::Some(Field_Kind::TYPE_INT32), + 6 => ::std::option::Option::Some(Field_Kind::TYPE_FIXED64), + 7 => ::std::option::Option::Some(Field_Kind::TYPE_FIXED32), + 8 => ::std::option::Option::Some(Field_Kind::TYPE_BOOL), + 9 => ::std::option::Option::Some(Field_Kind::TYPE_STRING), + 10 => ::std::option::Option::Some(Field_Kind::TYPE_GROUP), + 11 => ::std::option::Option::Some(Field_Kind::TYPE_MESSAGE), + 12 => ::std::option::Option::Some(Field_Kind::TYPE_BYTES), + 13 => ::std::option::Option::Some(Field_Kind::TYPE_UINT32), + 14 => ::std::option::Option::Some(Field_Kind::TYPE_ENUM), + 15 => ::std::option::Option::Some(Field_Kind::TYPE_SFIXED32), + 16 => ::std::option::Option::Some(Field_Kind::TYPE_SFIXED64), + 17 => ::std::option::Option::Some(Field_Kind::TYPE_SINT32), + 18 => ::std::option::Option::Some(Field_Kind::TYPE_SINT64), + _ => ::std::option::Option::None + } + } + + fn values() -> &'static [Self] { + static values: &'static [Field_Kind] = &[ + Field_Kind::TYPE_UNKNOWN, + Field_Kind::TYPE_DOUBLE, + Field_Kind::TYPE_FLOAT, + Field_Kind::TYPE_INT64, + Field_Kind::TYPE_UINT64, + Field_Kind::TYPE_INT32, + Field_Kind::TYPE_FIXED64, + Field_Kind::TYPE_FIXED32, + Field_Kind::TYPE_BOOL, + Field_Kind::TYPE_STRING, + Field_Kind::TYPE_GROUP, + Field_Kind::TYPE_MESSAGE, + Field_Kind::TYPE_BYTES, + Field_Kind::TYPE_UINT32, + Field_Kind::TYPE_ENUM, + Field_Kind::TYPE_SFIXED32, + Field_Kind::TYPE_SFIXED64, + Field_Kind::TYPE_SINT32, + Field_Kind::TYPE_SINT64, + ]; + values + } + + fn enum_descriptor_static() -> &'static crate::reflect::EnumDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::EnumDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + crate::reflect::EnumDescriptor::new_pb_name::<Field_Kind>("Field.Kind", file_descriptor_proto()) + }) + } +} + +impl ::std::marker::Copy for Field_Kind { +} + +impl ::std::default::Default for Field_Kind { + fn default() -> Self { + Field_Kind::TYPE_UNKNOWN + } +} + +impl crate::reflect::ProtobufValue for Field_Kind { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Enum(crate::ProtobufEnum::descriptor(self)) + } +} + +#[derive(Clone,PartialEq,Eq,Debug,Hash)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub enum Field_Cardinality { + CARDINALITY_UNKNOWN = 0, + CARDINALITY_OPTIONAL = 1, + CARDINALITY_REQUIRED = 2, + CARDINALITY_REPEATED = 3, +} + +impl crate::ProtobufEnum for Field_Cardinality { + fn value(&self) -> i32 { + *self as i32 + } + + fn from_i32(value: i32) -> ::std::option::Option<Field_Cardinality> { + match value { + 0 => ::std::option::Option::Some(Field_Cardinality::CARDINALITY_UNKNOWN), + 1 => ::std::option::Option::Some(Field_Cardinality::CARDINALITY_OPTIONAL), + 2 => ::std::option::Option::Some(Field_Cardinality::CARDINALITY_REQUIRED), + 3 => ::std::option::Option::Some(Field_Cardinality::CARDINALITY_REPEATED), + _ => ::std::option::Option::None + } + } + + fn values() -> &'static [Self] { + static values: &'static [Field_Cardinality] = &[ + Field_Cardinality::CARDINALITY_UNKNOWN, + Field_Cardinality::CARDINALITY_OPTIONAL, + Field_Cardinality::CARDINALITY_REQUIRED, + Field_Cardinality::CARDINALITY_REPEATED, + ]; + values + } + + fn enum_descriptor_static() -> &'static crate::reflect::EnumDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::EnumDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + crate::reflect::EnumDescriptor::new_pb_name::<Field_Cardinality>("Field.Cardinality", file_descriptor_proto()) + }) + } +} + +impl ::std::marker::Copy for Field_Cardinality { +} + +impl ::std::default::Default for Field_Cardinality { + fn default() -> Self { + Field_Cardinality::CARDINALITY_UNKNOWN + } +} + +impl crate::reflect::ProtobufValue for Field_Cardinality { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Enum(crate::ProtobufEnum::descriptor(self)) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct Enum { + // message fields + pub name: ::std::string::String, + pub enumvalue: crate::RepeatedField<EnumValue>, + pub options: crate::RepeatedField<Option>, + pub source_context: crate::SingularPtrField<crate::well_known_types::SourceContext>, + pub syntax: Syntax, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a Enum { + fn default() -> &'a Enum { + <Enum as crate::Message>::default_instance() + } +} + +impl Enum { + pub fn new() -> Enum { + ::std::default::Default::default() + } + + // string name = 1; + + + pub fn get_name(&self) -> &str { + &self.name + } + pub fn clear_name(&mut self) { + self.name.clear(); + } + + // Param is passed by value, moved + pub fn set_name(&mut self, v: ::std::string::String) { + self.name = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_name(&mut self) -> &mut ::std::string::String { + &mut self.name + } + + // Take field + pub fn take_name(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.name, ::std::string::String::new()) + } + + // repeated .google.protobuf.EnumValue enumvalue = 2; + + + pub fn get_enumvalue(&self) -> &[EnumValue] { + &self.enumvalue + } + pub fn clear_enumvalue(&mut self) { + self.enumvalue.clear(); + } + + // Param is passed by value, moved + pub fn set_enumvalue(&mut self, v: crate::RepeatedField<EnumValue>) { + self.enumvalue = v; + } + + // Mutable pointer to the field. + pub fn mut_enumvalue(&mut self) -> &mut crate::RepeatedField<EnumValue> { + &mut self.enumvalue + } + + // Take field + pub fn take_enumvalue(&mut self) -> crate::RepeatedField<EnumValue> { + ::std::mem::replace(&mut self.enumvalue, crate::RepeatedField::new()) + } + + // repeated .google.protobuf.Option options = 3; + + + pub fn get_options(&self) -> &[Option] { + &self.options + } + pub fn clear_options(&mut self) { + self.options.clear(); + } + + // Param is passed by value, moved + pub fn set_options(&mut self, v: crate::RepeatedField<Option>) { + self.options = v; + } + + // Mutable pointer to the field. + pub fn mut_options(&mut self) -> &mut crate::RepeatedField<Option> { + &mut self.options + } + + // Take field + pub fn take_options(&mut self) -> crate::RepeatedField<Option> { + ::std::mem::replace(&mut self.options, crate::RepeatedField::new()) + } + + // .google.protobuf.SourceContext source_context = 4; + + + pub fn get_source_context(&self) -> &crate::well_known_types::SourceContext { + self.source_context.as_ref().unwrap_or_else(|| <crate::well_known_types::SourceContext as crate::Message>::default_instance()) + } + pub fn clear_source_context(&mut self) { + self.source_context.clear(); + } + + pub fn has_source_context(&self) -> bool { + self.source_context.is_some() + } + + // Param is passed by value, moved + pub fn set_source_context(&mut self, v: crate::well_known_types::SourceContext) { + self.source_context = crate::SingularPtrField::some(v); + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_source_context(&mut self) -> &mut crate::well_known_types::SourceContext { + if self.source_context.is_none() { + self.source_context.set_default(); + } + self.source_context.as_mut().unwrap() + } + + // Take field + pub fn take_source_context(&mut self) -> crate::well_known_types::SourceContext { + self.source_context.take().unwrap_or_else(|| crate::well_known_types::SourceContext::new()) + } + + // .google.protobuf.Syntax syntax = 5; + + + pub fn get_syntax(&self) -> Syntax { + self.syntax + } + pub fn clear_syntax(&mut self) { + self.syntax = Syntax::SYNTAX_PROTO2; + } + + // Param is passed by value, moved + pub fn set_syntax(&mut self, v: Syntax) { + self.syntax = v; + } +} + +impl crate::Message for Enum { + fn is_initialized(&self) -> bool { + for v in &self.enumvalue { + if !v.is_initialized() { + return false; + } + }; + for v in &self.options { + if !v.is_initialized() { + return false; + } + }; + for v in &self.source_context { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_proto3_string_into(wire_type, is, &mut self.name)?; + }, + 2 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.enumvalue)?; + }, + 3 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.options)?; + }, + 4 => { + crate::rt::read_singular_message_into(wire_type, is, &mut self.source_context)?; + }, + 5 => { + crate::rt::read_proto3_enum_with_unknown_fields_into(wire_type, is, &mut self.syntax, 5, &mut self.unknown_fields)? + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if !self.name.is_empty() { + my_size += crate::rt::string_size(1, &self.name); + } + for value in &self.enumvalue { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + for value in &self.options { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + if let Some(ref v) = self.source_context.as_ref() { + let len = v.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + } + if self.syntax != Syntax::SYNTAX_PROTO2 { + my_size += crate::rt::enum_size(5, self.syntax); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if !self.name.is_empty() { + os.write_string(1, &self.name)?; + } + for v in &self.enumvalue { + os.write_tag(2, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + for v in &self.options { + os.write_tag(3, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + if let Some(ref v) = self.source_context.as_ref() { + os.write_tag(4, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + } + if self.syntax != Syntax::SYNTAX_PROTO2 { + os.write_enum(5, crate::ProtobufEnum::value(&self.syntax))?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> Enum { + Enum::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeString>( + "name", + |m: &Enum| { &m.name }, + |m: &mut Enum| { &mut m.name }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<EnumValue>>( + "enumvalue", + |m: &Enum| { &m.enumvalue }, + |m: &mut Enum| { &mut m.enumvalue }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<Option>>( + "options", + |m: &Enum| { &m.options }, + |m: &mut Enum| { &mut m.options }, + )); + fields.push(crate::reflect::accessor::make_singular_ptr_field_accessor::<_, crate::types::ProtobufTypeMessage<crate::well_known_types::SourceContext>>( + "source_context", + |m: &Enum| { &m.source_context }, + |m: &mut Enum| { &mut m.source_context }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeEnum<Syntax>>( + "syntax", + |m: &Enum| { &m.syntax }, + |m: &mut Enum| { &mut m.syntax }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<Enum>( + "Enum", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static Enum { + static instance: crate::rt::LazyV2<Enum> = crate::rt::LazyV2::INIT; + instance.get(Enum::new) + } +} + +impl crate::Clear for Enum { + fn clear(&mut self) { + self.name.clear(); + self.enumvalue.clear(); + self.options.clear(); + self.source_context.clear(); + self.syntax = Syntax::SYNTAX_PROTO2; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for Enum { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for Enum { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct EnumValue { + // message fields + pub name: ::std::string::String, + pub number: i32, + pub options: crate::RepeatedField<Option>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a EnumValue { + fn default() -> &'a EnumValue { + <EnumValue as crate::Message>::default_instance() + } +} + +impl EnumValue { + pub fn new() -> EnumValue { + ::std::default::Default::default() + } + + // string name = 1; + + + pub fn get_name(&self) -> &str { + &self.name + } + pub fn clear_name(&mut self) { + self.name.clear(); + } + + // Param is passed by value, moved + pub fn set_name(&mut self, v: ::std::string::String) { + self.name = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_name(&mut self) -> &mut ::std::string::String { + &mut self.name + } + + // Take field + pub fn take_name(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.name, ::std::string::String::new()) + } + + // int32 number = 2; + + + pub fn get_number(&self) -> i32 { + self.number + } + pub fn clear_number(&mut self) { + self.number = 0; + } + + // Param is passed by value, moved + pub fn set_number(&mut self, v: i32) { + self.number = v; + } + + // repeated .google.protobuf.Option options = 3; + + + pub fn get_options(&self) -> &[Option] { + &self.options + } + pub fn clear_options(&mut self) { + self.options.clear(); + } + + // Param is passed by value, moved + pub fn set_options(&mut self, v: crate::RepeatedField<Option>) { + self.options = v; + } + + // Mutable pointer to the field. + pub fn mut_options(&mut self) -> &mut crate::RepeatedField<Option> { + &mut self.options + } + + // Take field + pub fn take_options(&mut self) -> crate::RepeatedField<Option> { + ::std::mem::replace(&mut self.options, crate::RepeatedField::new()) + } +} + +impl crate::Message for EnumValue { + fn is_initialized(&self) -> bool { + for v in &self.options { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_proto3_string_into(wire_type, is, &mut self.name)?; + }, + 2 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int32()?; + self.number = tmp; + }, + 3 => { + crate::rt::read_repeated_message_into(wire_type, is, &mut self.options)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if !self.name.is_empty() { + my_size += crate::rt::string_size(1, &self.name); + } + if self.number != 0 { + my_size += crate::rt::value_size(2, self.number, crate::wire_format::WireTypeVarint); + } + for value in &self.options { + let len = value.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + }; + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if !self.name.is_empty() { + os.write_string(1, &self.name)?; + } + if self.number != 0 { + os.write_int32(2, self.number)?; + } + for v in &self.options { + os.write_tag(3, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + }; + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> EnumValue { + EnumValue::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeString>( + "name", + |m: &EnumValue| { &m.name }, + |m: &mut EnumValue| { &mut m.name }, + )); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeInt32>( + "number", + |m: &EnumValue| { &m.number }, + |m: &mut EnumValue| { &mut m.number }, + )); + fields.push(crate::reflect::accessor::make_repeated_field_accessor::<_, crate::types::ProtobufTypeMessage<Option>>( + "options", + |m: &EnumValue| { &m.options }, + |m: &mut EnumValue| { &mut m.options }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<EnumValue>( + "EnumValue", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static EnumValue { + static instance: crate::rt::LazyV2<EnumValue> = crate::rt::LazyV2::INIT; + instance.get(EnumValue::new) + } +} + +impl crate::Clear for EnumValue { + fn clear(&mut self) { + self.name.clear(); + self.number = 0; + self.options.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for EnumValue { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for EnumValue { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct Option { + // message fields + pub name: ::std::string::String, + pub value: crate::SingularPtrField<crate::well_known_types::Any>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a Option { + fn default() -> &'a Option { + <Option as crate::Message>::default_instance() + } +} + +impl Option { + pub fn new() -> Option { + ::std::default::Default::default() + } + + // string name = 1; + + + pub fn get_name(&self) -> &str { + &self.name + } + pub fn clear_name(&mut self) { + self.name.clear(); + } + + // Param is passed by value, moved + pub fn set_name(&mut self, v: ::std::string::String) { + self.name = v; + } + + // Mutable pointer to the field. + // If field is not initialized, it is initialized with default value first. + pub fn mut_name(&mut self) -> &mut ::std::string::String { + &mut self.name + } + + // Take field + pub fn take_name(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.name, ::std::string::String::new()) + } + + // .google.protobuf.Any value = 2; + + + pub fn get_value(&self) -> &crate::well_known_types::Any { + self.value.as_ref().unwrap_or_else(|| <crate::well_known_types::Any as crate::Message>::default_instance()) + } + pub fn clear_value(&mut self) { + self.value.clear(); + } + + pub fn has_value(&self) -> bool { + self.value.is_some() + } + + // Param is passed by value, moved + pub fn set_value(&mut self, v: crate::well_known_types::Any) { + self.value = crate::SingularPtrField::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 crate::well_known_types::Any { + if self.value.is_none() { + self.value.set_default(); + } + self.value.as_mut().unwrap() + } + + // Take field + pub fn take_value(&mut self) -> crate::well_known_types::Any { + self.value.take().unwrap_or_else(|| crate::well_known_types::Any::new()) + } +} + +impl crate::Message for Option { + fn is_initialized(&self) -> bool { + for v in &self.value { + if !v.is_initialized() { + return false; + } + }; + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_proto3_string_into(wire_type, is, &mut self.name)?; + }, + 2 => { + crate::rt::read_singular_message_into(wire_type, is, &mut self.value)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if !self.name.is_empty() { + my_size += crate::rt::string_size(1, &self.name); + } + if let Some(ref v) = self.value.as_ref() { + let len = v.compute_size(); + my_size += 1 + crate::rt::compute_raw_varint32_size(len) + len; + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if !self.name.is_empty() { + os.write_string(1, &self.name)?; + } + if let Some(ref v) = self.value.as_ref() { + os.write_tag(2, crate::wire_format::WireTypeLengthDelimited)?; + os.write_raw_varint32(v.get_cached_size())?; + v.write_to_with_cached_sizes(os)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> Option { + Option::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeString>( + "name", + |m: &Option| { &m.name }, + |m: &mut Option| { &mut m.name }, + )); + fields.push(crate::reflect::accessor::make_singular_ptr_field_accessor::<_, crate::types::ProtobufTypeMessage<crate::well_known_types::Any>>( + "value", + |m: &Option| { &m.value }, + |m: &mut Option| { &mut m.value }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<Option>( + "Option", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static Option { + static instance: crate::rt::LazyV2<Option> = crate::rt::LazyV2::INIT; + instance.get(Option::new) + } +} + +impl crate::Clear for Option { + fn clear(&mut self) { + self.name.clear(); + self.value.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for Option { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for Option { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(Clone,PartialEq,Eq,Debug,Hash)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub enum Syntax { + SYNTAX_PROTO2 = 0, + SYNTAX_PROTO3 = 1, +} + +impl crate::ProtobufEnum for Syntax { + fn value(&self) -> i32 { + *self as i32 + } + + fn from_i32(value: i32) -> ::std::option::Option<Syntax> { + match value { + 0 => ::std::option::Option::Some(Syntax::SYNTAX_PROTO2), + 1 => ::std::option::Option::Some(Syntax::SYNTAX_PROTO3), + _ => ::std::option::Option::None + } + } + + fn values() -> &'static [Self] { + static values: &'static [Syntax] = &[ + Syntax::SYNTAX_PROTO2, + Syntax::SYNTAX_PROTO3, + ]; + values + } + + fn enum_descriptor_static() -> &'static crate::reflect::EnumDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::EnumDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + crate::reflect::EnumDescriptor::new_pb_name::<Syntax>("Syntax", file_descriptor_proto()) + }) + } +} + +impl ::std::marker::Copy for Syntax { +} + +impl ::std::default::Default for Syntax { + fn default() -> Self { + Syntax::SYNTAX_PROTO2 + } +} + +impl crate::reflect::ProtobufValue for Syntax { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Enum(crate::ProtobufEnum::descriptor(self)) + } +} + +static file_descriptor_proto_data: &'static [u8] = b"\ + \n\x1agoogle/protobuf/type.proto\x12\x0fgoogle.protobuf\x1a\x19google/pr\ + otobuf/any.proto\x1a$google/protobuf/source_context.proto\"\x8d\x02\n\ + \x04Type\x12\x12\n\x04name\x18\x01\x20\x01(\tR\x04name\x12.\n\x06fields\ + \x18\x02\x20\x03(\x0b2\x16.google.protobuf.FieldR\x06fields\x12\x16\n\ + \x06oneofs\x18\x03\x20\x03(\tR\x06oneofs\x121\n\x07options\x18\x04\x20\ + \x03(\x0b2\x17.google.protobuf.OptionR\x07options\x12E\n\x0esource_conte\ + xt\x18\x05\x20\x01(\x0b2\x1e.google.protobuf.SourceContextR\rsourceConte\ + xt\x12/\n\x06syntax\x18\x06\x20\x01(\x0e2\x17.google.protobuf.SyntaxR\ + \x06syntax\"\xb4\x06\n\x05Field\x12/\n\x04kind\x18\x01\x20\x01(\x0e2\x1b\ + .google.protobuf.Field.KindR\x04kind\x12D\n\x0bcardinality\x18\x02\x20\ + \x01(\x0e2\".google.protobuf.Field.CardinalityR\x0bcardinality\x12\x16\n\ + \x06number\x18\x03\x20\x01(\x05R\x06number\x12\x12\n\x04name\x18\x04\x20\ + \x01(\tR\x04name\x12\x19\n\x08type_url\x18\x06\x20\x01(\tR\x07typeUrl\ + \x12\x1f\n\x0boneof_index\x18\x07\x20\x01(\x05R\noneofIndex\x12\x16\n\ + \x06packed\x18\x08\x20\x01(\x08R\x06packed\x121\n\x07options\x18\t\x20\ + \x03(\x0b2\x17.google.protobuf.OptionR\x07options\x12\x1b\n\tjson_name\ + \x18\n\x20\x01(\tR\x08jsonName\x12#\n\rdefault_value\x18\x0b\x20\x01(\tR\ + \x0cdefaultValue\"\xc8\x02\n\x04Kind\x12\x10\n\x0cTYPE_UNKNOWN\x10\0\x12\ + \x0f\n\x0bTYPE_DOUBLE\x10\x01\x12\x0e\n\nTYPE_FLOAT\x10\x02\x12\x0e\n\nT\ + YPE_INT64\x10\x03\x12\x0f\n\x0bTYPE_UINT64\x10\x04\x12\x0e\n\nTYPE_INT32\ + \x10\x05\x12\x10\n\x0cTYPE_FIXED64\x10\x06\x12\x10\n\x0cTYPE_FIXED32\x10\ + \x07\x12\r\n\tTYPE_BOOL\x10\x08\x12\x0f\n\x0bTYPE_STRING\x10\t\x12\x0e\n\ + \nTYPE_GROUP\x10\n\x12\x10\n\x0cTYPE_MESSAGE\x10\x0b\x12\x0e\n\nTYPE_BYT\ + ES\x10\x0c\x12\x0f\n\x0bTYPE_UINT32\x10\r\x12\r\n\tTYPE_ENUM\x10\x0e\x12\ + \x11\n\rTYPE_SFIXED32\x10\x0f\x12\x11\n\rTYPE_SFIXED64\x10\x10\x12\x0f\n\ + \x0bTYPE_SINT32\x10\x11\x12\x0f\n\x0bTYPE_SINT64\x10\x12\"t\n\x0bCardina\ + lity\x12\x17\n\x13CARDINALITY_UNKNOWN\x10\0\x12\x18\n\x14CARDINALITY_OPT\ + IONAL\x10\x01\x12\x18\n\x14CARDINALITY_REQUIRED\x10\x02\x12\x18\n\x14CAR\ + DINALITY_REPEATED\x10\x03\"\xff\x01\n\x04Enum\x12\x12\n\x04name\x18\x01\ + \x20\x01(\tR\x04name\x128\n\tenumvalue\x18\x02\x20\x03(\x0b2\x1a.google.\ + protobuf.EnumValueR\tenumvalue\x121\n\x07options\x18\x03\x20\x03(\x0b2\ + \x17.google.protobuf.OptionR\x07options\x12E\n\x0esource_context\x18\x04\ + \x20\x01(\x0b2\x1e.google.protobuf.SourceContextR\rsourceContext\x12/\n\ + \x06syntax\x18\x05\x20\x01(\x0e2\x17.google.protobuf.SyntaxR\x06syntax\"\ + j\n\tEnumValue\x12\x12\n\x04name\x18\x01\x20\x01(\tR\x04name\x12\x16\n\ + \x06number\x18\x02\x20\x01(\x05R\x06number\x121\n\x07options\x18\x03\x20\ + \x03(\x0b2\x17.google.protobuf.OptionR\x07options\"H\n\x06Option\x12\x12\ + \n\x04name\x18\x01\x20\x01(\tR\x04name\x12*\n\x05value\x18\x02\x20\x01(\ + \x0b2\x14.google.protobuf.AnyR\x05value*.\n\x06Syntax\x12\x11\n\rSYNTAX_\ + PROTO2\x10\0\x12\x11\n\rSYNTAX_PROTO3\x10\x01B{\n\x13com.google.protobuf\ + B\tTypeProtoP\x01Z-google.golang.org/protobuf/types/known/typepb\xf8\x01\ + \x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesJ\xc38\n\ + \x07\x12\x05\x1e\0\xba\x01\x01\n\xcc\x0c\n\x01\x0c\x12\x03\x1e\0\x122\ + \xc1\x0c\x20Protocol\x20Buffers\x20-\x20Google's\x20data\x20interchange\ + \x20format\n\x20Copyright\x202008\x20Google\x20Inc.\x20\x20All\x20rights\ + \x20reserved.\n\x20https://developers.google.com/protocol-buffers/\n\n\ + \x20Redistribution\x20and\x20use\x20in\x20source\x20and\x20binary\x20for\ + ms,\x20with\x20or\x20without\n\x20modification,\x20are\x20permitted\x20p\ + rovided\x20that\x20the\x20following\x20conditions\x20are\n\x20met:\n\n\ + \x20\x20\x20\x20\x20*\x20Redistributions\x20of\x20source\x20code\x20must\ + \x20retain\x20the\x20above\x20copyright\n\x20notice,\x20this\x20list\x20\ + of\x20conditions\x20and\x20the\x20following\x20disclaimer.\n\x20\x20\x20\ + \x20\x20*\x20Redistributions\x20in\x20binary\x20form\x20must\x20reproduc\ + e\x20the\x20above\n\x20copyright\x20notice,\x20this\x20list\x20of\x20con\ + ditions\x20and\x20the\x20following\x20disclaimer\n\x20in\x20the\x20docum\ + entation\x20and/or\x20other\x20materials\x20provided\x20with\x20the\n\ + \x20distribution.\n\x20\x20\x20\x20\x20*\x20Neither\x20the\x20name\x20of\ + \x20Google\x20Inc.\x20nor\x20the\x20names\x20of\x20its\n\x20contributors\ + \x20may\x20be\x20used\x20to\x20endorse\x20or\x20promote\x20products\x20d\ + erived\x20from\n\x20this\x20software\x20without\x20specific\x20prior\x20\ + written\x20permission.\n\n\x20THIS\x20SOFTWARE\x20IS\x20PROVIDED\x20BY\ + \x20THE\x20COPYRIGHT\x20HOLDERS\x20AND\x20CONTRIBUTORS\n\x20\"AS\x20IS\"\ + \x20AND\x20ANY\x20EXPRESS\x20OR\x20IMPLIED\x20WARRANTIES,\x20INCLUDING,\ + \x20BUT\x20NOT\n\x20LIMITED\x20TO,\x20THE\x20IMPLIED\x20WARRANTIES\x20OF\ + \x20MERCHANTABILITY\x20AND\x20FITNESS\x20FOR\n\x20A\x20PARTICULAR\x20PUR\ + POSE\x20ARE\x20DISCLAIMED.\x20IN\x20NO\x20EVENT\x20SHALL\x20THE\x20COPYR\ + IGHT\n\x20OWNER\x20OR\x20CONTRIBUTORS\x20BE\x20LIABLE\x20FOR\x20ANY\x20D\ + IRECT,\x20INDIRECT,\x20INCIDENTAL,\n\x20SPECIAL,\x20EXEMPLARY,\x20OR\x20\ + CONSEQUENTIAL\x20DAMAGES\x20(INCLUDING,\x20BUT\x20NOT\n\x20LIMITED\x20TO\ + ,\x20PROCUREMENT\x20OF\x20SUBSTITUTE\x20GOODS\x20OR\x20SERVICES;\x20LOSS\ + \x20OF\x20USE,\n\x20DATA,\x20OR\x20PROFITS;\x20OR\x20BUSINESS\x20INTERRU\ + PTION)\x20HOWEVER\x20CAUSED\x20AND\x20ON\x20ANY\n\x20THEORY\x20OF\x20LIA\ + BILITY,\x20WHETHER\x20IN\x20CONTRACT,\x20STRICT\x20LIABILITY,\x20OR\x20T\ + ORT\n\x20(INCLUDING\x20NEGLIGENCE\x20OR\x20OTHERWISE)\x20ARISING\x20IN\ + \x20ANY\x20WAY\x20OUT\x20OF\x20THE\x20USE\n\x20OF\x20THIS\x20SOFTWARE,\ + \x20EVEN\x20IF\x20ADVISED\x20OF\x20THE\x20POSSIBILITY\x20OF\x20SUCH\x20D\ + AMAGE.\n\n\x08\n\x01\x02\x12\x03\x20\0\x18\n\t\n\x02\x03\0\x12\x03\"\0#\ + \n\t\n\x02\x03\x01\x12\x03#\0.\n\x08\n\x01\x08\x12\x03%\0;\n\t\n\x02\x08\ + %\x12\x03%\0;\n\x08\n\x01\x08\x12\x03&\0\x1f\n\t\n\x02\x08\x1f\x12\x03&\ + \0\x1f\n\x08\n\x01\x08\x12\x03'\0,\n\t\n\x02\x08\x01\x12\x03'\0,\n\x08\n\ + \x01\x08\x12\x03(\0*\n\t\n\x02\x08\x08\x12\x03(\0*\n\x08\n\x01\x08\x12\ + \x03)\0\"\n\t\n\x02\x08\n\x12\x03)\0\"\n\x08\n\x01\x08\x12\x03*\0!\n\t\n\ + \x02\x08$\x12\x03*\0!\n\x08\n\x01\x08\x12\x03+\0D\n\t\n\x02\x08\x0b\x12\ + \x03+\0D\n-\n\x02\x04\0\x12\x04.\0;\x01\x1a!\x20A\x20protocol\x20buffer\ + \x20message\x20type.\n\n\n\n\x03\x04\0\x01\x12\x03.\x08\x0c\n0\n\x04\x04\ + \0\x02\0\x12\x030\x02\x12\x1a#\x20The\x20fully\x20qualified\x20message\ + \x20name.\n\n\x0c\n\x05\x04\0\x02\0\x05\x12\x030\x02\x08\n\x0c\n\x05\x04\ + \0\x02\0\x01\x12\x030\t\r\n\x0c\n\x05\x04\0\x02\0\x03\x12\x030\x10\x11\n\ + \"\n\x04\x04\0\x02\x01\x12\x032\x02\x1c\x1a\x15\x20The\x20list\x20of\x20\ + fields.\n\n\x0c\n\x05\x04\0\x02\x01\x04\x12\x032\x02\n\n\x0c\n\x05\x04\0\ + \x02\x01\x06\x12\x032\x0b\x10\n\x0c\n\x05\x04\0\x02\x01\x01\x12\x032\x11\ + \x17\n\x0c\n\x05\x04\0\x02\x01\x03\x12\x032\x1a\x1b\nO\n\x04\x04\0\x02\ + \x02\x12\x034\x02\x1d\x1aB\x20The\x20list\x20of\x20types\x20appearing\ + \x20in\x20`oneof`\x20definitions\x20in\x20this\x20type.\n\n\x0c\n\x05\ + \x04\0\x02\x02\x04\x12\x034\x02\n\n\x0c\n\x05\x04\0\x02\x02\x05\x12\x034\ + \x0b\x11\n\x0c\n\x05\x04\0\x02\x02\x01\x12\x034\x12\x18\n\x0c\n\x05\x04\ + \0\x02\x02\x03\x12\x034\x1b\x1c\n+\n\x04\x04\0\x02\x03\x12\x036\x02\x1e\ + \x1a\x1e\x20The\x20protocol\x20buffer\x20options.\n\n\x0c\n\x05\x04\0\ + \x02\x03\x04\x12\x036\x02\n\n\x0c\n\x05\x04\0\x02\x03\x06\x12\x036\x0b\ + \x11\n\x0c\n\x05\x04\0\x02\x03\x01\x12\x036\x12\x19\n\x0c\n\x05\x04\0\ + \x02\x03\x03\x12\x036\x1c\x1d\n\"\n\x04\x04\0\x02\x04\x12\x038\x02#\x1a\ + \x15\x20The\x20source\x20context.\n\n\x0c\n\x05\x04\0\x02\x04\x06\x12\ + \x038\x02\x0f\n\x0c\n\x05\x04\0\x02\x04\x01\x12\x038\x10\x1e\n\x0c\n\x05\ + \x04\0\x02\x04\x03\x12\x038!\"\n!\n\x04\x04\0\x02\x05\x12\x03:\x02\x14\ + \x1a\x14\x20The\x20source\x20syntax.\n\n\x0c\n\x05\x04\0\x02\x05\x06\x12\ + \x03:\x02\x08\n\x0c\n\x05\x04\0\x02\x05\x01\x12\x03:\t\x0f\n\x0c\n\x05\ + \x04\0\x02\x05\x03\x12\x03:\x12\x13\n0\n\x02\x04\x01\x12\x05>\0\x8b\x01\ + \x01\x1a#\x20A\x20single\x20field\x20of\x20a\x20message\x20type.\n\n\n\n\ + \x03\x04\x01\x01\x12\x03>\x08\r\n\"\n\x04\x04\x01\x04\0\x12\x04@\x02g\ + \x03\x1a\x14\x20Basic\x20field\x20types.\n\n\x0c\n\x05\x04\x01\x04\0\x01\ + \x12\x03@\x07\x0b\n$\n\x06\x04\x01\x04\0\x02\0\x12\x03B\x04\x15\x1a\x15\ + \x20Field\x20type\x20unknown.\n\n\x0e\n\x07\x04\x01\x04\0\x02\0\x01\x12\ + \x03B\x04\x10\n\x0e\n\x07\x04\x01\x04\0\x02\0\x02\x12\x03B\x13\x14\n#\n\ + \x06\x04\x01\x04\0\x02\x01\x12\x03D\x04\x14\x1a\x14\x20Field\x20type\x20\ + double.\n\n\x0e\n\x07\x04\x01\x04\0\x02\x01\x01\x12\x03D\x04\x0f\n\x0e\n\ + \x07\x04\x01\x04\0\x02\x01\x02\x12\x03D\x12\x13\n\"\n\x06\x04\x01\x04\0\ + \x02\x02\x12\x03F\x04\x13\x1a\x13\x20Field\x20type\x20float.\n\n\x0e\n\ + \x07\x04\x01\x04\0\x02\x02\x01\x12\x03F\x04\x0e\n\x0e\n\x07\x04\x01\x04\ + \0\x02\x02\x02\x12\x03F\x11\x12\n\"\n\x06\x04\x01\x04\0\x02\x03\x12\x03H\ + \x04\x13\x1a\x13\x20Field\x20type\x20int64.\n\n\x0e\n\x07\x04\x01\x04\0\ + \x02\x03\x01\x12\x03H\x04\x0e\n\x0e\n\x07\x04\x01\x04\0\x02\x03\x02\x12\ + \x03H\x11\x12\n#\n\x06\x04\x01\x04\0\x02\x04\x12\x03J\x04\x14\x1a\x14\ + \x20Field\x20type\x20uint64.\n\n\x0e\n\x07\x04\x01\x04\0\x02\x04\x01\x12\ + \x03J\x04\x0f\n\x0e\n\x07\x04\x01\x04\0\x02\x04\x02\x12\x03J\x12\x13\n\"\ + \n\x06\x04\x01\x04\0\x02\x05\x12\x03L\x04\x13\x1a\x13\x20Field\x20type\ + \x20int32.\n\n\x0e\n\x07\x04\x01\x04\0\x02\x05\x01\x12\x03L\x04\x0e\n\ + \x0e\n\x07\x04\x01\x04\0\x02\x05\x02\x12\x03L\x11\x12\n$\n\x06\x04\x01\ + \x04\0\x02\x06\x12\x03N\x04\x15\x1a\x15\x20Field\x20type\x20fixed64.\n\n\ + \x0e\n\x07\x04\x01\x04\0\x02\x06\x01\x12\x03N\x04\x10\n\x0e\n\x07\x04\ + \x01\x04\0\x02\x06\x02\x12\x03N\x13\x14\n$\n\x06\x04\x01\x04\0\x02\x07\ + \x12\x03P\x04\x15\x1a\x15\x20Field\x20type\x20fixed32.\n\n\x0e\n\x07\x04\ + \x01\x04\0\x02\x07\x01\x12\x03P\x04\x10\n\x0e\n\x07\x04\x01\x04\0\x02\ + \x07\x02\x12\x03P\x13\x14\n!\n\x06\x04\x01\x04\0\x02\x08\x12\x03R\x04\ + \x12\x1a\x12\x20Field\x20type\x20bool.\n\n\x0e\n\x07\x04\x01\x04\0\x02\ + \x08\x01\x12\x03R\x04\r\n\x0e\n\x07\x04\x01\x04\0\x02\x08\x02\x12\x03R\ + \x10\x11\n#\n\x06\x04\x01\x04\0\x02\t\x12\x03T\x04\x14\x1a\x14\x20Field\ + \x20type\x20string.\n\n\x0e\n\x07\x04\x01\x04\0\x02\t\x01\x12\x03T\x04\ + \x0f\n\x0e\n\x07\x04\x01\x04\0\x02\t\x02\x12\x03T\x12\x13\nF\n\x06\x04\ + \x01\x04\0\x02\n\x12\x03V\x04\x14\x1a7\x20Field\x20type\x20group.\x20Pro\ + to2\x20syntax\x20only,\x20and\x20deprecated.\n\n\x0e\n\x07\x04\x01\x04\0\ + \x02\n\x01\x12\x03V\x04\x0e\n\x0e\n\x07\x04\x01\x04\0\x02\n\x02\x12\x03V\ + \x11\x13\n$\n\x06\x04\x01\x04\0\x02\x0b\x12\x03X\x04\x16\x1a\x15\x20Fiel\ + d\x20type\x20message.\n\n\x0e\n\x07\x04\x01\x04\0\x02\x0b\x01\x12\x03X\ + \x04\x10\n\x0e\n\x07\x04\x01\x04\0\x02\x0b\x02\x12\x03X\x13\x15\n\"\n\ + \x06\x04\x01\x04\0\x02\x0c\x12\x03Z\x04\x14\x1a\x13\x20Field\x20type\x20\ + bytes.\n\n\x0e\n\x07\x04\x01\x04\0\x02\x0c\x01\x12\x03Z\x04\x0e\n\x0e\n\ + \x07\x04\x01\x04\0\x02\x0c\x02\x12\x03Z\x11\x13\n#\n\x06\x04\x01\x04\0\ + \x02\r\x12\x03\\\x04\x15\x1a\x14\x20Field\x20type\x20uint32.\n\n\x0e\n\ + \x07\x04\x01\x04\0\x02\r\x01\x12\x03\\\x04\x0f\n\x0e\n\x07\x04\x01\x04\0\ + \x02\r\x02\x12\x03\\\x12\x14\n!\n\x06\x04\x01\x04\0\x02\x0e\x12\x03^\x04\ + \x13\x1a\x12\x20Field\x20type\x20enum.\n\n\x0e\n\x07\x04\x01\x04\0\x02\ + \x0e\x01\x12\x03^\x04\r\n\x0e\n\x07\x04\x01\x04\0\x02\x0e\x02\x12\x03^\ + \x10\x12\n%\n\x06\x04\x01\x04\0\x02\x0f\x12\x03`\x04\x17\x1a\x16\x20Fiel\ + d\x20type\x20sfixed32.\n\n\x0e\n\x07\x04\x01\x04\0\x02\x0f\x01\x12\x03`\ + \x04\x11\n\x0e\n\x07\x04\x01\x04\0\x02\x0f\x02\x12\x03`\x14\x16\n%\n\x06\ + \x04\x01\x04\0\x02\x10\x12\x03b\x04\x17\x1a\x16\x20Field\x20type\x20sfix\ + ed64.\n\n\x0e\n\x07\x04\x01\x04\0\x02\x10\x01\x12\x03b\x04\x11\n\x0e\n\ + \x07\x04\x01\x04\0\x02\x10\x02\x12\x03b\x14\x16\n#\n\x06\x04\x01\x04\0\ + \x02\x11\x12\x03d\x04\x15\x1a\x14\x20Field\x20type\x20sint32.\n\n\x0e\n\ + \x07\x04\x01\x04\0\x02\x11\x01\x12\x03d\x04\x0f\n\x0e\n\x07\x04\x01\x04\ + \0\x02\x11\x02\x12\x03d\x12\x14\n#\n\x06\x04\x01\x04\0\x02\x12\x12\x03f\ + \x04\x15\x1a\x14\x20Field\x20type\x20sint64.\n\n\x0e\n\x07\x04\x01\x04\0\ + \x02\x12\x01\x12\x03f\x04\x0f\n\x0e\n\x07\x04\x01\x04\0\x02\x12\x02\x12\ + \x03f\x12\x14\nC\n\x04\x04\x01\x04\x01\x12\x04j\x02s\x03\x1a5\x20Whether\ + \x20a\x20field\x20is\x20optional,\x20required,\x20or\x20repeated.\n\n\ + \x0c\n\x05\x04\x01\x04\x01\x01\x12\x03j\x07\x12\n5\n\x06\x04\x01\x04\x01\ + \x02\0\x12\x03l\x04\x1c\x1a&\x20For\x20fields\x20with\x20unknown\x20card\ + inality.\n\n\x0e\n\x07\x04\x01\x04\x01\x02\0\x01\x12\x03l\x04\x17\n\x0e\ + \n\x07\x04\x01\x04\x01\x02\0\x02\x12\x03l\x1a\x1b\n%\n\x06\x04\x01\x04\ + \x01\x02\x01\x12\x03n\x04\x1d\x1a\x16\x20For\x20optional\x20fields.\n\n\ + \x0e\n\x07\x04\x01\x04\x01\x02\x01\x01\x12\x03n\x04\x18\n\x0e\n\x07\x04\ + \x01\x04\x01\x02\x01\x02\x12\x03n\x1b\x1c\n9\n\x06\x04\x01\x04\x01\x02\ + \x02\x12\x03p\x04\x1d\x1a*\x20For\x20required\x20fields.\x20Proto2\x20sy\ + ntax\x20only.\n\n\x0e\n\x07\x04\x01\x04\x01\x02\x02\x01\x12\x03p\x04\x18\ + \n\x0e\n\x07\x04\x01\x04\x01\x02\x02\x02\x12\x03p\x1b\x1c\n%\n\x06\x04\ + \x01\x04\x01\x02\x03\x12\x03r\x04\x1d\x1a\x16\x20For\x20repeated\x20fiel\ + ds.\n\n\x0e\n\x07\x04\x01\x04\x01\x02\x03\x01\x12\x03r\x04\x18\n\x0e\n\ + \x07\x04\x01\x04\x01\x02\x03\x02\x12\x03r\x1b\x1c\n\x1e\n\x04\x04\x01\ + \x02\0\x12\x03v\x02\x10\x1a\x11\x20The\x20field\x20type.\n\n\x0c\n\x05\ + \x04\x01\x02\0\x06\x12\x03v\x02\x06\n\x0c\n\x05\x04\x01\x02\0\x01\x12\ + \x03v\x07\x0b\n\x0c\n\x05\x04\x01\x02\0\x03\x12\x03v\x0e\x0f\n%\n\x04\ + \x04\x01\x02\x01\x12\x03x\x02\x1e\x1a\x18\x20The\x20field\x20cardinality\ + .\n\n\x0c\n\x05\x04\x01\x02\x01\x06\x12\x03x\x02\r\n\x0c\n\x05\x04\x01\ + \x02\x01\x01\x12\x03x\x0e\x19\n\x0c\n\x05\x04\x01\x02\x01\x03\x12\x03x\ + \x1c\x1d\n\x20\n\x04\x04\x01\x02\x02\x12\x03z\x02\x13\x1a\x13\x20The\x20\ + field\x20number.\n\n\x0c\n\x05\x04\x01\x02\x02\x05\x12\x03z\x02\x07\n\ + \x0c\n\x05\x04\x01\x02\x02\x01\x12\x03z\x08\x0e\n\x0c\n\x05\x04\x01\x02\ + \x02\x03\x12\x03z\x11\x12\n\x1e\n\x04\x04\x01\x02\x03\x12\x03|\x02\x12\ + \x1a\x11\x20The\x20field\x20name.\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\r\n\x0c\n\x05\ + \x04\x01\x02\x03\x03\x12\x03|\x10\x11\n\x96\x01\n\x04\x04\x01\x02\x04\ + \x12\x03\x7f\x02\x16\x1a\x88\x01\x20The\x20field\x20type\x20URL,\x20with\ + out\x20the\x20scheme,\x20for\x20message\x20or\x20enumeration\n\x20types.\ + \x20Example:\x20`\"type.googleapis.com/google.protobuf.Timestamp\"`.\n\n\ + \x0c\n\x05\x04\x01\x02\x04\x05\x12\x03\x7f\x02\x08\n\x0c\n\x05\x04\x01\ + \x02\x04\x01\x12\x03\x7f\t\x11\n\x0c\n\x05\x04\x01\x02\x04\x03\x12\x03\ + \x7f\x14\x15\n\xa5\x01\n\x04\x04\x01\x02\x05\x12\x04\x82\x01\x02\x18\x1a\ + \x96\x01\x20The\x20index\x20of\x20the\x20field\x20type\x20in\x20`Type.on\ + eofs`,\x20for\x20message\x20or\x20enumeration\n\x20types.\x20The\x20firs\ + t\x20type\x20has\x20index\x201;\x20zero\x20means\x20the\x20type\x20is\ + \x20not\x20in\x20the\x20list.\n\n\r\n\x05\x04\x01\x02\x05\x05\x12\x04\ + \x82\x01\x02\x07\n\r\n\x05\x04\x01\x02\x05\x01\x12\x04\x82\x01\x08\x13\n\ + \r\n\x05\x04\x01\x02\x05\x03\x12\x04\x82\x01\x16\x17\nF\n\x04\x04\x01\ + \x02\x06\x12\x04\x84\x01\x02\x12\x1a8\x20Whether\x20to\x20use\x20alterna\ + tive\x20packed\x20wire\x20representation.\n\n\r\n\x05\x04\x01\x02\x06\ + \x05\x12\x04\x84\x01\x02\x06\n\r\n\x05\x04\x01\x02\x06\x01\x12\x04\x84\ + \x01\x07\r\n\r\n\x05\x04\x01\x02\x06\x03\x12\x04\x84\x01\x10\x11\n,\n\ + \x04\x04\x01\x02\x07\x12\x04\x86\x01\x02\x1e\x1a\x1e\x20The\x20protocol\ + \x20buffer\x20options.\n\n\r\n\x05\x04\x01\x02\x07\x04\x12\x04\x86\x01\ + \x02\n\n\r\n\x05\x04\x01\x02\x07\x06\x12\x04\x86\x01\x0b\x11\n\r\n\x05\ + \x04\x01\x02\x07\x01\x12\x04\x86\x01\x12\x19\n\r\n\x05\x04\x01\x02\x07\ + \x03\x12\x04\x86\x01\x1c\x1d\n$\n\x04\x04\x01\x02\x08\x12\x04\x88\x01\ + \x02\x18\x1a\x16\x20The\x20field\x20JSON\x20name.\n\n\r\n\x05\x04\x01\ + \x02\x08\x05\x12\x04\x88\x01\x02\x08\n\r\n\x05\x04\x01\x02\x08\x01\x12\ + \x04\x88\x01\t\x12\n\r\n\x05\x04\x01\x02\x08\x03\x12\x04\x88\x01\x15\x17\ + \nX\n\x04\x04\x01\x02\t\x12\x04\x8a\x01\x02\x1c\x1aJ\x20The\x20string\ + \x20value\x20of\x20the\x20default\x20value\x20of\x20this\x20field.\x20Pr\ + oto2\x20syntax\x20only.\n\n\r\n\x05\x04\x01\x02\t\x05\x12\x04\x8a\x01\ + \x02\x08\n\r\n\x05\x04\x01\x02\t\x01\x12\x04\x8a\x01\t\x16\n\r\n\x05\x04\ + \x01\x02\t\x03\x12\x04\x8a\x01\x19\x1b\n%\n\x02\x04\x02\x12\x06\x8e\x01\ + \0\x99\x01\x01\x1a\x17\x20Enum\x20type\x20definition.\n\n\x0b\n\x03\x04\ + \x02\x01\x12\x04\x8e\x01\x08\x0c\n\x1f\n\x04\x04\x02\x02\0\x12\x04\x90\ + \x01\x02\x12\x1a\x11\x20Enum\x20type\x20name.\n\n\r\n\x05\x04\x02\x02\0\ + \x05\x12\x04\x90\x01\x02\x08\n\r\n\x05\x04\x02\x02\0\x01\x12\x04\x90\x01\ + \t\r\n\r\n\x05\x04\x02\x02\0\x03\x12\x04\x90\x01\x10\x11\n'\n\x04\x04\ + \x02\x02\x01\x12\x04\x92\x01\x02#\x1a\x19\x20Enum\x20value\x20definition\ + s.\n\n\r\n\x05\x04\x02\x02\x01\x04\x12\x04\x92\x01\x02\n\n\r\n\x05\x04\ + \x02\x02\x01\x06\x12\x04\x92\x01\x0b\x14\n\r\n\x05\x04\x02\x02\x01\x01\ + \x12\x04\x92\x01\x15\x1e\n\r\n\x05\x04\x02\x02\x01\x03\x12\x04\x92\x01!\ + \"\n(\n\x04\x04\x02\x02\x02\x12\x04\x94\x01\x02\x1e\x1a\x1a\x20Protocol\ + \x20buffer\x20options.\n\n\r\n\x05\x04\x02\x02\x02\x04\x12\x04\x94\x01\ + \x02\n\n\r\n\x05\x04\x02\x02\x02\x06\x12\x04\x94\x01\x0b\x11\n\r\n\x05\ + \x04\x02\x02\x02\x01\x12\x04\x94\x01\x12\x19\n\r\n\x05\x04\x02\x02\x02\ + \x03\x12\x04\x94\x01\x1c\x1d\n#\n\x04\x04\x02\x02\x03\x12\x04\x96\x01\ + \x02#\x1a\x15\x20The\x20source\x20context.\n\n\r\n\x05\x04\x02\x02\x03\ + \x06\x12\x04\x96\x01\x02\x0f\n\r\n\x05\x04\x02\x02\x03\x01\x12\x04\x96\ + \x01\x10\x1e\n\r\n\x05\x04\x02\x02\x03\x03\x12\x04\x96\x01!\"\n\"\n\x04\ + \x04\x02\x02\x04\x12\x04\x98\x01\x02\x14\x1a\x14\x20The\x20source\x20syn\ + tax.\n\n\r\n\x05\x04\x02\x02\x04\x06\x12\x04\x98\x01\x02\x08\n\r\n\x05\ + \x04\x02\x02\x04\x01\x12\x04\x98\x01\t\x0f\n\r\n\x05\x04\x02\x02\x04\x03\ + \x12\x04\x98\x01\x12\x13\n&\n\x02\x04\x03\x12\x06\x9c\x01\0\xa3\x01\x01\ + \x1a\x18\x20Enum\x20value\x20definition.\n\n\x0b\n\x03\x04\x03\x01\x12\ + \x04\x9c\x01\x08\x11\n\x20\n\x04\x04\x03\x02\0\x12\x04\x9e\x01\x02\x12\ + \x1a\x12\x20Enum\x20value\x20name.\n\n\r\n\x05\x04\x03\x02\0\x05\x12\x04\ + \x9e\x01\x02\x08\n\r\n\x05\x04\x03\x02\0\x01\x12\x04\x9e\x01\t\r\n\r\n\ + \x05\x04\x03\x02\0\x03\x12\x04\x9e\x01\x10\x11\n\"\n\x04\x04\x03\x02\x01\ + \x12\x04\xa0\x01\x02\x13\x1a\x14\x20Enum\x20value\x20number.\n\n\r\n\x05\ + \x04\x03\x02\x01\x05\x12\x04\xa0\x01\x02\x07\n\r\n\x05\x04\x03\x02\x01\ + \x01\x12\x04\xa0\x01\x08\x0e\n\r\n\x05\x04\x03\x02\x01\x03\x12\x04\xa0\ + \x01\x11\x12\n(\n\x04\x04\x03\x02\x02\x12\x04\xa2\x01\x02\x1e\x1a\x1a\ + \x20Protocol\x20buffer\x20options.\n\n\r\n\x05\x04\x03\x02\x02\x04\x12\ + \x04\xa2\x01\x02\n\n\r\n\x05\x04\x03\x02\x02\x06\x12\x04\xa2\x01\x0b\x11\ + \n\r\n\x05\x04\x03\x02\x02\x01\x12\x04\xa2\x01\x12\x19\n\r\n\x05\x04\x03\ + \x02\x02\x03\x12\x04\xa2\x01\x1c\x1d\ng\n\x02\x04\x04\x12\x06\xa7\x01\0\ + \xb2\x01\x01\x1aY\x20A\x20protocol\x20buffer\x20option,\x20which\x20can\ + \x20be\x20attached\x20to\x20a\x20message,\x20field,\n\x20enumeration,\ + \x20etc.\n\n\x0b\n\x03\x04\x04\x01\x12\x04\xa7\x01\x08\x0e\n\xfc\x01\n\ + \x04\x04\x04\x02\0\x12\x04\xac\x01\x02\x12\x1a\xed\x01\x20The\x20option'\ + s\x20name.\x20For\x20protobuf\x20built-in\x20options\x20(options\x20defi\ + ned\x20in\n\x20descriptor.proto),\x20this\x20is\x20the\x20short\x20name.\ + \x20For\x20example,\x20`\"map_entry\"`.\n\x20For\x20custom\x20options,\ + \x20it\x20should\x20be\x20the\x20fully-qualified\x20name.\x20For\x20exam\ + ple,\n\x20`\"google.api.http\"`.\n\n\r\n\x05\x04\x04\x02\0\x05\x12\x04\ + \xac\x01\x02\x08\n\r\n\x05\x04\x04\x02\0\x01\x12\x04\xac\x01\t\r\n\r\n\ + \x05\x04\x04\x02\0\x03\x12\x04\xac\x01\x10\x11\n\xa0\x02\n\x04\x04\x04\ + \x02\x01\x12\x04\xb1\x01\x02\x10\x1a\x91\x02\x20The\x20option's\x20value\ + \x20packed\x20in\x20an\x20Any\x20message.\x20If\x20the\x20value\x20is\ + \x20a\x20primitive,\n\x20the\x20corresponding\x20wrapper\x20type\x20defi\ + ned\x20in\x20google/protobuf/wrappers.proto\n\x20should\x20be\x20used.\ + \x20If\x20the\x20value\x20is\x20an\x20enum,\x20it\x20should\x20be\x20sto\ + red\x20as\x20an\x20int32\n\x20value\x20using\x20the\x20google.protobuf.I\ + nt32Value\x20type.\n\n\r\n\x05\x04\x04\x02\x01\x06\x12\x04\xb1\x01\x02\ + \x05\n\r\n\x05\x04\x04\x02\x01\x01\x12\x04\xb1\x01\x06\x0b\n\r\n\x05\x04\ + \x04\x02\x01\x03\x12\x04\xb1\x01\x0e\x0f\nI\n\x02\x05\0\x12\x06\xb5\x01\ + \0\xba\x01\x01\x1a;\x20The\x20syntax\x20in\x20which\x20a\x20protocol\x20\ + buffer\x20element\x20is\x20defined.\n\n\x0b\n\x03\x05\0\x01\x12\x04\xb5\ + \x01\x05\x0b\n\x20\n\x04\x05\0\x02\0\x12\x04\xb7\x01\x02\x14\x1a\x12\x20\ + Syntax\x20`proto2`.\n\n\r\n\x05\x05\0\x02\0\x01\x12\x04\xb7\x01\x02\x0f\ + \n\r\n\x05\x05\0\x02\0\x02\x12\x04\xb7\x01\x12\x13\n\x20\n\x04\x05\0\x02\ + \x01\x12\x04\xb9\x01\x02\x14\x1a\x12\x20Syntax\x20`proto3`.\n\n\r\n\x05\ + \x05\0\x02\x01\x01\x12\x04\xb9\x01\x02\x0f\n\r\n\x05\x05\0\x02\x01\x02\ + \x12\x04\xb9\x01\x12\x13b\x06proto3\ +"; + +static file_descriptor_proto_lazy: crate::rt::LazyV2<crate::descriptor::FileDescriptorProto> = crate::rt::LazyV2::INIT; + +fn parse_descriptor_proto() -> crate::descriptor::FileDescriptorProto { + crate::Message::parse_from_bytes(file_descriptor_proto_data).unwrap() +} + +pub fn file_descriptor_proto() -> &'static crate::descriptor::FileDescriptorProto { + file_descriptor_proto_lazy.get(|| { + parse_descriptor_proto() + }) +} diff --git a/2.27.1/src/well_known_types/wrappers.rs b/2.27.1/src/well_known_types/wrappers.rs new file mode 100644 index 0000000..4e056c7 --- /dev/null +++ b/2.27.1/src/well_known_types/wrappers.rs @@ -0,0 +1,1562 @@ +// This file is generated by rust-protobuf 2.26.0. Do not edit +// @generated + +// https://github.com/rust-lang/rust-clippy/issues/702 +#![allow(unknown_lints)] +#![allow(clippy::all)] + +#![allow(unused_attributes)] +#![cfg_attr(rustfmt, rustfmt::skip)] + +#![allow(box_pointers)] +#![allow(dead_code)] +#![allow(missing_docs)] +#![allow(non_camel_case_types)] +#![allow(non_snake_case)] +#![allow(non_upper_case_globals)] +#![allow(trivial_casts)] +#![allow(unused_imports)] +#![allow(unused_results)] +//! Generated file from `google/protobuf/wrappers.proto` + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct DoubleValue { + // message fields + pub value: f64, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a DoubleValue { + fn default() -> &'a DoubleValue { + <DoubleValue as crate::Message>::default_instance() + } +} + +impl DoubleValue { + pub fn new() -> DoubleValue { + ::std::default::Default::default() + } + + // double value = 1; + + + pub fn get_value(&self) -> f64 { + self.value + } + pub fn clear_value(&mut self) { + self.value = 0.; + } + + // Param is passed by value, moved + pub fn set_value(&mut self, v: f64) { + self.value = v; + } +} + +impl crate::Message for DoubleValue { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + if wire_type != crate::wire_format::WireTypeFixed64 { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_double()?; + self.value = tmp; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if self.value != 0. { + my_size += 9; + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if self.value != 0. { + os.write_double(1, self.value)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> DoubleValue { + DoubleValue::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeDouble>( + "value", + |m: &DoubleValue| { &m.value }, + |m: &mut DoubleValue| { &mut m.value }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<DoubleValue>( + "DoubleValue", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static DoubleValue { + static instance: crate::rt::LazyV2<DoubleValue> = crate::rt::LazyV2::INIT; + instance.get(DoubleValue::new) + } +} + +impl crate::Clear for DoubleValue { + fn clear(&mut self) { + self.value = 0.; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for DoubleValue { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for DoubleValue { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct FloatValue { + // message fields + pub value: f32, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a FloatValue { + fn default() -> &'a FloatValue { + <FloatValue as crate::Message>::default_instance() + } +} + +impl FloatValue { + pub fn new() -> FloatValue { + ::std::default::Default::default() + } + + // float value = 1; + + + pub fn get_value(&self) -> f32 { + self.value + } + pub fn clear_value(&mut self) { + self.value = 0.; + } + + // Param is passed by value, moved + pub fn set_value(&mut self, v: f32) { + self.value = v; + } +} + +impl crate::Message for FloatValue { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + if wire_type != crate::wire_format::WireTypeFixed32 { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_float()?; + self.value = tmp; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if self.value != 0. { + my_size += 5; + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if self.value != 0. { + os.write_float(1, self.value)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> FloatValue { + FloatValue::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeFloat>( + "value", + |m: &FloatValue| { &m.value }, + |m: &mut FloatValue| { &mut m.value }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<FloatValue>( + "FloatValue", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static FloatValue { + static instance: crate::rt::LazyV2<FloatValue> = crate::rt::LazyV2::INIT; + instance.get(FloatValue::new) + } +} + +impl crate::Clear for FloatValue { + fn clear(&mut self) { + self.value = 0.; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for FloatValue { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for FloatValue { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct Int64Value { + // message fields + pub value: i64, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a Int64Value { + fn default() -> &'a Int64Value { + <Int64Value as crate::Message>::default_instance() + } +} + +impl Int64Value { + pub fn new() -> Int64Value { + ::std::default::Default::default() + } + + // int64 value = 1; + + + pub fn get_value(&self) -> i64 { + self.value + } + pub fn clear_value(&mut self) { + self.value = 0; + } + + // Param is passed by value, moved + pub fn set_value(&mut self, v: i64) { + self.value = v; + } +} + +impl crate::Message for Int64Value { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int64()?; + self.value = tmp; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if self.value != 0 { + my_size += crate::rt::value_size(1, self.value, crate::wire_format::WireTypeVarint); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if self.value != 0 { + os.write_int64(1, self.value)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> Int64Value { + Int64Value::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeInt64>( + "value", + |m: &Int64Value| { &m.value }, + |m: &mut Int64Value| { &mut m.value }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<Int64Value>( + "Int64Value", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static Int64Value { + static instance: crate::rt::LazyV2<Int64Value> = crate::rt::LazyV2::INIT; + instance.get(Int64Value::new) + } +} + +impl crate::Clear for Int64Value { + fn clear(&mut self) { + self.value = 0; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for Int64Value { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for Int64Value { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct UInt64Value { + // message fields + pub value: u64, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a UInt64Value { + fn default() -> &'a UInt64Value { + <UInt64Value as crate::Message>::default_instance() + } +} + +impl UInt64Value { + pub fn new() -> UInt64Value { + ::std::default::Default::default() + } + + // uint64 value = 1; + + + pub fn get_value(&self) -> u64 { + self.value + } + pub fn clear_value(&mut self) { + self.value = 0; + } + + // Param is passed by value, moved + pub fn set_value(&mut self, v: u64) { + self.value = v; + } +} + +impl crate::Message for UInt64Value { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_uint64()?; + self.value = tmp; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if self.value != 0 { + my_size += crate::rt::value_size(1, self.value, crate::wire_format::WireTypeVarint); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if self.value != 0 { + os.write_uint64(1, self.value)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> UInt64Value { + UInt64Value::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeUint64>( + "value", + |m: &UInt64Value| { &m.value }, + |m: &mut UInt64Value| { &mut m.value }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<UInt64Value>( + "UInt64Value", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static UInt64Value { + static instance: crate::rt::LazyV2<UInt64Value> = crate::rt::LazyV2::INIT; + instance.get(UInt64Value::new) + } +} + +impl crate::Clear for UInt64Value { + fn clear(&mut self) { + self.value = 0; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for UInt64Value { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for UInt64Value { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct Int32Value { + // message fields + pub value: i32, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a Int32Value { + fn default() -> &'a Int32Value { + <Int32Value as crate::Message>::default_instance() + } +} + +impl Int32Value { + pub fn new() -> Int32Value { + ::std::default::Default::default() + } + + // int32 value = 1; + + + pub fn get_value(&self) -> i32 { + self.value + } + pub fn clear_value(&mut self) { + self.value = 0; + } + + // Param is passed by value, moved + pub fn set_value(&mut self, v: i32) { + self.value = v; + } +} + +impl crate::Message for Int32Value { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_int32()?; + self.value = tmp; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if self.value != 0 { + my_size += crate::rt::value_size(1, self.value, crate::wire_format::WireTypeVarint); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if self.value != 0 { + os.write_int32(1, self.value)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> Int32Value { + Int32Value::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeInt32>( + "value", + |m: &Int32Value| { &m.value }, + |m: &mut Int32Value| { &mut m.value }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<Int32Value>( + "Int32Value", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static Int32Value { + static instance: crate::rt::LazyV2<Int32Value> = crate::rt::LazyV2::INIT; + instance.get(Int32Value::new) + } +} + +impl crate::Clear for Int32Value { + fn clear(&mut self) { + self.value = 0; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for Int32Value { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for Int32Value { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct UInt32Value { + // message fields + pub value: u32, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a UInt32Value { + fn default() -> &'a UInt32Value { + <UInt32Value as crate::Message>::default_instance() + } +} + +impl UInt32Value { + pub fn new() -> UInt32Value { + ::std::default::Default::default() + } + + // uint32 value = 1; + + + pub fn get_value(&self) -> u32 { + self.value + } + pub fn clear_value(&mut self) { + self.value = 0; + } + + // Param is passed by value, moved + pub fn set_value(&mut self, v: u32) { + self.value = v; + } +} + +impl crate::Message for UInt32Value { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_uint32()?; + self.value = tmp; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if self.value != 0 { + my_size += crate::rt::value_size(1, self.value, crate::wire_format::WireTypeVarint); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if self.value != 0 { + os.write_uint32(1, self.value)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> UInt32Value { + UInt32Value::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeUint32>( + "value", + |m: &UInt32Value| { &m.value }, + |m: &mut UInt32Value| { &mut m.value }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<UInt32Value>( + "UInt32Value", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static UInt32Value { + static instance: crate::rt::LazyV2<UInt32Value> = crate::rt::LazyV2::INIT; + instance.get(UInt32Value::new) + } +} + +impl crate::Clear for UInt32Value { + fn clear(&mut self) { + self.value = 0; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for UInt32Value { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for UInt32Value { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct BoolValue { + // message fields + pub value: bool, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a BoolValue { + fn default() -> &'a BoolValue { + <BoolValue as crate::Message>::default_instance() + } +} + +impl BoolValue { + pub fn new() -> BoolValue { + ::std::default::Default::default() + } + + // bool value = 1; + + + pub fn get_value(&self) -> bool { + self.value + } + pub fn clear_value(&mut self) { + self.value = false; + } + + // Param is passed by value, moved + pub fn set_value(&mut self, v: bool) { + self.value = v; + } +} + +impl crate::Message for BoolValue { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + if wire_type != crate::wire_format::WireTypeVarint { + return ::std::result::Result::Err(crate::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.value = tmp; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if self.value != false { + my_size += 2; + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if self.value != false { + os.write_bool(1, self.value)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> BoolValue { + BoolValue::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeBool>( + "value", + |m: &BoolValue| { &m.value }, + |m: &mut BoolValue| { &mut m.value }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<BoolValue>( + "BoolValue", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static BoolValue { + static instance: crate::rt::LazyV2<BoolValue> = crate::rt::LazyV2::INIT; + instance.get(BoolValue::new) + } +} + +impl crate::Clear for BoolValue { + fn clear(&mut self) { + self.value = false; + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for BoolValue { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for BoolValue { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct StringValue { + // message fields + pub value: ::std::string::String, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a StringValue { + fn default() -> &'a StringValue { + <StringValue as crate::Message>::default_instance() + } +} + +impl StringValue { + pub fn new() -> StringValue { + ::std::default::Default::default() + } + + // string value = 1; + + + pub fn get_value(&self) -> &str { + &self.value + } + pub fn clear_value(&mut self) { + self.value.clear(); + } + + // Param is passed by value, moved + pub fn set_value(&mut self, v: ::std::string::String) { + self.value = 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::string::String { + &mut self.value + } + + // Take field + pub fn take_value(&mut self) -> ::std::string::String { + ::std::mem::replace(&mut self.value, ::std::string::String::new()) + } +} + +impl crate::Message for StringValue { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_proto3_string_into(wire_type, is, &mut self.value)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if !self.value.is_empty() { + my_size += crate::rt::string_size(1, &self.value); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if !self.value.is_empty() { + os.write_string(1, &self.value)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> StringValue { + StringValue::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeString>( + "value", + |m: &StringValue| { &m.value }, + |m: &mut StringValue| { &mut m.value }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<StringValue>( + "StringValue", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static StringValue { + static instance: crate::rt::LazyV2<StringValue> = crate::rt::LazyV2::INIT; + instance.get(StringValue::new) + } +} + +impl crate::Clear for StringValue { + fn clear(&mut self) { + self.value.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for StringValue { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for StringValue { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +#[derive(PartialEq,Clone,Default)] +#[cfg_attr(feature = "with-serde", derive(::serde::Serialize, ::serde::Deserialize))] +pub struct BytesValue { + // message fields + pub value: ::std::vec::Vec<u8>, + // special fields + #[cfg_attr(feature = "with-serde", serde(skip))] + pub unknown_fields: crate::UnknownFields, + #[cfg_attr(feature = "with-serde", serde(skip))] + pub cached_size: crate::CachedSize, +} + +impl<'a> ::std::default::Default for &'a BytesValue { + fn default() -> &'a BytesValue { + <BytesValue as crate::Message>::default_instance() + } +} + +impl BytesValue { + pub fn new() -> BytesValue { + ::std::default::Default::default() + } + + // bytes value = 1; + + + pub fn get_value(&self) -> &[u8] { + &self.value + } + pub fn clear_value(&mut self) { + self.value.clear(); + } + + // Param is passed by value, moved + pub fn set_value(&mut self, v: ::std::vec::Vec<u8>) { + self.value = 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> { + &mut self.value + } + + // Take field + pub fn take_value(&mut self) -> ::std::vec::Vec<u8> { + ::std::mem::replace(&mut self.value, ::std::vec::Vec::new()) + } +} + +impl crate::Message for BytesValue { + fn is_initialized(&self) -> bool { + true + } + + fn merge_from(&mut self, is: &mut crate::CodedInputStream<'_>) -> crate::ProtobufResult<()> { + while !is.eof()? { + let (field_number, wire_type) = is.read_tag_unpack()?; + match field_number { + 1 => { + crate::rt::read_singular_proto3_bytes_into(wire_type, is, &mut self.value)?; + }, + _ => { + crate::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; + }, + }; + } + ::std::result::Result::Ok(()) + } + + // Compute sizes of nested messages + #[allow(unused_variables)] + fn compute_size(&self) -> u32 { + let mut my_size = 0; + if !self.value.is_empty() { + my_size += crate::rt::bytes_size(1, &self.value); + } + my_size += crate::rt::unknown_fields_size(self.get_unknown_fields()); + self.cached_size.set(my_size); + my_size + } + + fn write_to_with_cached_sizes(&self, os: &mut crate::CodedOutputStream<'_>) -> crate::ProtobufResult<()> { + if !self.value.is_empty() { + os.write_bytes(1, &self.value)?; + } + os.write_unknown_fields(self.get_unknown_fields())?; + ::std::result::Result::Ok(()) + } + + fn get_cached_size(&self) -> u32 { + self.cached_size.get() + } + + fn get_unknown_fields(&self) -> &crate::UnknownFields { + &self.unknown_fields + } + + fn mut_unknown_fields(&mut self) -> &mut crate::UnknownFields { + &mut self.unknown_fields + } + + fn as_any(&self) -> &dyn (::std::any::Any) { + self as &dyn (::std::any::Any) + } + fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { + self as &mut dyn (::std::any::Any) + } + fn into_any(self: ::std::boxed::Box<Self>) -> ::std::boxed::Box<dyn (::std::any::Any)> { + self + } + + fn descriptor(&self) -> &'static crate::reflect::MessageDescriptor { + Self::descriptor_static() + } + + fn new() -> BytesValue { + BytesValue::new() + } + + fn descriptor_static() -> &'static crate::reflect::MessageDescriptor { + static descriptor: crate::rt::LazyV2<crate::reflect::MessageDescriptor> = crate::rt::LazyV2::INIT; + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(crate::reflect::accessor::make_simple_field_accessor::<_, crate::types::ProtobufTypeBytes>( + "value", + |m: &BytesValue| { &m.value }, + |m: &mut BytesValue| { &mut m.value }, + )); + crate::reflect::MessageDescriptor::new_pb_name::<BytesValue>( + "BytesValue", + fields, + file_descriptor_proto() + ) + }) + } + + fn default_instance() -> &'static BytesValue { + static instance: crate::rt::LazyV2<BytesValue> = crate::rt::LazyV2::INIT; + instance.get(BytesValue::new) + } +} + +impl crate::Clear for BytesValue { + fn clear(&mut self) { + self.value.clear(); + self.unknown_fields.clear(); + } +} + +impl ::std::fmt::Debug for BytesValue { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + crate::text_format::fmt(self, f) + } +} + +impl crate::reflect::ProtobufValue for BytesValue { + fn as_ref(&self) -> crate::reflect::ReflectValueRef { + crate::reflect::ReflectValueRef::Message(self) + } +} + +static file_descriptor_proto_data: &'static [u8] = b"\ + \n\x1egoogle/protobuf/wrappers.proto\x12\x0fgoogle.protobuf\"#\n\x0bDoub\ + leValue\x12\x14\n\x05value\x18\x01\x20\x01(\x01R\x05value\"\"\n\nFloatVa\ + lue\x12\x14\n\x05value\x18\x01\x20\x01(\x02R\x05value\"\"\n\nInt64Value\ + \x12\x14\n\x05value\x18\x01\x20\x01(\x03R\x05value\"#\n\x0bUInt64Value\ + \x12\x14\n\x05value\x18\x01\x20\x01(\x04R\x05value\"\"\n\nInt32Value\x12\ + \x14\n\x05value\x18\x01\x20\x01(\x05R\x05value\"#\n\x0bUInt32Value\x12\ + \x14\n\x05value\x18\x01\x20\x01(\rR\x05value\"!\n\tBoolValue\x12\x14\n\ + \x05value\x18\x01\x20\x01(\x08R\x05value\"#\n\x0bStringValue\x12\x14\n\ + \x05value\x18\x01\x20\x01(\tR\x05value\"\"\n\nBytesValue\x12\x14\n\x05va\ + lue\x18\x01\x20\x01(\x0cR\x05valueB\x83\x01\n\x13com.google.protobufB\rW\ + rappersProtoP\x01Z1google.golang.org/protobuf/types/known/wrapperspb\xf8\ + \x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesJ\xc6\ + \x1f\n\x06\x12\x04(\0z\x01\n\xdb\x10\n\x01\x0c\x12\x03(\0\x122\xc1\x0c\ + \x20Protocol\x20Buffers\x20-\x20Google's\x20data\x20interchange\x20forma\ + t\n\x20Copyright\x202008\x20Google\x20Inc.\x20\x20All\x20rights\x20reser\ + ved.\n\x20https://developers.google.com/protocol-buffers/\n\n\x20Redistr\ + ibution\x20and\x20use\x20in\x20source\x20and\x20binary\x20forms,\x20with\ + \x20or\x20without\n\x20modification,\x20are\x20permitted\x20provided\x20\ + that\x20the\x20following\x20conditions\x20are\n\x20met:\n\n\x20\x20\x20\ + \x20\x20*\x20Redistributions\x20of\x20source\x20code\x20must\x20retain\ + \x20the\x20above\x20copyright\n\x20notice,\x20this\x20list\x20of\x20cond\ + itions\x20and\x20the\x20following\x20disclaimer.\n\x20\x20\x20\x20\x20*\ + \x20Redistributions\x20in\x20binary\x20form\x20must\x20reproduce\x20the\ + \x20above\n\x20copyright\x20notice,\x20this\x20list\x20of\x20conditions\ + \x20and\x20the\x20following\x20disclaimer\n\x20in\x20the\x20documentatio\ + n\x20and/or\x20other\x20materials\x20provided\x20with\x20the\n\x20distri\ + bution.\n\x20\x20\x20\x20\x20*\x20Neither\x20the\x20name\x20of\x20Google\ + \x20Inc.\x20nor\x20the\x20names\x20of\x20its\n\x20contributors\x20may\ + \x20be\x20used\x20to\x20endorse\x20or\x20promote\x20products\x20derived\ + \x20from\n\x20this\x20software\x20without\x20specific\x20prior\x20writte\ + n\x20permission.\n\n\x20THIS\x20SOFTWARE\x20IS\x20PROVIDED\x20BY\x20THE\ + \x20COPYRIGHT\x20HOLDERS\x20AND\x20CONTRIBUTORS\n\x20\"AS\x20IS\"\x20AND\ + \x20ANY\x20EXPRESS\x20OR\x20IMPLIED\x20WARRANTIES,\x20INCLUDING,\x20BUT\ + \x20NOT\n\x20LIMITED\x20TO,\x20THE\x20IMPLIED\x20WARRANTIES\x20OF\x20MER\ + CHANTABILITY\x20AND\x20FITNESS\x20FOR\n\x20A\x20PARTICULAR\x20PURPOSE\ + \x20ARE\x20DISCLAIMED.\x20IN\x20NO\x20EVENT\x20SHALL\x20THE\x20COPYRIGHT\ + \n\x20OWNER\x20OR\x20CONTRIBUTORS\x20BE\x20LIABLE\x20FOR\x20ANY\x20DIREC\ + T,\x20INDIRECT,\x20INCIDENTAL,\n\x20SPECIAL,\x20EXEMPLARY,\x20OR\x20CONS\ + EQUENTIAL\x20DAMAGES\x20(INCLUDING,\x20BUT\x20NOT\n\x20LIMITED\x20TO,\ + \x20PROCUREMENT\x20OF\x20SUBSTITUTE\x20GOODS\x20OR\x20SERVICES;\x20LOSS\ + \x20OF\x20USE,\n\x20DATA,\x20OR\x20PROFITS;\x20OR\x20BUSINESS\x20INTERRU\ + PTION)\x20HOWEVER\x20CAUSED\x20AND\x20ON\x20ANY\n\x20THEORY\x20OF\x20LIA\ + BILITY,\x20WHETHER\x20IN\x20CONTRACT,\x20STRICT\x20LIABILITY,\x20OR\x20T\ + ORT\n\x20(INCLUDING\x20NEGLIGENCE\x20OR\x20OTHERWISE)\x20ARISING\x20IN\ + \x20ANY\x20WAY\x20OUT\x20OF\x20THE\x20USE\n\x20OF\x20THIS\x20SOFTWARE,\ + \x20EVEN\x20IF\x20ADVISED\x20OF\x20THE\x20POSSIBILITY\x20OF\x20SUCH\x20D\ + AMAGE.\n2\x8c\x04\x20Wrappers\x20for\x20primitive\x20(non-message)\x20ty\ + pes.\x20These\x20types\x20are\x20useful\n\x20for\x20embedding\x20primiti\ + ves\x20in\x20the\x20`google.protobuf.Any`\x20type\x20and\x20for\x20place\ + s\n\x20where\x20we\x20need\x20to\x20distinguish\x20between\x20the\x20abs\ + ence\x20of\x20a\x20primitive\n\x20typed\x20field\x20and\x20its\x20defaul\ + t\x20value.\n\n\x20These\x20wrappers\x20have\x20no\x20meaningful\x20use\ + \x20within\x20repeated\x20fields\x20as\x20they\x20lack\n\x20the\x20abili\ + ty\x20to\x20detect\x20presence\x20on\x20individual\x20elements.\n\x20The\ + se\x20wrappers\x20have\x20no\x20meaningful\x20use\x20within\x20a\x20map\ + \x20or\x20a\x20oneof\x20since\n\x20individual\x20entries\x20of\x20a\x20m\ + ap\x20or\x20fields\x20of\x20a\x20oneof\x20can\x20already\x20detect\x20pr\ + esence.\n\n\x08\n\x01\x02\x12\x03*\0\x18\n\x08\n\x01\x08\x12\x03,\0;\n\t\ + \n\x02\x08%\x12\x03,\0;\n\x08\n\x01\x08\x12\x03-\0\x1f\n\t\n\x02\x08\x1f\ + \x12\x03-\0\x1f\n\x08\n\x01\x08\x12\x03.\0H\n\t\n\x02\x08\x0b\x12\x03.\0\ + H\n\x08\n\x01\x08\x12\x03/\0,\n\t\n\x02\x08\x01\x12\x03/\0,\n\x08\n\x01\ + \x08\x12\x030\0.\n\t\n\x02\x08\x08\x12\x030\0.\n\x08\n\x01\x08\x12\x031\ + \0\"\n\t\n\x02\x08\n\x12\x031\0\"\n\x08\n\x01\x08\x12\x032\0!\n\t\n\x02\ + \x08$\x12\x032\0!\ng\n\x02\x04\0\x12\x047\0:\x01\x1a[\x20Wrapper\x20mess\ + age\x20for\x20`double`.\n\n\x20The\x20JSON\x20representation\x20for\x20`\ + DoubleValue`\x20is\x20JSON\x20number.\n\n\n\n\x03\x04\0\x01\x12\x037\x08\ + \x13\n\x20\n\x04\x04\0\x02\0\x12\x039\x02\x13\x1a\x13\x20The\x20double\ + \x20value.\n\n\x0c\n\x05\x04\0\x02\0\x05\x12\x039\x02\x08\n\x0c\n\x05\ + \x04\0\x02\0\x01\x12\x039\t\x0e\n\x0c\n\x05\x04\0\x02\0\x03\x12\x039\x11\ + \x12\ne\n\x02\x04\x01\x12\x04?\0B\x01\x1aY\x20Wrapper\x20message\x20for\ + \x20`float`.\n\n\x20The\x20JSON\x20representation\x20for\x20`FloatValue`\ + \x20is\x20JSON\x20number.\n\n\n\n\x03\x04\x01\x01\x12\x03?\x08\x12\n\x1f\ + \n\x04\x04\x01\x02\0\x12\x03A\x02\x12\x1a\x12\x20The\x20float\x20value.\ + \n\n\x0c\n\x05\x04\x01\x02\0\x05\x12\x03A\x02\x07\n\x0c\n\x05\x04\x01\ + \x02\0\x01\x12\x03A\x08\r\n\x0c\n\x05\x04\x01\x02\0\x03\x12\x03A\x10\x11\ + \ne\n\x02\x04\x02\x12\x04G\0J\x01\x1aY\x20Wrapper\x20message\x20for\x20`\ + int64`.\n\n\x20The\x20JSON\x20representation\x20for\x20`Int64Value`\x20i\ + s\x20JSON\x20string.\n\n\n\n\x03\x04\x02\x01\x12\x03G\x08\x12\n\x1f\n\ + \x04\x04\x02\x02\0\x12\x03I\x02\x12\x1a\x12\x20The\x20int64\x20value.\n\ + \n\x0c\n\x05\x04\x02\x02\0\x05\x12\x03I\x02\x07\n\x0c\n\x05\x04\x02\x02\ + \0\x01\x12\x03I\x08\r\n\x0c\n\x05\x04\x02\x02\0\x03\x12\x03I\x10\x11\ng\ + \n\x02\x04\x03\x12\x04O\0R\x01\x1a[\x20Wrapper\x20message\x20for\x20`uin\ + t64`.\n\n\x20The\x20JSON\x20representation\x20for\x20`UInt64Value`\x20is\ + \x20JSON\x20string.\n\n\n\n\x03\x04\x03\x01\x12\x03O\x08\x13\n\x20\n\x04\ + \x04\x03\x02\0\x12\x03Q\x02\x13\x1a\x13\x20The\x20uint64\x20value.\n\n\ + \x0c\n\x05\x04\x03\x02\0\x05\x12\x03Q\x02\x08\n\x0c\n\x05\x04\x03\x02\0\ + \x01\x12\x03Q\t\x0e\n\x0c\n\x05\x04\x03\x02\0\x03\x12\x03Q\x11\x12\ne\n\ + \x02\x04\x04\x12\x04W\0Z\x01\x1aY\x20Wrapper\x20message\x20for\x20`int32\ + `.\n\n\x20The\x20JSON\x20representation\x20for\x20`Int32Value`\x20is\x20\ + JSON\x20number.\n\n\n\n\x03\x04\x04\x01\x12\x03W\x08\x12\n\x1f\n\x04\x04\ + \x04\x02\0\x12\x03Y\x02\x12\x1a\x12\x20The\x20int32\x20value.\n\n\x0c\n\ + \x05\x04\x04\x02\0\x05\x12\x03Y\x02\x07\n\x0c\n\x05\x04\x04\x02\0\x01\ + \x12\x03Y\x08\r\n\x0c\n\x05\x04\x04\x02\0\x03\x12\x03Y\x10\x11\ng\n\x02\ + \x04\x05\x12\x04_\0b\x01\x1a[\x20Wrapper\x20message\x20for\x20`uint32`.\ + \n\n\x20The\x20JSON\x20representation\x20for\x20`UInt32Value`\x20is\x20J\ + SON\x20number.\n\n\n\n\x03\x04\x05\x01\x12\x03_\x08\x13\n\x20\n\x04\x04\ + \x05\x02\0\x12\x03a\x02\x13\x1a\x13\x20The\x20uint32\x20value.\n\n\x0c\n\ + \x05\x04\x05\x02\0\x05\x12\x03a\x02\x08\n\x0c\n\x05\x04\x05\x02\0\x01\ + \x12\x03a\t\x0e\n\x0c\n\x05\x04\x05\x02\0\x03\x12\x03a\x11\x12\no\n\x02\ + \x04\x06\x12\x04g\0j\x01\x1ac\x20Wrapper\x20message\x20for\x20`bool`.\n\ + \n\x20The\x20JSON\x20representation\x20for\x20`BoolValue`\x20is\x20JSON\ + \x20`true`\x20and\x20`false`.\n\n\n\n\x03\x04\x06\x01\x12\x03g\x08\x11\n\ + \x1e\n\x04\x04\x06\x02\0\x12\x03i\x02\x11\x1a\x11\x20The\x20bool\x20valu\ + e.\n\n\x0c\n\x05\x04\x06\x02\0\x05\x12\x03i\x02\x06\n\x0c\n\x05\x04\x06\ + \x02\0\x01\x12\x03i\x07\x0c\n\x0c\n\x05\x04\x06\x02\0\x03\x12\x03i\x0f\ + \x10\ng\n\x02\x04\x07\x12\x04o\0r\x01\x1a[\x20Wrapper\x20message\x20for\ + \x20`string`.\n\n\x20The\x20JSON\x20representation\x20for\x20`StringValu\ + e`\x20is\x20JSON\x20string.\n\n\n\n\x03\x04\x07\x01\x12\x03o\x08\x13\n\ + \x20\n\x04\x04\x07\x02\0\x12\x03q\x02\x13\x1a\x13\x20The\x20string\x20va\ + lue.\n\n\x0c\n\x05\x04\x07\x02\0\x05\x12\x03q\x02\x08\n\x0c\n\x05\x04\ + \x07\x02\0\x01\x12\x03q\t\x0e\n\x0c\n\x05\x04\x07\x02\0\x03\x12\x03q\x11\ + \x12\ne\n\x02\x04\x08\x12\x04w\0z\x01\x1aY\x20Wrapper\x20message\x20for\ + \x20`bytes`.\n\n\x20The\x20JSON\x20representation\x20for\x20`BytesValue`\ + \x20is\x20JSON\x20string.\n\n\n\n\x03\x04\x08\x01\x12\x03w\x08\x12\n\x1f\ + \n\x04\x04\x08\x02\0\x12\x03y\x02\x12\x1a\x12\x20The\x20bytes\x20value.\ + \n\n\x0c\n\x05\x04\x08\x02\0\x05\x12\x03y\x02\x07\n\x0c\n\x05\x04\x08\ + \x02\0\x01\x12\x03y\x08\r\n\x0c\n\x05\x04\x08\x02\0\x03\x12\x03y\x10\x11\ + b\x06proto3\ +"; + +static file_descriptor_proto_lazy: crate::rt::LazyV2<crate::descriptor::FileDescriptorProto> = crate::rt::LazyV2::INIT; + +fn parse_descriptor_proto() -> crate::descriptor::FileDescriptorProto { + crate::Message::parse_from_bytes(file_descriptor_proto_data).unwrap() +} + +pub fn file_descriptor_proto() -> &'static crate::descriptor::FileDescriptorProto { + file_descriptor_proto_lazy.get(|| { + parse_descriptor_proto() + }) +} diff --git a/2.27.1/src/well_known_types_util/any.rs b/2.27.1/src/well_known_types_util/any.rs new file mode 100644 index 0000000..7441e17 --- /dev/null +++ b/2.27.1/src/well_known_types_util/any.rs @@ -0,0 +1,113 @@ +use crate::reflect::MessageDescriptor; +use crate::well_known_types::Any; +use crate::Message; +use crate::ProtobufResult; + +impl Any { + fn type_url(type_url_prefix: &str, descriptor: &MessageDescriptor) -> String { + format!("{}/{}", type_url_prefix, descriptor.full_name()) + } + + fn get_type_name_from_type_url(type_url: &str) -> Option<&str> { + match type_url.rfind('/') { + Some(i) => Some(&type_url[i + 1..]), + None => None, + } + } + + /// Pack any message into `well_known_types::Any` value. + /// + /// # Examples + /// + /// ``` + /// # use protobuf::Message; + /// # use protobuf::ProtobufResult; + /// use protobuf::well_known_types::Any; + /// + /// # fn the_test<MyMessage: Message>(message: &MyMessage) -> ProtobufResult<()> { + /// let message: &MyMessage = message; + /// let any = Any::pack(message)?; + /// assert!(any.is::<MyMessage>()); + /// # Ok(()) + /// # } + /// ``` + pub fn pack<M: Message>(message: &M) -> ProtobufResult<Any> { + Any::pack_dyn(message) + } + + /// Pack any message into `well_known_types::Any` value. + /// + /// # Examples + /// + /// ``` + /// use protobuf::Message; + /// # use protobuf::ProtobufResult; + /// use protobuf::well_known_types::Any; + /// + /// # fn the_test(message: &dyn Message) -> ProtobufResult<()> { + /// let message: &dyn Message = message; + /// let any = Any::pack_dyn(message)?; + /// assert!(any.is_dyn(message.descriptor())); + /// # Ok(()) + /// # } + /// ``` + pub fn pack_dyn(message: &dyn Message) -> ProtobufResult<Any> { + Any::pack_with_type_url_prefix(message, "type.googleapis.com") + } + + fn pack_with_type_url_prefix( + message: &dyn Message, + type_url_prefix: &str, + ) -> ProtobufResult<Any> { + Ok(Any { + type_url: Any::type_url(type_url_prefix, message.descriptor()), + value: message.write_to_bytes()?, + ..Default::default() + }) + } + + /// Check if `Any` contains a message of given type. + pub fn is<M: Message>(&self) -> bool { + self.is_dyn(M::descriptor_static()) + } + + /// Check if `Any` contains a message of given type. + pub fn is_dyn(&self, descriptor: &MessageDescriptor) -> bool { + match Any::get_type_name_from_type_url(&self.type_url) { + Some(type_name) => type_name == descriptor.full_name(), + None => false, + } + } + + /// Extract a message from this `Any`. + /// + /// # Returns + /// + /// * `Ok(None)` when message type mismatch + /// * `Err` when parse failed + pub fn unpack<M: Message>(&self) -> ProtobufResult<Option<M>> { + if !self.is::<M>() { + return Ok(None); + } + Ok(Some(M::parse_from_bytes(&self.value)?)) + } + + /// Extract a message from this `Any`. + /// + /// # Returns + /// + /// * `Ok(None)` when message type mismatch + /// * `Err` when parse failed + pub fn unpack_dyn( + &self, + descriptor: &MessageDescriptor, + ) -> ProtobufResult<Option<Box<dyn Message>>> { + if !self.is_dyn(descriptor) { + return Ok(None); + } + let mut message = descriptor.new_instance(); + message.merge_from_bytes(&self.value)?; + message.check_initialized()?; + Ok(Some(message)) + } +} diff --git a/2.27.1/src/well_known_types_util/mod.rs b/2.27.1/src/well_known_types_util/mod.rs new file mode 100644 index 0000000..bd4c243 --- /dev/null +++ b/2.27.1/src/well_known_types_util/mod.rs @@ -0,0 +1 @@ +mod any; diff --git a/2.27.1/src/wire_format.rs b/2.27.1/src/wire_format.rs new file mode 100644 index 0000000..9f54af3 --- /dev/null +++ b/2.27.1/src/wire_format.rs @@ -0,0 +1,105 @@ +//! Serialization constants. + +// TODO: temporary +pub use self::WireType::*; + +/// Tag occupies 3 bits +pub const TAG_TYPE_BITS: u32 = 3; +/// Tag mask +pub const TAG_TYPE_MASK: u32 = (1u32 << TAG_TYPE_BITS) - 1; +/// Max possible field number +pub const FIELD_NUMBER_MAX: u32 = 0x1fffffff; + +/// One of six defined protobuf wire types +#[derive(PartialEq, Eq, Clone, Debug)] +pub enum WireType { + /// Varint (e. g. `int32` or `sint64`) + WireTypeVarint = 0, + /// Fixed size 64 bit (e. g. `fixed64` or `double`) + WireTypeFixed64 = 1, + /// Length-delimited (e. g. `message` or `string`) + WireTypeLengthDelimited = 2, + /// Groups are not supported by rust-protobuf + WireTypeStartGroup = 3, + /// Groups are not supported by rust-protobuf + WireTypeEndGroup = 4, + /// Fixed size 64 bit (e. g. `fixed32` or `float`) + WireTypeFixed32 = 5, +} + +impl Copy for WireType {} + +impl WireType { + /// Parse wire type + pub fn new(n: u32) -> Option<WireType> { + match n { + 0 => Some(WireTypeVarint), + 1 => Some(WireTypeFixed64), + 2 => Some(WireTypeLengthDelimited), + 3 => Some(WireTypeStartGroup), + 4 => Some(WireTypeEndGroup), + 5 => Some(WireTypeFixed32), + _ => None, + } + } +} + +/// Parsed protobuf tag, which is a pair of field number and wire type +#[derive(Clone)] +pub struct Tag { + field_number: u32, + wire_type: WireType, +} + +impl Copy for Tag {} + +impl Tag { + /// Pack a tag to integer + pub fn value(self) -> u32 { + (self.field_number << TAG_TYPE_BITS) | (self.wire_type as u32) + } + + /// Parse integer into `Tag` object + // TODO: should return Result instead of Option + pub fn new(value: u32) -> Option<Tag> { + let wire_type = WireType::new(value & TAG_TYPE_MASK); + if wire_type.is_none() { + return None; + } + let field_number = value >> TAG_TYPE_BITS; + if field_number == 0 { + return None; + } + Some(Tag { + field_number: field_number, + wire_type: wire_type.unwrap(), + }) + } + + /// Create a tag from a field number and wire type. + /// + /// # Panics + /// + /// If field number is outside of allowed range. + pub fn make(field_number: u32, wire_type: WireType) -> Tag { + assert!(field_number > 0 && field_number <= FIELD_NUMBER_MAX); + Tag { + field_number: field_number, + wire_type: wire_type, + } + } + + /// Tag as pair of (field number, wire type) + pub fn unpack(self) -> (u32, WireType) { + (self.field_number(), self.wire_type()) + } + + fn wire_type(self) -> WireType { + self.wire_type + } + + /// Protobuf field number + pub fn field_number(self) -> u32 { + self.field_number + } +} diff --git a/2.27.1/src/zigzag.rs b/2.27.1/src/zigzag.rs new file mode 100644 index 0000000..4c7d27d --- /dev/null +++ b/2.27.1/src/zigzag.rs @@ -0,0 +1,50 @@ +// ZigZag endoging used for efficient transfer of signed integers +// https://developers.google.com/protocol-buffers/docs/encoding#types + +pub fn decode_zig_zag_32(n: u32) -> i32 { + ((n >> 1) as i32) ^ (-((n & 1) as i32)) +} + +pub fn decode_zig_zag_64(n: u64) -> i64 { + ((n >> 1) as i64) ^ (-((n & 1) as i64)) +} + +pub fn encode_zig_zag_32(n: i32) -> u32 { + ((n << 1) ^ (n >> 31)) as u32 +} + +pub fn encode_zig_zag_64(n: i64) -> u64 { + ((n << 1) ^ (n >> 63)) as u64 +} + +#[cfg(test)] +mod test { + + use super::decode_zig_zag_32; + use super::decode_zig_zag_64; + use super::encode_zig_zag_32; + use super::encode_zig_zag_64; + + #[test] + fn test_zig_zag() { + fn test_zig_zag_pair_64(decoded: i64, encoded: u64) { + assert_eq!(decoded, decode_zig_zag_64(encoded)); + assert_eq!(encoded, encode_zig_zag_64(decoded)); + } + + fn test_zig_zag_pair(decoded: i32, encoded: u32) { + assert_eq!(decoded, decode_zig_zag_32(encoded)); + assert_eq!(encoded, encode_zig_zag_32(decoded)); + test_zig_zag_pair_64(decoded as i64, encoded as u64); + } + + test_zig_zag_pair(0, 0); + test_zig_zag_pair(-1, 1); + test_zig_zag_pair(1, 2); + test_zig_zag_pair(-2, 3); + test_zig_zag_pair(2147483647, 4294967294); + test_zig_zag_pair(-2147483648, 4294967295); + test_zig_zag_pair_64(9223372036854775807, 18446744073709551614); + test_zig_zag_pair_64(-9223372036854775808, 18446744073709551615); + } +} |