aboutsummaryrefslogtreecommitdiff
path: root/crates/server/src/dispatch.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2018-08-31 10:04:33 +0100
committerAleksey Kladov <[email protected]>2018-08-31 10:04:33 +0100
commitd999f4b56803b613dcf354862e1db4b5d2a8a8d0 (patch)
tree4e046b6c2be2ab8fe0f4551262b24c6cc6a11470 /crates/server/src/dispatch.rs
parentefa6a952b4cb9c9f139822fbf9781a610bba3813 (diff)
cancelation
Diffstat (limited to 'crates/server/src/dispatch.rs')
-rw-r--r--crates/server/src/dispatch.rs18
1 files changed, 8 insertions, 10 deletions
diff --git a/crates/server/src/dispatch.rs b/crates/server/src/dispatch.rs
index d8cca48d0..806534944 100644
--- a/crates/server/src/dispatch.rs
+++ b/crates/server/src/dispatch.rs
@@ -58,20 +58,18 @@ fn parse_request_as<R: ClientRequest>(raw: RawRequest)
58 Ok(Ok((params, responder))) 58 Ok(Ok((params, responder)))
59} 59}
60 60
61pub fn handle_request<R, F>(req: &mut Option<RawRequest>, f: F) -> Result<()> 61pub fn handle_request<R, F>(req: RawRequest, f: F) -> Result<::std::result::Result<u64, RawRequest>>
62 where 62 where
63 R: ClientRequest, 63 R: ClientRequest,
64 F: FnOnce(R::Params, Responder<R>) -> Result<()> 64 F: FnOnce(R::Params, Responder<R>) -> Result<()>
65{ 65{
66 match req.take() { 66 let id = req.id;
67 None => Ok(()), 67 match parse_request_as::<R>(req)? {
68 Some(r) => match parse_request_as::<R>(r)? { 68 Ok((params, responder)) => {
69 Ok((params, responder)) => f(params, responder), 69 let () = f(params, responder)?;
70 Err(r) => { 70 Ok(Ok(id))
71 *req = Some(r); 71 },
72 Ok(()) 72 Err(r) => Ok(Err(r)),
73 }
74 }
75 } 73 }
76} 74}
77 75