Skip to main content

ferrijs_std/events/
event_target.rs

1// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2// SPDX-License-Identifier: Apache-2.0
3use 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}