floating-ui 0.0.1

Rust bindings for Floating UI
Documentation
use js_sys::Promise;
use wasm_bindgen::JsValue;

use crate::{Error, Result};

#[derive(Clone)]
pub enum Promisable<T> {
    T(T),
    Promise(Promise),
}

impl<T> Promisable<T> {
    pub fn from_promise(promise: Promise) -> Self {
        Self::Promise(promise)
    }
}

impl<T> From<T> for Promisable<T> {
    fn from(t: T) -> Self {
        Self::T(t)
    }
}

impl<T> Into<JsValue> for Promisable<T>
where
    T: Into<JsValue>,
{
    fn into(self) -> JsValue {
        match self {
            Promisable::T(t) => t.into(),
            Promisable::Promise(promise) => promise.into(),
        }
    }
}

impl<T> Promisable<T> {
    pub fn try_into_js_value(self) -> Result<JsValue>
    where
        T: TryInto<JsValue, Error = Error>,
    {
        match self {
            Promisable::T(t) => t.try_into(),
            Promisable::Promise(promise) => Ok(promise.into()),
        }
    }
}