#![cfg(all(direct_wasm, target_arch = "wasm32", feature = "serde"))]
use js_sys::Array;
use wasm_bindgen::prelude::*;
#[wasm_bindgen(start)]
pub fn start() {
crate::privacy::install_redacted_panic_hook();
}
#[wasm_bindgen]
pub fn detect(xml: &str) -> Option<String> {
crate::detect(xml).map(|id| id.message_name())
}
#[wasm_bindgen]
pub fn from_namespace(namespace: &str) -> Option<String> {
crate::from_namespace(namespace).map(|id| id.message_name())
}
#[wasm_bindgen]
pub fn mx_id(namespace_or_name: &str) -> Option<String> {
crate::wasm_compat::mx_id(namespace_or_name)
}
#[wasm_bindgen]
pub fn business_area_description(code: &str) -> Option<String> {
crate::BusinessArea::from_code(code).map(|a| a.description().to_string())
}
#[wasm_bindgen]
pub fn business_areas() -> Array {
crate::BusinessArea::ALL
.iter()
.map(|a| JsValue::from_str(a.code()))
.collect()
}
#[wasm_bindgen]
pub fn catalogue_contains(message_name: &str) -> bool {
crate::catalogue::contains(message_name)
}
#[wasm_bindgen]
pub fn namespace_of(message_name: &str) -> Option<String> {
crate::catalogue::from_message_name(message_name).map(|e| e.namespace.to_string())
}
#[wasm_bindgen]
pub fn business_area_of(message_name: &str) -> Option<String> {
crate::catalogue::from_message_name(message_name).map(|e| e.business_area.to_string())
}
#[wasm_bindgen]
pub fn has_model(message_name: &str) -> bool {
crate::catalogue::from_message_name(message_name)
.map(|e| e.has_model)
.unwrap_or(false)
}
#[wasm_bindgen]
pub fn catalogue_entry(message_name: &str) -> Option<String> {
crate::wasm_compat::catalogue_entry(message_name)
}
#[wasm_bindgen]
pub fn catalogue_all() -> Array {
crate::catalogue::all()
.iter()
.map(|e| JsValue::from_str(e.message_name))
.collect()
}
#[wasm_bindgen]
pub fn parse_app_hdr(xml: &str) -> Option<String> {
crate::app_hdr::parse_business_header(xml).map(|header| crate::wasm_compat::header(&header))
}
#[wasm_bindgen]
pub fn build_app_hdr(
from: Option<String>,
to: Option<String>,
biz_msg_idr: Option<String>,
msg_def_idr: Option<String>,
cre_dt: Option<String>,
) -> String {
crate::app_hdr::BusinessHeader {
from,
to,
biz_msg_idr,
msg_def_idr,
cre_dt,
}
.to_app_hdr_xml()
}
#[wasm_bindgen]
pub fn extract_metadata(xml: &str) -> String {
crate::wasm_compat::metadata(&crate::metadata::extract(xml))
}
#[wasm_bindgen]
pub fn read_business_message(xml: &str) -> String {
crate::wasm_compat::business_message(&crate::read_business_message(xml))
}
#[wasm_bindgen]
pub fn node_text(xml: &str, path: &str) -> Option<String> {
let root = crate::MxNode::parse(xml)?;
let segs: Vec<&str> = path.split('/').filter(|s| !s.is_empty()).collect();
root.at(&segs).and_then(|n| n.text()).map(str::to_string)
}
#[wasm_bindgen]
pub fn node_find(xml: &str, local: &str) -> Option<String> {
let root = crate::MxNode::parse(xml)?;
root.find(local).and_then(|n| n.text()).map(str::to_string)
}
#[wasm_bindgen]
pub fn node_attr(xml: &str, path: &str, attr: &str) -> Option<String> {
let root = crate::MxNode::parse(xml)?;
let segs: Vec<&str> = path.split('/').filter(|s| !s.is_empty()).collect();
root.at(&segs)
.and_then(|n| n.attr(attr))
.map(str::to_string)
}
#[wasm_bindgen]
pub fn node_find_attr(xml: &str, local: &str, attr: &str) -> Option<String> {
let root = crate::MxNode::parse(xml)?;
root.find(local)
.and_then(|n| n.attr(attr))
.map(str::to_string)
}
#[wasm_bindgen]
pub fn node_to_json(xml: &str) -> Option<String> {
crate::MxNode::parse(xml)
.as_ref()
.map(crate::wasm_compat::node)
}
#[wasm_bindgen]
pub fn node_find_all(xml: &str, local: &str) -> Array {
match crate::MxNode::parse(xml) {
Some(root) => root
.find_all(local)
.into_iter()
.filter_map(|n| n.text())
.map(JsValue::from_str)
.collect(),
None => Array::new(),
}
}