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
//! A low-level JSON parser with full spec support and a simple API.
mod data;
mod parser;
mod scanner;
mod tests;

pub use data::{JsonElement, ParseError};

/// Parses a JSON string into a [JsonElement], or returns a [ParseError].
///
/// ```
/// use json_parse::{parse, JsonElement::*};
///
/// let json = "[1, true, null]";
/// let parsed = parse(json).unwrap();
///
/// assert_eq!(parsed, Array(
///    vec![Number(1.0), Boolean(true), Null]
/// ));
/// ```
///
/// ```
/// use json_parse::{parse, ParseError};
/// let bad_json = r#"
///     {
///         "one": 1,
///         2: "two"
///     }
/// "#;
/// let error = parse(bad_json).unwrap_err();
///
/// assert_eq!(error, ParseError{
///     line: 4,
///     column: 8,
///     msg: "Expected string, found number (2)".into()
/// });
/// ```
pub fn parse(json: impl AsRef<str>) -> Result<JsonElement, ParseError> {
    parser::JsonParser::from(json.as_ref()).parse()
}