idb 0.6.5

A futures based crate for interacting with IndexedDB on browsers using webassembly
Documentation
macro_rules! impl_store_event {
    ($type: ident, $base_event: ty, $target: ty, $output: ty, $mapper: ty, $doc: expr) => {
        #[doc = $doc]
        #[derive(Debug, Clone, PartialEq, Eq)]
        pub struct $type {
            inner: $base_event,
        }

        impl crate::Event for $type {
            type Target = $target;

            fn target(&self) -> Result<Self::Target, crate::Error> {
                let target = self
                    .inner
                    .target()
                    .ok_or(crate::Error::EventTargetNotFound)?;
                <$target>::try_from(target)
            }
        }

        impl crate::StoreEvent for $type {
            type Output = $output;

            fn result(&self) -> Result<Self::Output, crate::Error> {
                let target = <Self as crate::Event>::target(self)?;
                <$mapper as crate::mappers::OutputMapper>::map(crate::Request::result(&target))
            }

            fn error(&self) -> crate::Error {
                let target = match <Self as crate::Event>::target(self) {
                    Ok(target) => target,
                    Err(err) => return err,
                };
                crate::mappers::ErrorMapper::map(crate::Request::error(&target))
            }
        }

        impl From<$base_event> for $type {
            fn from(inner: $base_event) -> Self {
                Self { inner }
            }
        }

        impl From<$type> for $base_event {
            fn from(event: $type) -> Self {
                event.inner
            }
        }

        impl TryFrom<wasm_bindgen::JsValue> for $type {
            type Error = crate::Error;

            fn try_from(value: wasm_bindgen::JsValue) -> Result<Self, Self::Error> {
                wasm_bindgen::JsCast::dyn_into::<$base_event>(value)
                    .map(Into::into)
                    .map_err(|value| crate::Error::UnexpectedJsType(stringify!($base_event), value))
            }
        }

        impl From<$type> for wasm_bindgen::JsValue {
            fn from(value: $type) -> Self {
                value.inner.into()
            }
        }
    };
}