use wasm_bindgen::prelude::*;
#[wasm_bindgen]
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum XmpValueKind {
String,
Integer,
Boolean,
DateTime,
}
#[wasm_bindgen]
#[derive(Clone, Debug)]
pub struct XmpValue {
kind: XmpValueKind,
string_value: Option<String>,
integer_value: Option<i64>,
boolean_value: Option<bool>,
}
#[wasm_bindgen]
impl XmpValue {
#[wasm_bindgen(constructor)]
pub fn string(s: String) -> XmpValue {
XmpValue {
kind: XmpValueKind::String,
string_value: Some(s),
integer_value: None,
boolean_value: None,
}
}
pub fn integer(i: i64) -> XmpValue {
XmpValue {
kind: XmpValueKind::Integer,
string_value: None,
integer_value: Some(i),
boolean_value: None,
}
}
pub fn boolean(b: bool) -> XmpValue {
XmpValue {
kind: XmpValueKind::Boolean,
string_value: None,
integer_value: None,
boolean_value: Some(b),
}
}
pub fn date_time(dt: String) -> XmpValue {
XmpValue {
kind: XmpValueKind::DateTime,
string_value: Some(dt),
integer_value: None,
boolean_value: None,
}
}
#[wasm_bindgen(getter)]
pub fn kind(&self) -> XmpValueKind {
self.kind
}
pub fn as_string(&self) -> Option<String> {
self.string_value.clone()
}
pub fn as_integer(&self) -> Option<i64> {
self.integer_value
}
pub fn as_boolean(&self) -> Option<bool> {
self.boolean_value
}
pub fn as_date_time(&self) -> Option<String> {
if self.kind == XmpValueKind::DateTime {
self.string_value.clone()
} else {
None
}
}
}