#![warn(
missing_debug_implementations,
missing_docs,
unsafe_code,
bare_trait_objects
)]
#![warn(clippy::pedantic, clippy::nursery)]
#![allow(
// Next `cast_*` lints don't give alternatives.
clippy::cast_possible_wrap, clippy::cast_possible_truncation, clippy::cast_sign_loss,
// Next lints produce too much noise/false positives.
clippy::module_name_repetitions, clippy::similar_names, clippy::must_use_candidate,
clippy::pub_enum_variant_names,
// '... may panic' lints.
clippy::indexing_slicing,
// Too much work to fix.
clippy::missing_errors_doc, clippy::missing_const_for_fn
)]
pub use self::transactions::{
Batch, CheckedCall, Error, MiddlewareInterface, MiddlewareInterfaceMut,
};
pub mod proto;
mod transactions;
use exonum::runtime::{versioning, InstanceId};
use exonum_derive::*;
use exonum_rust_runtime::{DefaultInstance, Service};
use std::{fmt, str::FromStr};
#[derive(Debug, ServiceDispatcher, ServiceFactory)]
#[service_dispatcher(implements("MiddlewareInterface"))]
#[service_factory(proto_sources = "proto")]
pub struct MiddlewareService;
impl Service for MiddlewareService {}
impl DefaultInstance for MiddlewareService {
const INSTANCE_ID: InstanceId = 1;
const INSTANCE_NAME: &'static str = "middleware";
}
#[derive(Clone, PartialEq)]
pub struct ArtifactReq(pub versioning::ArtifactReq);
impl From<versioning::ArtifactReq> for ArtifactReq {
fn from(value: versioning::ArtifactReq) -> Self {
Self(value)
}
}
impl From<ArtifactReq> for versioning::ArtifactReq {
fn from(value: ArtifactReq) -> Self {
value.0
}
}
impl fmt::Debug for ArtifactReq {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::Debug::fmt(&self.0, formatter)
}
}
impl fmt::Display for ArtifactReq {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::Display::fmt(&self.0, formatter)
}
}
impl FromStr for ArtifactReq {
type Err = <versioning::ArtifactReq as FromStr>::Err;
fn from_str(s: &str) -> Result<Self, Self::Err> {
versioning::ArtifactReq::from_str(s).map(Self)
}
}