summaryrefslogtreecommitdiff
path: root/core/ops.rs
diff options
context:
space:
mode:
authorAaron O'Mullan <aaron.omullan@gmail.com>2021-11-04 16:44:34 +0100
committerGitHub <noreply@github.com>2021-11-04 16:44:34 +0100
commit44511e4f330e2d7099a16ed836629fa73dde9831 (patch)
tree7be25493513d50314ab71452693b317ef4194a49 /core/ops.rs
parentefe956b4fd51818e3a982b9d7c4111c408d07291 (diff)
feat(runtime): give OS errors .code attributes (#12591)
This adds `.code` attributes to errors returned by the op-layer, facilitating classifying OS errors and helping node-compat. Similar to Node, these `.code` attributes are stringified names of unix ERRNOs, the mapping tables are generated by [tools/codegen_error_codes.js](https://gist.github.com/AaronO/dfa1106cc6c7e2a6ebe4dba9d5248858) and derived from libuv and rust's std internals
Diffstat (limited to 'core/ops.rs')
-rw-r--r--core/ops.rs2
1 files changed, 2 insertions, 0 deletions
diff --git a/core/ops.rs b/core/ops.rs
index ab233ef29..f62fe7a8e 100644
--- a/core/ops.rs
+++ b/core/ops.rs
@@ -140,6 +140,7 @@ pub struct OpError {
#[serde(rename = "$err_class_name")]
class_name: &'static str,
message: String,
+ code: Option<&'static str>,
}
pub fn serialize_op_result<R: Serialize + 'static>(
@@ -151,6 +152,7 @@ pub fn serialize_op_result<R: Serialize + 'static>(
Err(err) => OpResult::Err(OpError {
class_name: (state.borrow().get_error_class_fn)(&err),
message: err.to_string(),
+ code: crate::error_codes::get_error_code(&err),
}),
}
}