exonum_build

Struct ProtobufGenerator

Source
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>

Source

pub fn with_mod_name(mod_name: &'a str) -> Self

Name of the rust module generated from input proto files.

§Panics

If the mod_name is empty.

Source

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.

Source

pub fn add_path(self, path: &'a str) -> Self

An additional directory containing dependent proto-files, can be used multiple times.

Source

pub fn with_common(self) -> Self

Common types for all crates.

Source

pub fn with_crypto(self) -> Self

Proto files from exonum-crypto crate (Hash, PublicKey, etc.).

Source

pub fn with_merkledb(self) -> Self

Proto files from exonum-merkledb crate (MapProof, ListProof).

Source

pub fn with_exonum(self) -> Self

Exonum core related proto files,

Source

pub fn with_includes(self, includes: &'a [ProtoSources<'_>]) -> Self

Add multiple include directories.

Source

pub fn without_sources(self) -> Self

Switches off inclusion of source Protobuf files into the generated output.

Source

pub fn generate(self)

Generate proto files from specified sources.

§Panics

If the input_dir or includes are empty.

Trait Implementations§

Source§

impl<'a> Debug for ProtobufGenerator<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.