keyhive_wasm 0.3.0

WebAssembly wrappers for keyhive_core
Documentation
use std::sync::Arc;

use super::{change_id::JsChangeId, document_id::JsDocumentId};
use futures::lock::Mutex;
use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub struct DocContentRefs {
    pub(crate) doc_id: JsDocumentId,
    pub(crate) change_hashes: Arc<Mutex<Vec<JsChangeId>>>,
}

#[wasm_bindgen]
impl DocContentRefs {
    #[wasm_bindgen(constructor)]
    pub fn new(doc_id: JsDocumentId, change_hashes: Vec<JsChangeId>) -> Result<Self, String> {
        Ok(Self {
            doc_id,
            change_hashes: Arc::new(Mutex::new(change_hashes)),
        })
    }

    #[wasm_bindgen(js_name = addChangeId)]
    pub async fn add_change_id(&self, hash: JsChangeId) {
        self.change_hashes.lock().await.push(hash)
    }

    #[wasm_bindgen(getter, js_name = docId)]
    pub fn doc_id(&self) -> JsDocumentId {
        self.doc_id
    }

    #[wasm_bindgen(getter)]
    pub async fn change_hashes(&self) -> Vec<JsChangeId> {
        self.change_hashes.lock().await.clone()
    }
}