Skip to main content

ferrijs_std/utils/
error.rs

1// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2// SPDX-License-Identifier: Apache-2.0
3use rquickjs::{CatchResultExt, CaughtError, Ctx, Error, IntoJs, Result, Value};
4
5pub trait ErrorExtensions<'js> {
6    fn into_value(self, ctx: &Ctx<'js>) -> Result<Value<'js>>;
7}
8
9impl<'js> ErrorExtensions<'js> for Error {
10    fn into_value(self, ctx: &Ctx<'js>) -> Result<Value<'js>> {
11        Err::<(), _>(self).catch(ctx).unwrap_err().into_value(ctx)
12    }
13}
14
15impl<'js> ErrorExtensions<'js> for CaughtError<'js> {
16    fn into_value(self, ctx: &Ctx<'js>) -> Result<Value<'js>> {
17        Ok(match self {
18            CaughtError::Error(err) => err.to_string().into_js(ctx)?,
19            CaughtError::Exception(ex) => ex.into_value(),
20            CaughtError::Value(val) => val,
21        })
22    }
23}