use crate::files::handler::XmpOptions as RustXmpOptions;
use crate::wasm::error::{xmp_error_to_wasm_error, XmpError};
use crate::wasm::meta::XmpMeta;
use crate::XmpFile as RustXmpFile;
use wasm_bindgen::prelude::*;
#[derive(Default)]
#[wasm_bindgen]
pub struct XmpOptions {
inner: RustXmpOptions,
}
#[wasm_bindgen]
impl XmpOptions {
#[wasm_bindgen(constructor)]
pub fn new() -> XmpOptions {
XmpOptions::default()
}
pub fn for_update(&mut self) {
self.inner = self.inner.for_update();
}
pub fn use_packet_scanning(&mut self) {
self.inner = self.inner.use_packet_scanning();
}
pub fn limited_scanning(&mut self) {
self.inner = self.inner.limited_scanning();
}
pub fn use_smart_handler(&mut self) {
self.inner = self.inner.use_smart_handler();
}
pub fn strict(&mut self) {
self.inner = self.inner.strict();
}
pub fn only_xmp(&mut self) {
self.inner = self.inner.only_xmp();
}
}
#[derive(Default)]
#[wasm_bindgen]
pub struct XmpFile {
inner: RustXmpFile,
}
#[wasm_bindgen]
impl XmpFile {
#[wasm_bindgen(constructor)]
pub fn new() -> XmpFile {
XmpFile {
inner: RustXmpFile::new(),
}
}
pub fn from_bytes(&mut self, data: &[u8]) -> Result<(), XmpError> {
self.inner.from_bytes(data).map_err(xmp_error_to_wasm_error)
}
pub fn from_bytes_with(&mut self, data: &[u8], options: &XmpOptions) -> Result<(), XmpError> {
self.inner
.from_bytes_with(data, options.inner)
.map_err(xmp_error_to_wasm_error)
}
pub fn get_xmp(&self) -> Option<XmpMeta> {
self.inner.get_xmp().map(|meta| XmpMeta {
inner: meta.clone(),
})
}
pub fn put_xmp(&mut self, meta: XmpMeta) {
self.inner.put_xmp(meta.inner);
}
pub fn write_to_bytes(&mut self) -> Result<Vec<u8>, XmpError> {
self.inner.write_to_bytes().map_err(xmp_error_to_wasm_error)
}
}