Skip to content

Commit 2856932

Browse files
authored
chore(volo-http): combine C/S Request and C/S Response types (#534)
Since `Body` types of client and server have been combined, this commit combine `ClientRequest` and `ServerResquest` to `Request`, `ClientResponse` and `ServerResponse` to `Response`. Signed-off-by: Yu Li <[email protected]>
1 parent 2191a43 commit 2856932

35 files changed

+355
-384
lines changed

examples/src/http/example-http-server.rs

+14-14
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@ use async_stream::stream;
44
use bytes::Bytes;
55
use faststr::FastStr;
66
use futures::Stream;
7-
use http::{header, Method, Request, StatusCode, Uri};
7+
use http::{header, Method, StatusCode, Uri};
88
use http_body::Frame;
99
use serde::{Deserialize, Serialize};
1010
use tokio_stream::StreamExt;
1111
use volo::{catch_panic, service::service_fn};
1212
use volo_http::{
1313
body::{Body, BodyConversion},
1414
context::ServerContext,
15-
request::ServerRequest,
16-
response::ServerResponse,
15+
request::Request,
16+
response::Response,
1717
server::{
1818
extract::{Form, FullUri, Json, MaybeInvalid, Query},
1919
layer::{FilterLayer, TimeoutLayer},
@@ -105,16 +105,16 @@ async fn post_with_form(Form(info): Form<Login>) -> Result<String, StatusCode> {
105105

106106
async fn test_body_and_err(
107107
_: &mut ServerContext,
108-
_: ServerRequest<FastStr>,
109-
) -> Result<ServerResponse, StatusCode> {
110-
Ok(ServerResponse::default())
108+
_: Request<FastStr>,
109+
) -> Result<Response, StatusCode> {
110+
Ok(Response::default())
111111
}
112112

113113
async fn map_body_and_err_inner(
114114
cx: &mut ServerContext,
115-
req: ServerRequest<Bytes>,
115+
req: Request<Bytes>,
116116
next: Next<FastStr, StatusCode>,
117-
) -> ServerResponse {
117+
) -> Response {
118118
let (parts, body) = req.into_parts();
119119
let body = FastStr::from_bytes(body).unwrap_or_default();
120120
let req = Request::from_parts(parts, body);
@@ -123,9 +123,9 @@ async fn map_body_and_err_inner(
123123

124124
async fn map_body_and_err_outer(
125125
cx: &mut ServerContext,
126-
req: ServerRequest,
126+
req: Request,
127127
next: Next<Bytes>,
128-
) -> ServerResponse {
128+
) -> Response {
129129
let (parts, body) = req.into_parts();
130130
let body = body.into_bytes().await.unwrap();
131131
let req = Request::from_parts(parts, body);
@@ -206,7 +206,7 @@ async fn extension(Extension(state): Extension<Arc<State>>) -> String {
206206
format!("State {{ foo: {}, bar: {} }}\n", state.foo, state.bar)
207207
}
208208

209-
async fn service_fn_test(cx: &mut ServerContext, req: ServerRequest) -> Result<String, Infallible> {
209+
async fn service_fn_test(cx: &mut ServerContext, req: Request) -> Result<String, Infallible> {
210210
Ok(format!("cx: {cx:?}, req: {req:?}"))
211211
}
212212

@@ -334,9 +334,9 @@ async fn tracing_from_fn(
334334
peer: Address,
335335
cookie_jar: CookieJar,
336336
cx: &mut ServerContext,
337-
req: ServerRequest,
337+
req: Request,
338338
next: Next,
339-
) -> ServerResponse {
339+
) -> Response {
340340
tracing::info!("{:?}", *cookie_jar);
341341
let count = cookie_jar.get("count").map_or(0usize, |val| {
342342
val.value().to_string().parse().unwrap_or(0usize)
@@ -361,7 +361,7 @@ async fn tracing_from_fn(
361361
.into_response()
362362
}
363363

364-
async fn headers_map_response(response: ServerResponse) -> impl IntoResponse {
364+
async fn headers_map_response(response: Response) -> impl IntoResponse {
365365
(
366366
[
367367
("Access-Control-Allow-Origin", "*"),

volo-http/src/client/cookie.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ use tokio::sync::RwLock;
1010
use crate::{
1111
context::ClientContext,
1212
error::ClientError,
13-
request::{ClientRequest, RequestPartsExt},
14-
response::ClientResponse,
13+
request::{Request, RequestPartsExt},
14+
response::Response,
1515
utils::cookie::CookieStore,
1616
};
1717

@@ -32,9 +32,9 @@ impl<S> CookieService<S> {
3232
}
3333
}
3434

35-
impl<S, B> Service<ClientContext, ClientRequest<B>> for CookieService<S>
35+
impl<S, B> Service<ClientContext, Request<B>> for CookieService<S>
3636
where
37-
S: Service<ClientContext, ClientRequest<B>, Response = ClientResponse, Error = ClientError>
37+
S: Service<ClientContext, Request<B>, Response = Response, Error = ClientError>
3838
+ Send
3939
+ Sync
4040
+ 'static,
@@ -46,7 +46,7 @@ where
4646
async fn call(
4747
&self,
4848
cx: &mut ClientContext,
49-
mut req: ClientRequest<B>,
49+
mut req: Request<B>,
5050
) -> Result<Self::Response, Self::Error> {
5151
let url = req.url();
5252

@@ -58,7 +58,7 @@ where
5858
.await
5959
.add_cookie_header(&mut parts.headers, url);
6060
}
61-
req = ClientRequest::from_parts(parts, body);
61+
req = Request::from_parts(parts, body);
6262
}
6363

6464
let resp = self.inner.call(cx, req).await?;

volo-http/src/client/layer/fail_on_status.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use volo::context::Context;
88
use crate::{
99
error::{client::request_error, ClientError},
1010
request::RequestPartsExt,
11-
response::ClientResponse,
11+
response::Response,
1212
};
1313

1414
/// [`Layer`] for throwing service error with the response's error status code.
@@ -87,7 +87,7 @@ impl<Cx, Req, S, B> Service<Cx, Req> for FailOnStatusService<S>
8787
where
8888
Cx: Context + Send,
8989
Req: RequestPartsExt + Send,
90-
S: Service<Cx, Req, Response = ClientResponse<B>, Error = ClientError> + Send + Sync,
90+
S: Service<Cx, Req, Response = Response<B>, Error = ClientError> + Send + Sync,
9191
{
9292
type Response = S::Response;
9393
type Error = S::Error;
@@ -159,25 +159,25 @@ mod fail_on_status_tests {
159159
use super::FailOnStatus;
160160
use crate::{
161161
body::Body, client::test_helpers::MockTransport, context::ClientContext,
162-
error::ClientError, request::ClientRequest, response::ClientResponse, ClientBuilder,
162+
error::ClientError, request::Request, response::Response, ClientBuilder,
163163
};
164164

165165
struct ReturnStatus;
166166

167-
impl Service<ClientContext, ClientRequest> for ReturnStatus {
168-
type Response = ClientResponse;
167+
impl Service<ClientContext, Request> for ReturnStatus {
168+
type Response = Response;
169169
type Error = ClientError;
170170

171171
fn call(
172172
&self,
173173
_: &mut ClientContext,
174-
req: ClientRequest,
174+
req: Request,
175175
) -> impl std::future::Future<Output = Result<Self::Response, Self::Error>> + Send {
176176
let path = req.uri().path();
177177
assert_eq!(&path[..1], "/");
178178
let status_code = path[1..].parse::<u16>().expect("invalid uri");
179179
let status_code = StatusCode::from_u16(status_code).expect("invalid status code");
180-
let mut resp = ClientResponse::new(Body::empty());
180+
let mut resp = Response::new(Body::empty());
181181
*resp.status_mut() = status_code;
182182
async { Ok(resp) }
183183
}

volo-http/src/client/layer/header.rs

+10-10
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use volo::{
2121
use crate::{
2222
client::{dns::Port, target::is_default_port},
2323
error::client::{builder_error, Result},
24-
request::ClientRequest,
24+
request::Request,
2525
};
2626

2727
/// [`Layer`] for inserting a header to requests.
@@ -85,17 +85,17 @@ pub struct HeaderService<S> {
8585
val: HeaderValue,
8686
}
8787

88-
impl<Cx, B, S> Service<Cx, ClientRequest<B>> for HeaderService<S>
88+
impl<Cx, B, S> Service<Cx, Request<B>> for HeaderService<S>
8989
where
90-
S: Service<Cx, ClientRequest<B>>,
90+
S: Service<Cx, Request<B>>,
9191
{
9292
type Response = S::Response;
9393
type Error = S::Error;
9494

9595
fn call(
9696
&self,
9797
cx: &mut Cx,
98-
mut req: ClientRequest<B>,
98+
mut req: Request<B>,
9999
) -> impl Future<Output = Result<Self::Response, Self::Error>> + Send {
100100
req.headers_mut().insert(self.key.clone(), self.val.clone());
101101
self.inner.call(cx, req)
@@ -185,18 +185,18 @@ fn gen_host_by_ep(ep: &Endpoint) -> Option<HeaderValue> {
185185
gen_host(scheme, name, addr, port)
186186
}
187187

188-
impl<Cx, B, S> Service<Cx, ClientRequest<B>> for HostService<S>
188+
impl<Cx, B, S> Service<Cx, Request<B>> for HostService<S>
189189
where
190190
Cx: Context,
191-
S: Service<Cx, ClientRequest<B>>,
191+
S: Service<Cx, Request<B>>,
192192
{
193193
type Response = S::Response;
194194
type Error = S::Error;
195195

196196
fn call(
197197
&self,
198198
cx: &mut Cx,
199-
mut req: ClientRequest<B>,
199+
mut req: Request<B>,
200200
) -> impl Future<Output = Result<Self::Response, Self::Error>> + Send {
201201
if !req.headers().contains_key(header::HOST) {
202202
if let Some(val) = gen_host_by_ep(cx.rpc_info().callee()) {
@@ -256,17 +256,17 @@ pub struct UserAgentService<S> {
256256
val: HeaderValue,
257257
}
258258

259-
impl<Cx, B, S> Service<Cx, ClientRequest<B>> for UserAgentService<S>
259+
impl<Cx, B, S> Service<Cx, Request<B>> for UserAgentService<S>
260260
where
261-
S: Service<Cx, ClientRequest<B>>,
261+
S: Service<Cx, Request<B>>,
262262
{
263263
type Response = S::Response;
264264
type Error = S::Error;
265265

266266
fn call(
267267
&self,
268268
cx: &mut Cx,
269-
mut req: ClientRequest<B>,
269+
mut req: Request<B>,
270270
) -> impl Future<Output = Result<Self::Response, Self::Error>> + Send {
271271
if !req.headers().contains_key(header::USER_AGENT) {
272272
req.headers_mut()

volo-http/src/client/loadbalance.rs

+5-7
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ use crate::{
2525
client::{lb_error, no_available_endpoint},
2626
ClientError,
2727
},
28-
request::ClientRequest,
29-
response::ClientResponse,
28+
request::Request,
29+
response::Response,
3030
};
3131

3232
/// Default load balance with [`DnsResolver`]
@@ -146,13 +146,11 @@ where
146146
}
147147
}
148148

149-
impl<LB, D, S, B> Service<ClientContext, ClientRequest<B>> for LoadBalanceService<LB, D, S>
149+
impl<LB, D, S, B> Service<ClientContext, Request<B>> for LoadBalanceService<LB, D, S>
150150
where
151151
LB: LoadBalance<D>,
152152
D: Discover,
153-
S: Service<ClientContext, ClientRequest<B>, Response = ClientResponse, Error = ClientError>
154-
+ Send
155-
+ Sync,
153+
S: Service<ClientContext, Request<B>, Response = Response, Error = ClientError> + Send + Sync,
156154
B: Send,
157155
{
158156
type Response = S::Response;
@@ -161,7 +159,7 @@ where
161159
async fn call(
162160
&self,
163161
cx: &mut ClientContext,
164-
req: ClientRequest<B>,
162+
req: Request<B>,
165163
) -> Result<Self::Response, Self::Error> {
166164
let callee = cx.rpc_info().callee();
167165

volo-http/src/client/mod.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ use crate::{
4747
client::{builder_error, Result},
4848
BoxError, ClientError,
4949
},
50-
request::ClientRequest,
51-
response::ClientResponse,
50+
request::Request,
51+
response::Response,
5252
};
5353

5454
mod callopt;
@@ -856,9 +856,9 @@ impl<S> Client<S> {
856856
}
857857
}
858858

859-
impl<S, B> OneShotService<ClientContext, ClientRequest<B>> for Client<S>
859+
impl<S, B> OneShotService<ClientContext, Request<B>> for Client<S>
860860
where
861-
S: Service<ClientContext, ClientRequest<B>, Error = ClientError> + Send + Sync,
861+
S: Service<ClientContext, Request<B>, Error = ClientError> + Send + Sync,
862862
B: Send,
863863
{
864864
type Response = S::Response;
@@ -867,7 +867,7 @@ where
867867
async fn call(
868868
self,
869869
cx: &mut ClientContext,
870-
mut req: ClientRequest<B>,
870+
mut req: Request<B>,
871871
) -> Result<Self::Response, Self::Error> {
872872
// set target
873873
self.inner.target.clone().apply(cx)?;
@@ -912,9 +912,9 @@ where
912912
}
913913
}
914914

915-
impl<S, B> Service<ClientContext, ClientRequest<B>> for Client<S>
915+
impl<S, B> Service<ClientContext, Request<B>> for Client<S>
916916
where
917-
S: Service<ClientContext, ClientRequest<B>, Error = ClientError> + Send + Sync,
917+
S: Service<ClientContext, Request<B>, Error = ClientError> + Send + Sync,
918918
B: Send,
919919
{
920920
type Response = S::Response;
@@ -923,7 +923,7 @@ where
923923
fn call(
924924
&self,
925925
cx: &mut ClientContext,
926-
req: ClientRequest<B>,
926+
req: Request<B>,
927927
) -> impl Future<Output = Result<Self::Response, Self::Error>> + Send {
928928
OneShotService::call(self.clone(), cx, req)
929929
}
@@ -943,7 +943,7 @@ impl<S> MkClient<Client<S>> for DefaultMkClient {
943943
static CLIENT: LazyLock<DefaultClient> = LazyLock::new(Default::default);
944944

945945
/// Create a GET request to the specified URI.
946-
pub async fn get<U>(uri: U) -> Result<ClientResponse>
946+
pub async fn get<U>(uri: U) -> Result<Response>
947947
where
948948
U: TryInto<Uri>,
949949
U::Error: Into<BoxError>,

0 commit comments

Comments
 (0)