idb_sys/request/
request_ready_state.rs

1use wasm_bindgen::JsValue;
2use web_sys::IdbRequestReadyState;
3
4use crate::Error;
5
6/// State of a request.
7#[derive(Debug, Clone, Copy, PartialEq, Eq)]
8pub enum RequestReadyState {
9    /// Request is still ongoing.
10    Pending,
11    /// Request has already completed.
12    Done,
13}
14
15impl From<RequestReadyState> for IdbRequestReadyState {
16    fn from(state: RequestReadyState) -> Self {
17        match state {
18            RequestReadyState::Pending => IdbRequestReadyState::Pending,
19            RequestReadyState::Done => IdbRequestReadyState::Done,
20        }
21    }
22}
23
24impl TryFrom<IdbRequestReadyState> for RequestReadyState {
25    type Error = Error;
26
27    fn try_from(value: IdbRequestReadyState) -> Result<Self, Self::Error> {
28        match value {
29            IdbRequestReadyState::Pending => Ok(RequestReadyState::Pending),
30            IdbRequestReadyState::Done => Ok(RequestReadyState::Done),
31            _ => Err(Error::InvalidReqeustReadyState),
32        }
33    }
34}
35
36impl TryFrom<JsValue> for RequestReadyState {
37    type Error = Error;
38
39    fn try_from(value: JsValue) -> Result<Self, Self::Error> {
40        IdbRequestReadyState::from_js_value(&value)
41            .ok_or(Error::InvalidCursorDirection)?
42            .try_into()
43    }
44}
45
46impl From<RequestReadyState> for JsValue {
47    fn from(direction: RequestReadyState) -> Self {
48        let inner: IdbRequestReadyState = direction.into();
49        inner.into()
50    }
51}