jsonrpsee_core/server/
mod.rs1mod error;
31pub mod helpers;
33mod method_response;
35mod rpc_module;
37mod subscription;
39
40pub use error::*;
41pub use helpers::*;
42pub use http::Extensions;
43pub use method_response::*;
44pub use rpc_module::*;
45pub use subscription::*;
46
47use jsonrpsee_types::ErrorObjectOwned;
48
49const LOG_TARGET: &str = "jsonrpsee-server";
50
51pub trait IntoResponse {
56 type Output: serde::Serialize + Clone;
58
59 fn into_response(self) -> ResponsePayload<'static, Self::Output>;
61}
62
63impl<T, E: Into<ErrorObjectOwned>> IntoResponse for Result<T, E>
64where
65 T: serde::Serialize + Clone,
66{
67 type Output = T;
68
69 fn into_response(self) -> ResponsePayload<'static, Self::Output> {
70 match self {
71 Ok(val) => ResponsePayload::success(val),
72 Err(e) => ResponsePayload::error(e),
73 }
74 }
75}
76
77impl<T> IntoResponse for Option<T>
78where
79 T: serde::Serialize + Clone,
80{
81 type Output = Option<T>;
82
83 fn into_response(self) -> ResponsePayload<'static, Self::Output> {
84 ResponsePayload::success(self)
85 }
86}
87
88impl<T> IntoResponse for Vec<T>
89where
90 T: serde::Serialize + Clone,
91{
92 type Output = Vec<T>;
93
94 fn into_response(self) -> ResponsePayload<'static, Self::Output> {
95 ResponsePayload::success(self)
96 }
97}
98
99impl<T, const N: usize> IntoResponse for [T; N]
100where
101 [T; N]: serde::Serialize + Clone,
102{
103 type Output = [T; N];
104
105 fn into_response(self) -> ResponsePayload<'static, Self::Output> {
106 ResponsePayload::success(self)
107 }
108}
109
110impl<T> IntoResponse for jsonrpsee_types::ResponsePayload<'static, T>
111where
112 T: serde::Serialize + Clone,
113{
114 type Output = T;
115
116 fn into_response(self) -> ResponsePayload<'static, Self::Output> {
117 self.into()
118 }
119}
120
121impl<T> IntoResponse for ResponsePayload<'static, T>
122where
123 T: serde::Serialize + Clone,
124{
125 type Output = T;
126
127 fn into_response(self) -> ResponsePayload<'static, Self::Output> {
128 self
129 }
130}
131
132impl IntoResponse for ErrorObjectOwned {
133 type Output = ();
134
135 fn into_response(self) -> ResponsePayload<'static, Self::Output> {
136 ResponsePayload::error(self)
137 }
138}
139
140macro_rules! impl_into_response {
141 ($($n:ty),*) => {
142 $(
143 impl IntoResponse for $n {
144 type Output = $n;
145
146 fn into_response(self) -> ResponsePayload<'static, Self::Output> {
147 ResponsePayload::success(self)
148 }
149 }
150 )+
151 }
152}
153
154impl_into_response!(
155 u8,
156 u16,
157 u32,
158 u64,
159 u128,
160 usize,
161 i8,
162 i16,
163 i32,
164 i64,
165 i128,
166 isize,
167 String,
168 &'static str,
169 bool,
170 serde_json::Value,
171 ()
172);