floating-ui 0.0.1

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

use crate::{
    error::{Error, Result},
    utils::SideObject,
    utils_::object_utils,
};

#[derive(Default, Clone)]
pub struct Hide {
    pub reference_hidden: Option<bool>,
    pub escaped: Option<bool>,
    pub reference_hidden_offsets: Option<SideObject>,
    pub escaped_offsets: Option<SideObject>,
}

impl TryInto<JsValue> for Hide {
    type Error = Error;

    fn try_into(self) -> Result<JsValue> {
        let obj = js_sys::Object::new();

        object_utils::set_option_bool(&obj, "referenceHidden", self.reference_hidden)?;
        object_utils::set_option_bool(&obj, "escaped", self.escaped)?;
        object_utils::try_set_option_js_value(
            &obj,
            "referenceHiddenOffsets",
            self.reference_hidden_offsets,
        )?;
        object_utils::try_set_option_js_value(&obj, "escapedOffsets", self.escaped_offsets)?;

        Ok(obj.into())
    }
}

impl TryFrom<JsValue> for Hide {
    type Error = Error;

    fn try_from(value: JsValue) -> Result<Self> {
        let obj = js_sys::Object::from(value);

        let reference_hidden = object_utils::get_option_bool(&obj, "referenceHidden")?;
        let escaped = object_utils::get_option_bool(&obj, "escaped")?;
        let reference_hidden_offsets =
            object_utils::try_get_option::<SideObject>(&obj, "referenceHiddenOffsets")?;
        let escaped_offsets = object_utils::try_get_option::<SideObject>(&obj, "escapedOffsets")?;

        Ok(Self {
            reference_hidden,
            escaped,
            reference_hidden_offsets,
            escaped_offsets,
        })
    }
}