diff options
author | Aleksey Kladov <[email protected]> | 2018-08-31 10:04:33 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2018-08-31 10:04:33 +0100 |
commit | d999f4b56803b613dcf354862e1db4b5d2a8a8d0 (patch) | |
tree | 4e046b6c2be2ab8fe0f4551262b24c6cc6a11470 /crates/server/src/dispatch.rs | |
parent | efa6a952b4cb9c9f139822fbf9781a610bba3813 (diff) |
cancelation
Diffstat (limited to 'crates/server/src/dispatch.rs')
-rw-r--r-- | crates/server/src/dispatch.rs | 18 |
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 | ||
61 | pub fn handle_request<R, F>(req: &mut Option<RawRequest>, f: F) -> Result<()> | 61 | pub 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 | ||