1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
use wasm_bindgen::prelude::*;

use fql_deserialize as des;
use fql_serialize as se;

#[wasm_bindgen]
pub fn serialize_fql(query: &str) -> Result<String, JsError> {
  se::serialize_fql(query).map_err(|err| JsError::new(&format!("{}", err)))
}

#[wasm_bindgen]
pub fn parse_fauna_response(response: &str) -> Result<String, JsError> {
  des::parse_fauna_response(response).map_err(|err| JsError::new(&format!("{}", err)))
}

#[wasm_bindgen]
pub fn parse_expr(expr: &str) -> Result<String, JsError> {
  des::parse_expr(expr).map_err(|err| JsError::new(&format!("{}", err)))
}

#[wasm_bindgen]
pub fn to_fql_string(json: &str) -> Result<String, JsError> {
  des::to_fql_string(json).map_err(|err| JsError::new(&format!("{}", err)))
}

#[cfg(test)]
mod tests {
  use super::*;

  #[test]
  fn parse_fauna_response_works() {
    let response = r#"{
            "resource": {
                "@query":{
                    "api_version": "4",
                    "lambda": [],
                    "expr": true
                }
            }
        }"#;
    let transformed = parse_fauna_response(response.into())
      .map_err(|_| ())
      .unwrap();

    let expected = r#"{"resource":"Query(Lambda([],true))"}"#;

    assert_eq!(transformed, expected)
  }

  #[test]
  fn parse_expr_works() {
    let expr = r#"{
            "@query":{
                "api_version": "4",
                "lambda": [],
                "expr": true
            }
        }"#;
    let transformed = parse_expr(expr.into()).map_err(|_| ()).unwrap();

    let expected = r#""Query(Lambda([],true))""#;

    assert_eq!(transformed, expected)
  }

  #[test]
  fn to_fql_string_works() {
    let fql = r#"{
            "query":{
                "lambda": [],
                "expr": true
            }
        }"#;
    let transformed = to_fql_string(fql.into()).map_err(|_| ()).unwrap();

    let expected = r#"Query(Lambda([],true))"#;

    assert_eq!(transformed, expected)
  }
}