| //! # 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")); |