jawohl 0.1.0

Complete JSON documents from a stream of JSON tokens
Documentation
#[cfg(test)]
mod tests {
    use jawohl::{complete_json, get_closing_string_for_partial_json};
    use serde_json::from_str;

    #[test]
    fn test_complete_json() {
        let cases = vec![
            (r#"{"key": "value", "arr": [1, 2, {"nested_key": "nested_value""#, "}]}"),
            (r#"{"foo": "bar", "nested": {"a": [1, 2, 3], "b": "text""#, "}}"),
            (r#"["hello", "world", {"key": "value""#, "}]"),
            (r#"{"escaped_quote": "This is an \"escaped\" quote", "nested": [1, 2, 3, {"a": 4, "b": 5}, 6], "more_data": 1"#, "}"),
            (r#"["item1", "item2", {"key1": "value1", "key2": ["sub_item1", "sub_item2", {"sub_key": "sub_value""#, "}]}]"),
            (r#"{"name": "Bob"#, "\"}")
        ];

        for (input, expected) in cases {
            let closing = get_closing_string_for_partial_json(input);
            assert!(closing.is_ok());
            assert_eq!(closing.unwrap(), expected);

            let complete = complete_json(input).unwrap();
            let _parsed = from_str::<serde_json::Value>(&complete);
            assert!(_parsed.is_ok());
        }
    }

    #[test]
    fn test_malformed_json() {
        let cases = vec![
            r#"{"key": "value"}}"#,
            r#"{"foo": "bar"}}"#,
            r#"["hello", "world"]]"#,
            r#"{"key": "value", "arr": [1, 2], }}]"#,
            r#"{"foo": "bar", "nested": {"a": [[1, 2, 3], "b": "text"}}"#,
        ];

        for input in cases {
            assert!(complete_json(input).is_err());
        }
    }
}