ferrijs_std/events/
event_target.rs1use std::sync::{Arc, RwLock};
4
5use rquickjs::{
6 class::{Trace, Tracer},
7 JsLifetime,
8};
9
10use super::{Emitter, EventList, Events};
11
12#[rquickjs::class]
13#[derive(Clone)]
14pub struct EventTarget<'js> {
15 pub events: Events<'js>,
16}
17
18unsafe impl<'js> JsLifetime<'js> for EventTarget<'js> {
19 type Changed<'to> = EventTarget<'to>;
20}
21
22impl<'js> Emitter<'js> for EventTarget<'js> {
23 fn get_event_list(&self) -> Arc<RwLock<EventList<'js>>> {
24 self.events.clone()
25 }
26}
27
28impl<'js> Trace<'js> for EventTarget<'js> {
29 fn trace<'a>(&self, tracer: Tracer<'a, 'js>) {
30 self.trace_event_emitter(tracer);
31 }
32}
33
34#[rquickjs::methods]
35impl<'js> EventTarget<'js> {
36 #[qjs(constructor)]
37 pub fn new() -> Self {
38 Self {
39 #[allow(clippy::arc_with_non_send_sync)]
40 events: Arc::new(RwLock::new(Vec::new())),
41 }
42 }
43}