use super::prelude::*;
use crate::layout::Layout as RustLayout;
use crate::settings::{
WikitextMode as RustWikitextMode, WikitextSettings as RustWikitextSettings,
};
use std::sync::Arc;
#[wasm_bindgen]
#[derive(Debug, Clone)]
pub struct WikitextSettings {
inner: Arc<RustWikitextSettings>,
}
#[wasm_bindgen]
impl WikitextSettings {
#[inline]
pub(crate) fn get(&self) -> &RustWikitextSettings {
&self.inner
}
#[wasm_bindgen]
pub fn copy(&self) -> WikitextSettings {
WikitextSettings {
inner: Arc::clone(&self.inner),
}
}
#[wasm_bindgen(constructor)]
pub fn new(settings: JsValue) -> Result<WikitextSettings, JsValue> {
Ok(WikitextSettings {
inner: Arc::new(js_to_rust!(settings)?),
})
}
#[wasm_bindgen]
pub fn from_mode(mode: String, layout: String) -> Result<WikitextSettings, JsValue> {
let rust_mode = match mode.as_str() {
"page" => RustWikitextMode::Page,
"draft" => RustWikitextMode::Draft,
"forum-post" => RustWikitextMode::ForumPost,
"direct-message" => RustWikitextMode::DirectMessage,
"list" => RustWikitextMode::List,
_ => return Err(JsValue::from_str("Unknown mode")),
};
let rust_layout = match layout.as_str() {
"wikidot" => RustLayout::Wikidot,
"wikijump" => RustLayout::Wikijump,
_ => return Err(JsValue::from_str("Unknown layout")),
};
Ok(WikitextSettings {
inner: Arc::new(RustWikitextSettings::from_mode(rust_mode, rust_layout)),
})
}
}