Skip to main content

erjson/
lib.rs

1mod buffer;
2mod parser;
3mod scanner;
4mod value;
5
6use parser::Parser;
7use std::fs::File;
8pub use value::{JSONError, JSONValue};
9
10#[derive(Debug)]
11pub struct JSONDocument {
12    pub value: Option<JSONValue>,
13}
14
15impl JSONDocument {
16    pub fn new() -> JSONDocument {
17        JSONDocument { value: None }
18    }
19
20    pub fn parse_string(&mut self, content: String) -> Result<JSONValue, JSONError> {
21        let mut parser = Parser::from_string(&content);
22        match parser.parse() {
23            Ok(p) => {
24                self.value = Some(p.clone());
25                Ok(p)
26            }
27            Err(e) => Err(e),
28        }
29    }
30
31    pub fn parse_file(&mut self, file: File) -> Result<JSONValue, JSONError> {
32        let mut parser = Parser::from_file(file);
33        match parser.parse() {
34            Ok(p) => {
35                self.value = Some(p.clone());
36                Ok(p)
37            }
38            Err(e) => Err(e),
39        }
40    }
41
42    pub fn to_string(&mut self) -> Result<String, JSONError> {
43        match &self.value {
44            Some(v) => Ok(v.to_string()),
45            None => Ok(String::from("null")),
46        }
47    }
48
49    pub fn pretify(&mut self) -> String {
50        "null".to_string()
51        // match &self.value {
52        //     Some(value) => value.to_pretty_string(),
53        //     None => String::from("null")
54        // }
55    }
56}
57
58#[cfg(test)]
59mod tests {
60    use super::*;
61
62    #[test]
63    fn library_string_interface() {
64        let mut doc = JSONDocument::new();
65        assert!(doc.parse_string("test".to_string()).is_err());
66    }
67
68    #[test]
69    fn library_file_interface() {
70        let mut doc = JSONDocument::new();
71        let file = File::open("fixtures/sample.json").unwrap();
72        assert!(doc.parse_file(file).is_ok());
73        // println!("t {:?}", doc.value);
74        // assert_eq!(1, 3);
75    }
76
77    #[test]
78    fn single_value() {
79        let mut doc = JSONDocument::new();
80
81        // Null
82        let v = doc.parse_string("null".to_string()).unwrap();
83        assert_eq!(v, JSONValue::Null);
84
85        // 12.03e+3 -> 12030
86        let v = doc.parse_string("12.03e+3".to_string()).unwrap();
87        assert_eq!(v, JSONValue::Number(12030f64));
88
89        // False
90        let v = doc.parse_string("false".to_string()).unwrap();
91        assert_eq!(v, JSONValue::Boolean(false));
92
93        // True
94        let v = doc.parse_string("true".to_string()).unwrap();
95        assert_eq!(v, JSONValue::Boolean(true));
96
97        // "jhon"
98        let v = doc.parse_string("\"jhon\"".to_string()).unwrap();
99        assert_eq!(v, JSONValue::String("jhon".to_string()));
100    }
101}