pub extern crate bytes;
pub extern crate erased_serde;
pub extern crate futures_util;
pub extern crate serde;
pub mod codec;
pub mod codecs;
pub mod rpc;
pub mod transport;
pub mod transports;
#[cfg(feature = "service-macros")]
pub use rpc_it_macros::service;
#[cfg(feature = "service")]
pub mod service;
#[cfg(feature = "macros")]
pub mod __util {
use serde::ser::SerializeMap;
pub fn iter_as_map<'a, I>(iter: I) -> impl serde::Serialize + 'a
where
I: IntoIterator<Item = (&'a dyn erased_serde::Serialize, &'a dyn erased_serde::Serialize)>
+ 'a,
I::IntoIter: ExactSizeIterator + Clone,
{
struct IterAsMap<'a, I>(I)
where
I: Iterator<Item = (&'a dyn erased_serde::Serialize, &'a dyn erased_serde::Serialize)>
+ ExactSizeIterator
+ Clone;
impl<'a, I> serde::Serialize for IterAsMap<'a, I>
where
I: Iterator<Item = (&'a dyn erased_serde::Serialize, &'a dyn erased_serde::Serialize)>
+ ExactSizeIterator
+ Clone,
{
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
let mut map = serializer.serialize_map(Some(self.0.len()))?;
for (k, v) in self.0.clone() {
map.serialize_entry(k, v)?;
}
map.end()
}
}
IterAsMap(iter.into_iter())
}
}
pub use rpc::{msg::*, *};
pub use serde::de::IgnoredAny;
#[cfg(feature = "service")]
pub use service::{
ExactMatchRouter, RegisterError, RouteMessageError, Router, Service, ServiceBuilder,
TypedRequest, TypedResponse,
};
#[cfg(feature = "macros")]
#[macro_export]
macro_rules! kv_pairs {
($($key:tt = $value:expr),*) => {
$crate::__util::iter_as_map([$(
(&($key) as &dyn $crate::erased_serde::Serialize,
&($value) as &dyn $crate::erased_serde::Serialize)
),*])
};
}