1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#[macro_use]
mod macros;

mod version_change;

use crate::{Database, Error, Event};

pub use self::version_change::VersionChangeEvent;

/// Trait for defining events triggered when a database is opened or deleted.
pub trait DatabaseEvent: Event {
    /// Returns the database that triggered the event.
    fn database(&self) -> Result<Database, Error>;
}

impl DatabaseEvent for web_sys::Event {
    fn database(&self) -> Result<Database, Error> {
        let target = self.target().ok_or_else(|| Error::EventTargetNotFound)?;
        Database::try_from(target)
    }
}

impl_database_event!(
    OpenDatabaseRequestEvent,
    web_sys::Event,
    crate::request::OpenDatabaseRequest,
    "Event for [`OpenDatabaseRequest`](crate::request::OpenDatabaseRequest) handlers."
);
impl_database_event!(
    DeleteDatabaseRequestEvent,
    web_sys::Event,
    crate::request::DeleteDatabaseRequest,
    "Event for [`DeleteDatabaseRequest`](crate::request::DeleteDatabaseRequest) handlers."
);