From 1c7164257d146c279b61708ddf8514d85b5fc11c Mon Sep 17 00:00:00 2001 From: Aaron O'Mullan Date: Sun, 25 Apr 2021 19:23:22 +0200 Subject: refactor(core): move builtin ops to their own file (#10336) --- core/ops_builtin.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 core/ops_builtin.rs (limited to 'core/ops_builtin.rs') diff --git a/core/ops_builtin.rs b/core/ops_builtin.rs new file mode 100644 index 000000000..5c74c7330 --- /dev/null +++ b/core/ops_builtin.rs @@ -0,0 +1,45 @@ +use crate::error::bad_resource_id; +use crate::error::type_error; +use crate::error::AnyError; +use crate::resources::ResourceId; +use crate::OpState; +use crate::ZeroCopyBuf; + +// TODO(@AaronO): provide these ops grouped as a runtime extension +// e.g: +// pub fn init_builtins() -> Extension { ... } + +/// Return map of resources with id as key +/// and string representation as value. +/// +/// This op must be wrapped in `op_sync`. +pub fn op_resources( + state: &mut OpState, + _args: (), + _zero_copy: Option, +) -> Result, AnyError> { + let serialized_resources = state + .resource_table + .names() + .map(|(rid, name)| (rid, name.to_string())) + .collect(); + Ok(serialized_resources) +} + +/// Remove a resource from the resource table. +/// +/// This op must be wrapped in `op_sync`. +pub fn op_close( + state: &mut OpState, + rid: Option, + _zero_copy: Option, +) -> Result<(), AnyError> { + // TODO(@AaronO): drop Option after improving type-strictness balance in serde_v8 + let rid = rid.ok_or_else(|| type_error("missing or invalid `rid`"))?; + state + .resource_table + .close(rid) + .ok_or_else(bad_resource_id)?; + + Ok(()) +} -- cgit v1.2.3