mod error;
pub mod helpers;
mod method_response;
mod rpc_module;
mod subscription;
pub use error::*;
pub use helpers::*;
pub use http::Extensions;
pub use method_response::*;
pub use rpc_module::*;
pub use subscription::*;
use jsonrpsee_types::ErrorObjectOwned;
const LOG_TARGET: &str = "jsonrpsee-server";
pub trait IntoResponse {
type Output: serde::Serialize + Clone;
fn into_response(self) -> ResponsePayload<'static, Self::Output>;
}
impl<T, E: Into<ErrorObjectOwned>> IntoResponse for Result<T, E>
where
T: serde::Serialize + Clone,
{
type Output = T;
fn into_response(self) -> ResponsePayload<'static, Self::Output> {
match self {
Ok(val) => ResponsePayload::success(val),
Err(e) => ResponsePayload::error(e),
}
}
}
impl<T> IntoResponse for Option<T>
where
T: serde::Serialize + Clone,
{
type Output = Option<T>;
fn into_response(self) -> ResponsePayload<'static, Self::Output> {
ResponsePayload::success(self)
}
}
impl<T> IntoResponse for Vec<T>
where
T: serde::Serialize + Clone,
{
type Output = Vec<T>;
fn into_response(self) -> ResponsePayload<'static, Self::Output> {
ResponsePayload::success(self)
}
}
impl<T, const N: usize> IntoResponse for [T; N]
where
[T; N]: serde::Serialize + Clone,
{
type Output = [T; N];
fn into_response(self) -> ResponsePayload<'static, Self::Output> {
ResponsePayload::success(self)
}
}
impl<T> IntoResponse for jsonrpsee_types::ResponsePayload<'static, T>
where
T: serde::Serialize + Clone,
{
type Output = T;
fn into_response(self) -> ResponsePayload<'static, Self::Output> {
self.into()
}
}
impl<T> IntoResponse for ResponsePayload<'static, T>
where
T: serde::Serialize + Clone,
{
type Output = T;
fn into_response(self) -> ResponsePayload<'static, Self::Output> {
self
}
}
impl IntoResponse for ErrorObjectOwned {
type Output = ();
fn into_response(self) -> ResponsePayload<'static, Self::Output> {
ResponsePayload::error(self)
}
}
macro_rules! impl_into_response {
($($n:ty),*) => {
$(
impl IntoResponse for $n {
type Output = $n;
fn into_response(self) -> ResponsePayload<'static, Self::Output> {
ResponsePayload::success(self)
}
}
)+
}
}
impl_into_response!(
u8,
u16,
u32,
u64,
u128,
usize,
i8,
i16,
i32,
i64,
i128,
isize,
String,
&'static str,
bool,
serde_json::Value,
()
);