keyhive_wasm 0.3.0

WebAssembly wrappers for keyhive_core
Documentation
use super::{
    change_id::JsChangeId, event_handler::JsEventHandler, identifier::JsIdentifier,
    signer::JsSigner,
};
use dupe::Dupe;
use keyhive_core::principal::peer::Peer;
use wasm_bindgen::prelude::*;
use wasm_refgen::wasm_refgen;

#[wasm_bindgen(js_name = Peer)]
#[derive(Debug, Clone, Dupe)]
pub struct JsPeer(pub(crate) Peer<JsSigner, JsChangeId, JsEventHandler>);

#[wasm_refgen(js_ref = JsPeerRef)]
#[wasm_bindgen(js_class = Peer)]
impl JsPeer {
    #[wasm_bindgen(getter)]
    pub fn id(&self) -> JsIdentifier {
        self.0.id().into()
    }

    #[wasm_bindgen(js_name = toString)]
    pub fn to_js_string(&self) -> String {
        self.0
            .id()
            .as_slice()
            .iter()
            .fold(String::new(), |mut acc, byte| {
                acc.push_str(&format!("{:#x}", byte));
                acc
            })
    }

    #[wasm_bindgen(js_name = isIndividual)]
    pub fn is_individual(&self) -> bool {
        matches!(self.0, Peer::Individual(_, _))
    }

    #[wasm_bindgen(js_name = isGroup)]
    pub fn is_group(&self) -> bool {
        matches!(self.0, Peer::Group(_, _))
    }

    #[wasm_bindgen(js_name = isDocument)]
    pub fn is_document(&self) -> bool {
        matches!(self.0, Peer::Document(_, _))
    }
}