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
#![crate_type = "rlib"]
#![deny(warnings)]
#![deny(bad_style)]

extern crate serde;
extern crate serde_json;

pub use object_builder::ObjectBuilder;
pub use array_builder::ArrayBuilder;
pub use serializer::{Serializer, ObjectSerializer, ObjectScopeSerializer};
pub use array_serializer::ArraySerializer;

pub mod array_builder;
pub mod object_builder;
pub mod serializer;
pub mod array_serializer;

/// ```rust
/// let json = jsonway::object(|json| {
///     json.set("first_name", "Luke");
///     json.set("last_name", "Skywalker");
///
///     json.object("info", |json| {
///         json.set("homeworld", "Tatooine");
///         json.set("born", "19 BBY");
///         json.set("died", "Between 45 ABY and 137 ABY");
///     });
///
///     json.array("masters", |json| {
///         json.push("Obi-Wan Kenobi");
///         json.push("Yoda");
///         json.push("Joruus C'baoth (Briefly)");
///         json.push("Darth Sidious (Briefly)");
///     });
/// }).unwrap();
///
/// assert_eq!(json.get("first_name").unwrap().as_str().unwrap(), "Luke");
/// assert_eq!(json.get("last_name").unwrap().as_str().unwrap(), "Skywalker");
///
/// assert!(json.get("info").unwrap().is_object());
/// assert!(json.get("masters").unwrap().is_array());
/// ```

/// Create and return new ListBuilder
pub fn array<F>(builder: F) -> ArrayBuilder where F: FnOnce(&mut ArrayBuilder) {
    ArrayBuilder::build(builder)
}

/// Create and return new ObjectBuilder
pub fn object<F>(builder: F) -> ObjectBuilder where F: FnOnce(&mut ObjectBuilder) {
    ObjectBuilder::build(builder)
}