idb 0.6.5

A futures based crate for interacting with IndexedDB on browsers using webassembly
Documentation
#[macro_use]
mod macros;

pub use self::{
    delete_database_request::DeleteDatabaseRequestFuture,
    open_database_request::OpenDatabaseRequestFuture,
};

mod open_database_request {
    use wasm_bindgen::JsValue;
    use web_sys::Event;

    use crate::{request::OpenDatabaseRequest, Database, Error, Request};

    impl_database_request_future!(
        OpenDatabaseRequestFuture,
        crate::request::OpenDatabaseRequest,
        crate::Database,
        "Future returned by [`OpenDatabaseRequest::into_future`](crate::request::OpenDatabaseRequest::into_future)."
    );

    fn success_callback(event: Event) -> Result<Database, Error> {
        let target = event.target().ok_or_else(|| Error::EventTargetNotFound)?;
        let request = OpenDatabaseRequest::try_from(target)?;

        let result = request.result()?;

        if result.is_undefined() {
            Err(Error::UnexpectedJsType("database", JsValue::UNDEFINED))
        } else if result.is_null() {
            Err(Error::UnexpectedJsType("database", JsValue::NULL))
        } else {
            result.try_into()
        }
    }
}

mod delete_database_request {
    use web_sys::Event;

    use crate::{request::DeleteDatabaseRequest, Error, Request};

    impl_database_request_future!(
        DeleteDatabaseRequestFuture,
        crate::request::DeleteDatabaseRequest,
        (),
        "Future returned by [`DeleteDatabaseRequest::into_future`](crate::request::DeleteDatabaseRequest::into_future)."
    );

    fn success_callback(event: Event) -> Result<(), Error> {
        let target = event.target().ok_or_else(|| Error::EventTargetNotFound)?;
        let request = DeleteDatabaseRequest::try_from(target)?;

        let result = request.result()?;

        if result.is_null() || result.is_undefined() {
            Ok(())
        } else {
            Err(Error::UnexpectedJsType("null", result))
        }
    }
}