summaryrefslogtreecommitdiff
path: root/core/ops_builtin.rs
diff options
context:
space:
mode:
Diffstat (limited to 'core/ops_builtin.rs')
-rw-r--r--core/ops_builtin.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/core/ops_builtin.rs b/core/ops_builtin.rs
index d33565caf..a6cf82fe9 100644
--- a/core/ops_builtin.rs
+++ b/core/ops_builtin.rs
@@ -1,6 +1,7 @@
use crate::error::type_error;
use crate::error::AnyError;
use crate::include_js_files;
+use crate::op_async;
use crate::op_sync;
use crate::ops_metrics::OpMetrics;
use crate::resources::ResourceId;
@@ -36,6 +37,10 @@ pub(crate) fn init_builtins() -> Extension {
("op_metrics", op_sync(op_metrics)),
("op_void_sync", void_op_sync()),
("op_void_async", void_op_async()),
+ // TODO(@AaronO): track IO metrics for builtin streams
+ ("op_read", op_async(op_read)),
+ ("op_write", op_async(op_write)),
+ ("op_shutdown", op_async(op_shutdown)),
])
.build()
}
@@ -170,3 +175,30 @@ pub fn op_metrics(
let per_op = state.tracker.per_op();
Ok((aggregate, per_op))
}
+
+async fn op_read(
+ state: Rc<RefCell<OpState>>,
+ rid: ResourceId,
+ buf: ZeroCopyBuf,
+) -> Result<u32, AnyError> {
+ let resource = state.borrow().resource_table.get_any(rid)?;
+ resource.read(buf).await.map(|n| n as u32)
+}
+
+async fn op_write(
+ state: Rc<RefCell<OpState>>,
+ rid: ResourceId,
+ buf: ZeroCopyBuf,
+) -> Result<u32, AnyError> {
+ let resource = state.borrow().resource_table.get_any(rid)?;
+ resource.write(buf).await.map(|n| n as u32)
+}
+
+async fn op_shutdown(
+ state: Rc<RefCell<OpState>>,
+ rid: ResourceId,
+ _: (),
+) -> Result<(), AnyError> {
+ let resource = state.borrow().resource_table.get_any(rid)?;
+ resource.shutdown().await
+}