1use std::fmt;
2
3use wasm_bindgen::prelude::*;
4
5#[wasm_bindgen(js_name = "LinderaError")]
7#[derive(Debug, Clone)]
8pub struct JsLinderaError {
9 #[wasm_bindgen(getter_with_clone)]
10 pub message: String,
11}
12
13impl fmt::Display for JsLinderaError {
14 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
15 write!(f, "{}", self.message)
16 }
17}
18
19#[wasm_bindgen]
20impl JsLinderaError {
21 #[wasm_bindgen(constructor)]
22 pub fn new(message: String) -> Self {
23 JsLinderaError { message }
24 }
25
26 #[wasm_bindgen(js_name = "toString")]
27 pub fn js_to_string(&self) -> String {
28 self.to_string()
29 }
30}
31
32#[cfg(test)]
33mod tests {
34 use super::*;
35
36 #[cfg(target_arch = "wasm32")]
37 use wasm_bindgen_test::wasm_bindgen_test;
38
39 #[cfg(target_arch = "wasm32")]
40 #[wasm_bindgen_test]
41 fn test_lindera_error_wasm() {
42 let error = JsLinderaError::new("test error".to_string());
43
44 assert_eq!(error.message, "test error");
45 assert_eq!(error.js_to_string(), "test error");
46 }
47
48 #[test]
49 fn test_lindera_error_new() {
50 let error = JsLinderaError::new("test error".to_string());
51
52 assert_eq!(error.message, "test error");
53 }
54
55 #[test]
56 fn test_lindera_error_display() {
57 let error = JsLinderaError::new("something went wrong".to_string());
58
59 assert_eq!(format!("{}", error), "something went wrong");
60 assert_eq!(error.js_to_string(), "something went wrong");
61 }
62
63 #[test]
64 fn test_lindera_error_empty_message() {
65 let error = JsLinderaError::new(String::new());
66
67 assert_eq!(error.message, "");
68 assert_eq!(error.js_to_string(), "");
69 }
70}