diff options
author | Aaron O'Mullan <aaron.omullan@gmail.com> | 2021-04-18 15:29:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-18 15:29:06 +0200 |
commit | 5b31d0f846f95bc8f4f51ff59503e77c9caead2e (patch) | |
tree | f77f7624ede780dc02297474725cec606da8d2f7 | |
parent | 9b5d8a2f2c30fc7b80b6f783aadb9cb2778adebd (diff) |
cleanup(core): simplify op_async(), drop need for try_dispatch_op() (#10240)
-rw-r--r-- | core/ops_json.rs | 35 |
1 files changed, 11 insertions, 24 deletions
diff --git a/core/ops_json.rs b/core/ops_json.rs index cf2e6230b..d368453d9 100644 --- a/core/ops_json.rs +++ b/core/ops_json.rs @@ -4,7 +4,6 @@ use crate::error::AnyError; use crate::serialize_op_result; use crate::Op; use crate::OpFn; -use crate::OpPayload; use crate::OpState; use crate::ZeroCopyBuf; use serde::de::DeserializeOwned; @@ -81,33 +80,21 @@ where R: Future<Output = Result<RV, AnyError>> + 'static, RV: Serialize + 'static, { - let try_dispatch_op = move |state: Rc<RefCell<OpState>>, - p: OpPayload, - buf: Option<ZeroCopyBuf>| - -> Result<Op, AnyError> { - let pid = p.promise_id; - // Parse args - let args = p.deserialize()?; + Box::new(move |state, payload, buf| -> Op { + let pid = payload.promise_id; + // Deserialize args, sync error on failure + let args = match payload.deserialize() { + Ok(args) => args, + Err(err) => { + return Op::Sync(serialize_op_result(Err::<(), AnyError>(err), state)) + } + }; use crate::futures::FutureExt; let fut = op_fn(state.clone(), args, buf) .map(move |result| (pid, serialize_op_result(result, state))); - Ok(Op::Async(Box::pin(fut))) - }; - - Box::new( - move |state: Rc<RefCell<OpState>>, - p: OpPayload, - b: Option<ZeroCopyBuf>| - -> Op { - match try_dispatch_op(state.clone(), p, b) { - Ok(op) => op, - Err(err) => { - Op::Sync(serialize_op_result(Err::<(), AnyError>(err), state)) - } - } - }, - ) + Op::Async(Box::pin(fut)) + }) } #[cfg(test)] |