diff options
Diffstat (limited to 'runtime/ops/mod.rs')
-rw-r--r-- | runtime/ops/mod.rs | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/runtime/ops/mod.rs b/runtime/ops/mod.rs index 0da4b9771..3ead7efa2 100644 --- a/runtime/ops/mod.rs +++ b/runtime/ops/mod.rs @@ -28,7 +28,8 @@ use crate::metrics::metrics_op; use deno_core::error::AnyError; use deno_core::json_op_async; use deno_core::json_op_sync; -use deno_core::serde_json::Value; +use deno_core::serde::de::DeserializeOwned; +use deno_core::serde::Serialize; use deno_core::BufVec; use deno_core::JsRuntime; use deno_core::OpState; @@ -37,18 +38,24 @@ use std::cell::RefCell; use std::future::Future; use std::rc::Rc; -pub fn reg_json_async<F, R>(rt: &mut JsRuntime, name: &'static str, op_fn: F) -where - F: Fn(Rc<RefCell<OpState>>, Value, BufVec) -> R + 'static, - R: Future<Output = Result<Value, AnyError>> + 'static, +pub fn reg_json_async<F, V, R, RV>( + rt: &mut JsRuntime, + name: &'static str, + op_fn: F, +) where + F: Fn(Rc<RefCell<OpState>>, V, BufVec) -> R + 'static, + V: DeserializeOwned, + R: Future<Output = Result<RV, AnyError>> + 'static, + RV: Serialize, { rt.register_op(name, metrics_op(json_op_async(op_fn))); } -pub fn reg_json_sync<F>(rt: &mut JsRuntime, name: &'static str, op_fn: F) +pub fn reg_json_sync<F, V, R>(rt: &mut JsRuntime, name: &'static str, op_fn: F) where - F: Fn(&mut OpState, Value, &mut [ZeroCopyBuf]) -> Result<Value, AnyError> - + 'static, + F: Fn(&mut OpState, V, &mut [ZeroCopyBuf]) -> Result<R, AnyError> + 'static, + V: DeserializeOwned, + R: Serialize, { rt.register_op(name, metrics_op(json_op_sync(op_fn))); } |