use ferridriver::web_error::{ErrorDetails, WebError as CoreWebError};
use rquickjs::JsLifetime;
use rquickjs::class::Trace;
#[derive(JsLifetime, Trace)]
#[rquickjs::class(rename = "WebError")]
pub struct WebErrorJs {
#[qjs(skip_trace)]
inner: CoreWebError,
}
impl WebErrorJs {
#[must_use]
pub fn new(inner: CoreWebError) -> Self {
Self { inner }
}
}
#[rquickjs::methods]
impl WebErrorJs {
#[qjs(rename = "error")]
pub fn error<'js>(&self, ctx: rquickjs::Ctx<'js>) -> rquickjs::Result<rquickjs::Value<'js>> {
build_native_error(&ctx, self.inner.error())
}
}
pub fn build_native_error<'js>(
ctx: &rquickjs::Ctx<'js>,
details: &ErrorDetails,
) -> rquickjs::Result<rquickjs::Value<'js>> {
let err_ctor: rquickjs::function::Constructor<'js> = ctx.globals().get("Error")?;
let err: rquickjs::Object<'js> = err_ctor.construct((details.message.clone(),))?;
err.set("name", details.name.clone())?;
if !details.stack.is_empty() {
err.set("stack", details.stack.clone())?;
}
Ok(err.into_value())
}