ferridriver_script/bindings/
console_message.rs1use ferridriver::console_message::ConsoleMessage as CoreConsoleMessage;
10use rquickjs::JsLifetime;
11use rquickjs::class::{Class, Trace};
12
13use crate::bindings::js_handle::JSHandleJs;
14
15#[derive(JsLifetime, Trace)]
16#[rquickjs::class(rename = "ConsoleMessage")]
17pub struct ConsoleMessageJs {
18 #[qjs(skip_trace)]
19 inner: CoreConsoleMessage,
20}
21
22impl ConsoleMessageJs {
23 #[must_use]
24 pub fn new(inner: CoreConsoleMessage) -> Self {
25 Self { inner }
26 }
27}
28
29#[rquickjs::methods]
30impl ConsoleMessageJs {
31 #[qjs(rename = "type")]
33 pub fn type_str(&self) -> String {
34 self.inner.type_str().to_string()
35 }
36
37 #[qjs(rename = "text")]
39 pub fn text(&self) -> String {
40 self.inner.text().to_string()
41 }
42
43 #[qjs(rename = "args")]
45 pub fn args<'js>(&self, ctx: rquickjs::Ctx<'js>) -> rquickjs::Result<Vec<rquickjs::Value<'js>>> {
46 let mut out = Vec::with_capacity(self.inner.args().len());
47 for h in self.inner.args() {
48 let instance = Class::instance(ctx.clone(), JSHandleJs::new(h.clone()))?;
49 out.push(rquickjs::IntoJs::into_js(instance, &ctx)?);
50 }
51 Ok(out)
52 }
53
54 #[qjs(rename = "location")]
56 pub fn location<'js>(&self, ctx: rquickjs::Ctx<'js>) -> rquickjs::Result<rquickjs::Value<'js>> {
57 let loc = self.inner.location();
58 let obj = rquickjs::Object::new(ctx.clone())?;
59 obj.set("url", loc.url.clone())?;
60 obj.set("lineNumber", loc.line_number)?;
61 obj.set("columnNumber", loc.column_number)?;
62 rquickjs::IntoJs::into_js(obj, &ctx)
63 }
64
65 #[qjs(rename = "timestamp")]
67 pub fn timestamp(&self) -> f64 {
68 #[allow(clippy::cast_precision_loss)]
69 {
70 self.inner.timestamp() as f64
71 }
72 }
73}