Skip to content
This repository was archived by the owner on Apr 8, 2024. It is now read-only.

Commit 80de2dd

Browse files
committed
Remove Metadata from ServerHandlerContext
1 parent 1cc7781 commit 80de2dd

File tree

5 files changed

+19
-13
lines changed

5 files changed

+19
-13
lines changed

grpc/src/server/ctx.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ use tokio::runtime::Handle;
1515
/// An object passed to server handlers.
1616
pub struct ServerHandlerContext {
1717
pub ctx: httpbis::ServerHandlerContext,
18-
// TODO: move to request
19-
pub metadata: Metadata,
2018
}
2119

2220
impl ServerHandlerContext {

grpc/src/server/method.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ use crate::server::req_handler::ServerRequestUntyped;
1919
use crate::server::req_single::ServerRequestSingle;
2020
use crate::server::resp_sink::ServerResponseSink;
2121
use crate::server::resp_sink_untyped::ServerResponseUntypedSink;
22+
use crate::Metadata;
2223
use crate::ServerResponseUnarySink;
2324
use std::marker;
2425

@@ -184,6 +185,7 @@ where
184185
+ 'static,
185186
{
186187
ctx: ServerHandlerContext,
188+
metadata: Metadata,
187189
f: Arc<F>,
188190
resp: ServerResponseSink<Resp>,
189191
_marker: marker::PhantomData<Req>,
@@ -207,17 +209,19 @@ where
207209
ctx,
208210
f,
209211
resp,
212+
metadata,
210213
_marker,
211214
} = self.take().unwrap();
212-
let metadata = ctx.metadata.clone();
213215
let req = ServerRequestSingle { metadata, message };
214216
let resp = ServerResponseUnarySink { sink: resp };
215217
f(ctx, req, resp)
216218
}
217219
}
218220

221+
let metadata = req.metadata()?;
219222
req.register_unary_handler(Some(HandlerImpl {
220223
ctx,
224+
metadata,
221225
f: self.f.clone(),
222226
resp,
223227
_marker: marker::PhantomData,
@@ -284,6 +288,7 @@ where
284288
+ 'static,
285289
{
286290
ctx: ServerHandlerContext,
291+
metadata: Metadata,
287292
f: Arc<F>,
288293
resp: ServerResponseSink<Resp>,
289294
_marker: marker::PhantomData<Req>,
@@ -306,10 +311,10 @@ where
306311
let HandlerImpl {
307312
ctx,
308313
f,
314+
metadata,
309315
resp,
310316
_marker,
311317
} = self.take().unwrap();
312-
let metadata = ctx.metadata.clone();
313318
let req = ServerRequestSingle {
314319
metadata,
315320
message: req,
@@ -318,8 +323,10 @@ where
318323
}
319324
}
320325

326+
let metadata = req.metadata()?;
321327
req.register_unary_handler(Some(HandlerImpl {
322328
ctx,
329+
metadata,
323330
f: self.f.clone(),
324331
resp,
325332
_marker: marker::PhantomData,

grpc/src/server/mod.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,10 +185,7 @@ impl httpbis::ServerHandler for GrpcServerHandler {
185185
common: SinkCommonUntyped { http: resp },
186186
};
187187

188-
let context = ServerHandlerContext {
189-
ctx: context,
190-
metadata,
191-
};
188+
let context = ServerHandlerContext { ctx: context };
192189

193190
// TODO: catch unwind
194191
self.service_definition

grpc/src/server/req_handler.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,12 @@ pub(crate) struct ServerRequestUntyped<'a> {
140140
}
141141

142142
impl<'a> ServerRequestUntyped<'a> {
143+
pub fn metadata(&self) -> crate::Result<Metadata> {
144+
// TODO: take, not clone
145+
// TODO: do not unwrap
146+
Ok(Metadata::from_headers(self.req.headers.clone())?)
147+
}
148+
143149
pub fn register_stream_handler<F, H, R>(self, handler: F) -> R
144150
where
145151
H: ServerRequestStreamHandlerUntyped,
@@ -168,10 +174,8 @@ pub struct ServerRequest<'a, M: 'static> {
168174

169175
impl<'a, M: Send + 'static> ServerRequest<'a, M> {
170176
/// Get request metadata.
171-
pub fn metadata(&self) -> Metadata {
172-
// TODO: take, not clone
173-
// TODO: do not unwrap
174-
Metadata::from_headers(self.req.req.headers.clone()).unwrap()
177+
pub fn metadata(&self) -> crate::Result<Metadata> {
178+
self.req.metadata()
175179
}
176180

177181
/// Register server stream handler.

interop/src/bin/interop_server.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ impl TestService for TestServerImpl {
165165
req: ServerRequest<StreamingOutputCallRequest>,
166166
mut resp: ServerResponseSink<StreamingOutputCallResponse>,
167167
) -> grpc::Result<()> {
168-
let metadata = req.metadata();
168+
let metadata = req.metadata()?;
169169
debug!("sending custom metadata");
170170
resp.send_metadata(echo_custom_metadata(&metadata))?;
171171
let mut req = req.into_stream();

0 commit comments

Comments
 (0)