use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub struct WasmSynapseNode {
entity_id: String,
config: WasmConfig,
}
#[wasm_bindgen]
#[derive(Debug, Clone)]
pub struct WasmConfig {
entity_name: String,
entity_type: String,
}
#[wasm_bindgen]
impl WasmConfig {
#[wasm_bindgen(getter)]
pub fn entity_name(&self) -> String {
self.entity_name.clone()
}
#[wasm_bindgen(getter)]
pub fn entity_type(&self) -> String {
self.entity_type.clone()
}
}
#[wasm_bindgen]
impl WasmSynapseNode {
#[wasm_bindgen(constructor)]
pub fn new(entity_name: String, entity_type: String) -> WasmSynapseNode {
let entity_id = format!("{}@wasm.synapse.local", entity_name);
WasmSynapseNode {
entity_id,
config: WasmConfig {
entity_name,
entity_type,
},
}
}
#[wasm_bindgen(getter)]
pub fn entity_id(&self) -> String {
self.entity_id.clone()
}
#[wasm_bindgen(getter)]
pub fn entity_name(&self) -> String {
self.config.entity_name.clone()
}
#[wasm_bindgen(getter)]
pub fn entity_type(&self) -> String {
self.config.entity_type.clone()
}
#[wasm_bindgen]
pub fn log(&self, message: &str) {
web_sys::console::log_1(&format!("[{}] {}", self.entity_id, message).into());
}
#[wasm_bindgen]
pub fn send_message(&self, target: &str, message: &str) -> String {
let formatted = format!("Message from {} to {}: {}", self.entity_id, target, message);
self.log(&formatted);
formatted
}
}
#[wasm_bindgen(start)]
pub fn init() {
#[cfg(feature = "console_error_panic_hook")]
console_error_panic_hook::set_once();
#[cfg(feature = "wasm-logger")]
wasm_logger::init(wasm_logger::Config::default());
}
#[wasm_bindgen]
pub fn get_timestamp() -> String {
js_sys::Date::new_0().to_iso_string().as_string().unwrap_or_default()
}
#[wasm_bindgen]
pub fn test_wasm() -> String {
"WASM is working! Synapse Neural Communication Network is ready.".to_string()
}