#![deny(warnings, trivial_casts, trivial_numeric_casts, unused_import_braces)]
#![allow(clippy::large_enum_variant)]
#![forbid(unsafe_code)]
#![doc(html_root_url = "https://docs.rs/tendermint-proto/0.22.0")]
#[allow(warnings)]
pub mod google {
pub mod protobuf {
include!("prost/google.protobuf.rs");
include!("protobuf.rs");
}
}
mod error;
#[allow(warnings)]
mod tendermint;
pub use error::Error;
pub use tendermint::*;
use bytes::{Buf, BufMut};
use prost::encoding::encoded_len_varint;
use prost::Message;
use std::convert::{TryFrom, TryInto};
use std::fmt::Display;
pub mod serializers;
pub trait Protobuf<T: Message + From<Self> + Default>
where
Self: Sized + Clone + TryFrom<T>,
<Self as TryFrom<T>>::Error: Display,
{
fn encode<B: BufMut>(&self, buf: &mut B) -> Result<(), Error> {
T::from(self.clone())
.encode(buf)
.map_err(Error::encode_message)
}
fn encode_length_delimited<B: BufMut>(&self, buf: &mut B) -> Result<(), Error> {
T::from(self.clone())
.encode_length_delimited(buf)
.map_err(Error::encode_message)
}
fn decode<B: Buf>(buf: B) -> Result<Self, Error> {
let raw = T::decode(buf).map_err(Error::decode_message)?;
Self::try_from(raw).map_err(Error::try_from::<T, Self, _>)
}
fn decode_length_delimited<B: Buf>(buf: B) -> Result<Self, Error> {
let raw = T::decode_length_delimited(buf).map_err(Error::decode_message)?;
Self::try_from(raw).map_err(Error::try_from::<T, Self, _>)
}
fn encoded_len(&self) -> usize {
T::from(self.clone()).encoded_len()
}
fn encode_vec(&self) -> Result<Vec<u8>, Error> {
let mut wire = Vec::with_capacity(self.encoded_len());
self.encode(&mut wire).map(|_| wire)
}
fn decode_vec(v: &[u8]) -> Result<Self, Error> {
Self::decode(v)
}
fn encode_length_delimited_vec(&self) -> Result<Vec<u8>, Error> {
let len = self.encoded_len();
let lenu64 = len.try_into().map_err(Error::parse_length)?;
let mut wire = Vec::with_capacity(len + encoded_len_varint(lenu64));
self.encode_length_delimited(&mut wire).map(|_| wire)
}
fn decode_length_delimited_vec(v: &[u8]) -> Result<Self, Error> {
Self::decode_length_delimited(v)
}
}