pub struct ProtobufGenerator<'a> { /* private fields */ }
Expand description
Generates Rust modules from Protobuf files.
The protoc
executable (i.e., the Protobuf compiler) should be in $PATH
.
§Examples
Specify in the build script (build.rs
) of your crate:
use exonum_build::ProtobufGenerator;
ProtobufGenerator::with_mod_name("example_mod.rs")
.with_input_dir("src/proto")
.with_crypto()
.with_common()
.with_merkledb()
.generate();
After the successful run, $OUT_DIR
will contain a module for each Protobuf file in
src/proto
and example_mod.rs
which will include all generated modules
as submodules.
To use the generated Rust types corresponding to Protobuf messages, specify
in src/proto/mod.rs
:
include!(concat!(env!("OUT_DIR"), "/example_mod.rs"));
// If you use types from `exonum` .proto files.
use exonum::proto::schema::*;
Implementations§
Source§impl<'a> ProtobufGenerator<'a>
impl<'a> ProtobufGenerator<'a>
Sourcepub fn with_mod_name(mod_name: &'a str) -> Self
pub fn with_mod_name(mod_name: &'a str) -> Self
Sourcepub fn with_input_dir(self, path: &'a str) -> Self
pub fn with_input_dir(self, path: &'a str) -> Self
A directory containing input protobuf files.
For single mod_name
you can provide only one input directory,
If proto-files in the input directory have dependencies located in another
directories, you must specify them using add_path
method.
Predefined dependencies can be specified using corresponding methods
with_common
, with_crypto
, with_exonum
.
§Panics
If the input directory is already specified.
Sourcepub fn add_path(self, path: &'a str) -> Self
pub fn add_path(self, path: &'a str) -> Self
An additional directory containing dependent proto-files, can be used multiple times.
Sourcepub fn with_common(self) -> Self
pub fn with_common(self) -> Self
Common types for all crates.
Sourcepub fn with_crypto(self) -> Self
pub fn with_crypto(self) -> Self
Proto files from exonum-crypto
crate (Hash
, PublicKey
, etc.).
Sourcepub fn with_merkledb(self) -> Self
pub fn with_merkledb(self) -> Self
Proto files from exonum-merkledb
crate (MapProof
, ListProof
).
Sourcepub fn with_exonum(self) -> Self
pub fn with_exonum(self) -> Self
Exonum core related proto files,
Sourcepub fn with_includes(self, includes: &'a [ProtoSources<'_>]) -> Self
pub fn with_includes(self, includes: &'a [ProtoSources<'_>]) -> Self
Add multiple include directories.
Sourcepub fn without_sources(self) -> Self
pub fn without_sources(self) -> Self
Switches off inclusion of source Protobuf files into the generated output.
Trait Implementations§
Auto Trait Implementations§
impl<'a> Freeze for ProtobufGenerator<'a>
impl<'a> RefUnwindSafe for ProtobufGenerator<'a>
impl<'a> Send for ProtobufGenerator<'a>
impl<'a> Sync for ProtobufGenerator<'a>
impl<'a> Unpin for ProtobufGenerator<'a>
impl<'a> UnwindSafe for ProtobufGenerator<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more