Skip to main content

oxmpl_js/base/
so2_state.rs

1// Copyright (c) 2025 Junior Sundar
2//
3// SPDX-License-Identifier: BSD-3-Clause
4
5use std::sync::Arc;
6
7use oxmpl::base::state::SO2State as OxmplSO2State;
8use wasm_bindgen::prelude::*;
9
10#[wasm_bindgen(js_name = SO2State)]
11pub struct JsSO2State {
12    #[wasm_bindgen(skip)]
13    pub inner: Arc<OxmplSO2State>,
14}
15
16#[wasm_bindgen(js_class = SO2State)]
17impl JsSO2State {
18    #[wasm_bindgen(constructor)]
19    pub fn new(value: f64) -> Self {
20        let state = OxmplSO2State::new(value);
21        Self {
22            inner: Arc::new(state),
23        }
24    }
25
26    #[wasm_bindgen(getter)]
27    pub fn value(&self) -> f64 {
28        self.inner.value
29    }
30
31    #[wasm_bindgen(js_name = normalise)]
32    pub fn normalise(&mut self) -> Self {
33        let normalised_value = self.inner.as_ref().clone().normalise().value;
34        Self {
35            inner: Arc::new(OxmplSO2State::new(normalised_value)),
36        }
37    }
38}