json 0.3.3

JSON implementation in Rust
Documentation
use JsonValue;

pub struct Generator {
    pub minify: bool,
    code: String,
    dent: u16,
}

impl Generator {
    pub fn new(minify: bool) -> Self {
        Generator {
            minify: minify,
            code: String::new(),
            dent: 0,
        }
    }

    pub fn new_line(&mut self) {
        if !self.minify {
            self.code.push('\n');
            for _ in 0..self.dent {
                self.code.push_str("    ");
            }
        }
    }

    pub fn write_json(&mut self, json: &JsonValue) {
        match *json {
            JsonValue::String(ref string) => self.write(&format!("{:?}", string)),
            JsonValue::Number(ref number) => self.write(&number.to_string()),
            JsonValue::Boolean(ref value) => self.write(if *value { "true" } else { "false" }),
            JsonValue::Null               => self.write("null"),
            JsonValue::Array(ref array)   => {
                self.write_char('[');
                let mut first = true;
                for item in array {
                    if first {
                        first = false;
                    } else {
                        self.write_min(", ", ",");
                    }
                    self.write_json(item);
                }
                self.write_char(']');
            },
            JsonValue::Object(ref object) => {
                let mut first = true;
                self.write_char('{');
                self.indent();
                for (key, value) in object.iter() {
                    if first {
                        first = false;
                    } else {
                        self.write_min(", ", ",");
                    }
                    self.write(&format!("{:?}", key));
                    self.write_min(": ", ":");
                    self.write_json(value);
                }
                self.dedent();
                self.new_line();
                self.write_char('}');
            }
        }
    }

    pub fn write(&mut self, slice: &str) {
        self.code.push_str(slice);
    }

    pub fn write_min(&mut self, slice: &str, minslice: &str) {
        if self.minify {
            self.write(minslice);
        } else {
            self.write(slice);
        }
    }

    pub fn write_char(&mut self, ch: char) {
        self.code.push(ch);
    }

    pub fn indent(&mut self) {
        self.dent += 1;
    }

    pub fn dedent(&mut self) {
        self.dent -= 1;
    }

    pub fn consume(self) -> String {
        self.code
    }
}