use crate::files::handler::XmpOptions as RustXmpOptions;
use crate::ohos::error::xmp_error_to_ohos_error;
use crate::ohos::meta::XmpMeta;
use crate::XmpFile as RustXmpFile;
use napi_derive_ohos::napi;
use napi_ohos::bindgen_prelude::*;
#[derive(Default)]
#[napi]
pub struct XmpOptions {
inner: RustXmpOptions,
}
#[napi]
impl XmpOptions {
#[napi(constructor)]
pub fn new() -> XmpOptions {
XmpOptions::default()
}
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)]
#[napi]
pub struct XmpFile {
inner: RustXmpFile,
}
#[napi]
impl XmpFile {
#[napi(constructor)]
pub fn new() -> XmpFile {
XmpFile {
inner: RustXmpFile::new(),
}
}
pub fn from_bytes(&mut self, data: Buffer) -> Result<()> {
self.inner
.from_bytes(data.as_ref())
.map_err(|e| Error::from_reason(format!("{}", xmp_error_to_ohos_error(e))))
}
pub fn from_bytes_with(&mut self, data: Buffer, options: &XmpOptions) -> Result<()> {
self.inner
.from_bytes_with(data.as_ref(), options.inner)
.map_err(|e| Error::from_reason(format!("{}", xmp_error_to_ohos_error(e))))
}
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<Buffer> {
self.inner
.write_to_bytes()
.map(Buffer::from)
.map_err(|e| Error::from_reason(format!("{}", xmp_error_to_ohos_error(e))))
}
}