kalker/kalk/src/calculation_result.rs
2022-01-16 20:58:00 +01:00

79 lines
2.0 KiB
Rust

use wasm_bindgen::prelude::wasm_bindgen;
use crate::kalk_value::{ComplexNumberType, KalkValue, ScientificNotation};
#[wasm_bindgen]
pub struct CalculationResult {
value: KalkValue,
radix: u8,
}
// Wraps around KalkValue since enums don't work
// with the javascript bindings.
#[wasm_bindgen]
impl CalculationResult {
pub(crate) fn new(value: KalkValue, radix: u8) -> Self {
CalculationResult { value, radix }
}
#[allow(dead_code)]
pub(crate) fn get_value(self) -> KalkValue {
self.value
}
#[wasm_bindgen(js_name = toString)]
pub fn to_js_string(&self) -> String {
self.to_string()
}
#[wasm_bindgen(js_name = toStringBig)]
pub fn to_string_big(&self) -> String {
self.value.to_string_big()
}
#[wasm_bindgen(js_name = toPrettyString)]
pub fn to_string_pretty(&self) -> String {
if self.radix == 10 {
self.value.to_string_pretty_radix(10)
} else {
format!(
"{}\n{}",
self.value.to_string_pretty_radix(10),
self.value.to_string_pretty_radix(self.radix),
)
}
}
#[wasm_bindgen(js_name = getValue)]
pub fn to_f64(&self) -> f64 {
self.value.to_f64()
}
#[wasm_bindgen(js_name = getImaginaryValue)]
pub fn imaginary_to_f64(&self) -> f64 {
self.value.imaginary_to_f64()
}
pub(crate) fn set_radix(&mut self, radix: u8) {
self.radix = radix;
}
#[wasm_bindgen(js_name = toScientificNotation)]
pub fn to_scientific_notation_js(
&self,
complex_number_type: ComplexNumberType,
) -> ScientificNotation {
self.value.to_scientific_notation(complex_number_type)
}
#[wasm_bindgen(js_name = estimate)]
pub fn estimate_js(&self) -> Option<String> {
self.value.estimate()
}
}
impl std::fmt::Display for CalculationResult {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.value)
}
}