floating-ui 0.0.1

Rust bindings for Floating UI
Documentation
use std::result::Result as StdResult;
use thiserror::Error as ThisError;
use wasm_bindgen::JsValue;

#[derive(ThisError, Debug, Clone)]
pub enum Error {
    #[error("Failed to parse `{0}` for {1}")]
    InvalidValue(String, &'static str),

    #[error("Expected `{0}` to be a `{0}::{1}`")]
    InvalidEnumConversion(&'static str, &'static str),

    #[error("Expected `{0}` to be a `{1}`")]
    InvalidJsValue(String, &'static str),

    #[error("Failed to get key `{0}`. {1} is not an object.")]
    ReflectGet(String, String),

    #[error("Failed to set key `{0}`. {1}")]
    ReflectSet(String, String),

    #[error("An unknown error occurred")]
    Unknown,
}

impl Error {
    pub fn map_reflect_get(key: String) -> impl Fn(JsValue) -> Error {
        move |js_error| {
            Error::ReflectSet(
                key.clone(),
                js_error.as_string().expect("TypeError expected"),
            )
        }
    }

    pub fn map_reflect_set(key: String) -> impl Fn(JsValue) -> Error {
        move |js_error| {
            Error::ReflectSet(
                key.clone(),
                format!(
                    "`{}` is not an object.",
                    js_error.as_string().expect("TypeError expected")
                ),
            )
        }
    }
}

pub type Result<T> = StdResult<T, Error>;