Skip to main content

lindera_nodejs/
util.rs

1//! Utility functions for data conversion.
2//!
3//! This module provides helper functions for working with JavaScript values
4//! in the napi-rs context.
5
6use serde_json::Value;
7
8/// Converts an optional serde_json::Value to a Value, defaulting to an empty object.
9///
10/// # Arguments
11///
12/// * `value` - Optional JSON value from JavaScript.
13///
14/// # Returns
15///
16/// The value if present, or an empty JSON object.
17pub fn js_value_to_serde_value(value: Option<Value>) -> Value {
18    value.unwrap_or_else(|| Value::Object(serde_json::Map::new()))
19}
20
21#[cfg(test)]
22mod tests {
23    use super::*;
24
25    #[test]
26    fn test_js_value_to_serde_value_none_returns_empty_object() {
27        let result = js_value_to_serde_value(None);
28        assert_eq!(result, Value::Object(serde_json::Map::new()));
29    }
30
31    #[test]
32    fn test_js_value_to_serde_value_some_returns_value() {
33        let input = Value::String("hello".to_string());
34        let result = js_value_to_serde_value(Some(input.clone()));
35        assert_eq!(result, input);
36    }
37
38    #[test]
39    fn test_js_value_to_serde_value_some_object() {
40        let mut map = serde_json::Map::new();
41        map.insert("key".to_string(), Value::Number(42.into()));
42        let input = Value::Object(map.clone());
43        let result = js_value_to_serde_value(Some(input));
44        assert_eq!(result, Value::Object(map));
45    }
46
47    #[test]
48    fn test_js_value_to_serde_value_some_array() {
49        let input = Value::Array(vec![Value::Bool(true), Value::Null]);
50        let result = js_value_to_serde_value(Some(input.clone()));
51        assert_eq!(result, input);
52    }
53}