use crate::core::namespace;
use crate::wasm::error::{xmp_error_to_wasm_error, XmpError};
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum Namespace {
Xmp,
Dc,
Exif,
ExifAux,
IptcCore,
IptcExt,
Photoshop,
CameraRaw,
XmpRights,
XmpMm,
XmpBj,
Tiff,
Pdf,
Pdfx,
Pdfa,
XmpDm,
XmpPaged,
XmpGraphics,
XmpImage,
Rdf,
Xml,
}
#[wasm_bindgen]
pub fn namespace_uri(ns: Namespace) -> String {
match ns {
Namespace::Xmp => namespace::ns::XMP.to_string(),
Namespace::Dc => namespace::ns::DC.to_string(),
Namespace::Exif => namespace::ns::EXIF.to_string(),
Namespace::ExifAux => namespace::ns::EXIF_AUX.to_string(),
Namespace::IptcCore => namespace::ns::IPTC_CORE.to_string(),
Namespace::IptcExt => namespace::ns::IPTC_EXT.to_string(),
Namespace::Photoshop => namespace::ns::PHOTOSHOP.to_string(),
Namespace::CameraRaw => namespace::ns::CAMERA_RAW.to_string(),
Namespace::XmpRights => namespace::ns::XMP_RIGHTS.to_string(),
Namespace::XmpMm => namespace::ns::XMP_MM.to_string(),
Namespace::XmpBj => namespace::ns::XMP_BJ.to_string(),
Namespace::Tiff => namespace::ns::TIFF.to_string(),
Namespace::Pdf => namespace::ns::PDF.to_string(),
Namespace::Pdfx => namespace::ns::PDFX.to_string(),
Namespace::Pdfa => namespace::ns::PDFA.to_string(),
Namespace::XmpDm => namespace::ns::XMP_DM.to_string(),
Namespace::XmpPaged => namespace::ns::XMP_PAGED.to_string(),
Namespace::XmpGraphics => namespace::ns::XMP_GRAPHICS.to_string(),
Namespace::XmpImage => namespace::ns::XMP_IMAGE.to_string(),
Namespace::Rdf => namespace::ns::RDF.to_string(),
Namespace::Xml => namespace::ns::XML.to_string(),
}
}
#[wasm_bindgen]
pub fn namespace_prefix(ns: Namespace) -> String {
match ns {
Namespace::Xmp => namespace::ns::XMP_PREFIX.to_string(),
Namespace::Dc => namespace::ns::DC_PREFIX.to_string(),
Namespace::Exif => namespace::ns::EXIF_PREFIX.to_string(),
Namespace::ExifAux => namespace::ns::EXIF_AUX_PREFIX.to_string(),
Namespace::IptcCore => namespace::ns::IPTC_CORE_PREFIX.to_string(),
Namespace::IptcExt => namespace::ns::IPTC_EXT_PREFIX.to_string(),
Namespace::Photoshop => namespace::ns::PHOTOSHOP_PREFIX.to_string(),
Namespace::CameraRaw => namespace::ns::CAMERA_RAW_PREFIX.to_string(),
Namespace::XmpRights => namespace::ns::XMP_RIGHTS_PREFIX.to_string(),
Namespace::XmpMm => namespace::ns::XMP_MM_PREFIX.to_string(),
Namespace::XmpBj => namespace::ns::XMP_BJ_PREFIX.to_string(),
Namespace::Tiff => namespace::ns::TIFF_PREFIX.to_string(),
Namespace::Pdf => namespace::ns::PDF_PREFIX.to_string(),
Namespace::Pdfx => namespace::ns::PDFX_PREFIX.to_string(),
Namespace::Pdfa => namespace::ns::PDFA_PREFIX.to_string(),
Namespace::XmpDm => namespace::ns::XMP_DM_PREFIX.to_string(),
Namespace::XmpPaged => namespace::ns::XMP_PAGED_PREFIX.to_string(),
Namespace::XmpGraphics => namespace::ns::XMP_GRAPHICS_PREFIX.to_string(),
Namespace::XmpImage => namespace::ns::XMP_IMAGE_PREFIX.to_string(),
Namespace::Rdf => namespace::ns::RDF_PREFIX.to_string(),
Namespace::Xml => namespace::ns::XML_PREFIX.to_string(),
}
}
#[wasm_bindgen]
pub fn register_namespace(uri: &str, prefix: &str) -> Result<(), XmpError> {
namespace::register_namespace(uri, prefix).map_err(xmp_error_to_wasm_error)
}
#[wasm_bindgen]
pub fn is_namespace_registered(uri: &str) -> bool {
namespace::is_namespace_registered(uri)
}
#[wasm_bindgen]
pub fn get_namespace_prefix(uri: &str) -> Option<String> {
namespace::get_global_namespace_prefix(uri)
}
#[wasm_bindgen]
pub fn get_namespace_uri(prefix: &str) -> Option<String> {
namespace::get_global_namespace_uri(prefix)
}
#[wasm_bindgen]
pub fn get_all_registered_namespaces() -> JsValue {
use js_sys::Object;
use wasm_bindgen::JsValue;
let namespaces = namespace::get_all_registered_namespaces();
let obj = Object::new();
for (uri, prefix) in namespaces {
js_sys::Reflect::set(&obj, &JsValue::from_str(&uri), &JsValue::from_str(&prefix))
.expect("Failed to set namespace mapping");
}
JsValue::from(obj)
}
#[wasm_bindgen]
pub fn get_builtin_namespace_uris() -> Vec<String> {
namespace::get_builtin_namespace_uris()
}