priv wr: @mut io::Writer,
}
-/// Creates a new JSON encoder whose output will be written to the writer
-/// specified.
-pub fn Encoder(wr: @mut io::Writer) -> Encoder {
- Encoder { wr: wr }
+impl Encoder {
+ /// Creates a new JSON encoder whose output will be written to the writer
+ /// specified.
+ pub fn init(wr: @mut io::Writer) -> Encoder {
+ Encoder { wr: wr }
+ }
}
impl serialize::Encoder for Encoder {
priv indent: uint,
}
-/// Creates a new encoder whose output will be written to the specified writer
-pub fn PrettyEncoder(wr: @mut io::Writer) -> PrettyEncoder {
- PrettyEncoder {
- wr: wr,
- indent: 0,
+impl PrettyEncoder {
+ /// Creates a new encoder whose output will be written to the specified writer
+ pub fn init(wr: @mut io::Writer) -> PrettyEncoder {
+ PrettyEncoder {
+ wr: wr,
+ indent: 0,
+ }
}
}
impl Json{
/// Encodes a json value into a io::writer. Uses a single line.
pub fn to_writer(&self, wr: @mut io::Writer) {
- let mut encoder = Encoder(wr);
+ let mut encoder = Encoder::init(wr);
self.encode(&mut encoder)
}
/// Encodes a json value into a io::writer.
/// Pretty-prints in a more readable format.
pub fn to_pretty_writer(&self, wr: @mut io::Writer) {
- let mut encoder = PrettyEncoder(wr);
+ let mut encoder = PrettyEncoder::init(wr);
self.encode(&mut encoder)
}
}
pub struct Parser<T> {
- priv rdr: ~T,
+ priv rdr: T,
priv ch: char,
priv line: uint,
priv col: uint,
}
-/// Decode a json value from an Iterator<char>
-pub fn Parser<T : Iterator<char>>(rdr: ~T) -> Parser<T> {
- let mut p = Parser {
- rdr: rdr,
- ch: '\x00',
- line: 1,
- col: 0,
- };
- p.bump();
- p
+impl<T: Iterator<char>> Parser<T> {
+ /// Decode a json value from an Iterator<char>
+ pub fn init(rdr: T) -> Parser<T> {
+ let mut p = Parser {
+ rdr: rdr,
+ ch: '\x00',
+ line: 1,
+ col: 0,
+ };
+ p.bump();
+ p
+ }
}
impl<T: Iterator<char>> Parser<T> {
/// Decodes a json value from an `&mut io::Reader`
pub fn from_reader(rdr: &mut io::Reader) -> Result<Json, Error> {
let s = str::from_utf8(rdr.read_to_end());
- let mut parser = Parser(~s.chars());
+ let mut parser = Parser::init(s.chars());
parser.parse()
}
/// Decodes a json value from a string
pub fn from_str(s: &str) -> Result<Json, Error> {
- let mut parser = Parser(~s.chars());
+ let mut parser = Parser::init(s.chars());
parser.parse()
}
priv stack: ~[Json],
}
-/// Creates a new decoder instance for decoding the specified JSON value.
-pub fn Decoder(json: Json) -> Decoder {
- Decoder {
- stack: ~[json]
+impl Decoder {
+ /// Creates a new decoder instance for decoding the specified JSON value.
+ pub fn init(json: Json) -> Decoder {
+ Decoder {
+ stack: ~[json]
+ }
}
}
let animal = Dog;
assert_eq!(
with_str_writer(|wr| {
- let mut encoder = Encoder(wr);
+ let mut encoder = Encoder::init(wr);
animal.encode(&mut encoder);
}),
~"\"Dog\""
);
assert_eq!(
with_str_writer(|wr| {
- let mut encoder = PrettyEncoder(wr);
+ let mut encoder = PrettyEncoder::init(wr);
animal.encode(&mut encoder);
}),
~"\"Dog\""
let animal = Frog(~"Henry", 349);
assert_eq!(
with_str_writer(|wr| {
- let mut encoder = Encoder(wr);
+ let mut encoder = Encoder::init(wr);
animal.encode(&mut encoder);
}),
~"{\"variant\":\"Frog\",\"fields\":[\"Henry\",349]}"
);
assert_eq!(
with_str_writer(|wr| {
- let mut encoder = PrettyEncoder(wr);
+ let mut encoder = PrettyEncoder::init(wr);
animal.encode(&mut encoder);
}),
~"\
fn test_write_some() {
let value = Some(~"jodhpurs");
let s = with_str_writer(|wr| {
- let mut encoder = Encoder(wr);
+ let mut encoder = Encoder::init(wr);
value.encode(&mut encoder);
});
assert_eq!(s, ~"\"jodhpurs\"");
let value = Some(~"jodhpurs");
let s = with_str_writer(|wr| {
- let mut encoder = PrettyEncoder(wr);
+ let mut encoder = PrettyEncoder::init(wr);
value.encode(&mut encoder);
});
assert_eq!(s, ~"\"jodhpurs\"");
fn test_write_none() {
let value: Option<~str> = None;
let s = with_str_writer(|wr| {
- let mut encoder = Encoder(wr);
+ let mut encoder = Encoder::init(wr);
value.encode(&mut encoder);
});
assert_eq!(s, ~"null");
let s = with_str_writer(|wr| {
- let mut encoder = Encoder(wr);
+ let mut encoder = Encoder::init(wr);
value.encode(&mut encoder);
});
assert_eq!(s, ~"null");
#[test]
fn test_decode_identifiers() {
- let mut decoder = Decoder(from_str("null").unwrap());
+ let mut decoder = Decoder::init(from_str("null").unwrap());
let v: () = Decodable::decode(&mut decoder);
assert_eq!(v, ());
- let mut decoder = Decoder(from_str("true").unwrap());
+ let mut decoder = Decoder::init(from_str("true").unwrap());
let v: bool = Decodable::decode(&mut decoder);
assert_eq!(v, true);
- let mut decoder = Decoder(from_str("false").unwrap());
+ let mut decoder = Decoder::init(from_str("false").unwrap());
let v: bool = Decodable::decode(&mut decoder);
assert_eq!(v, false);
}
#[test]
fn test_decode_numbers() {
- let mut decoder = Decoder(from_str("3").unwrap());
+ let mut decoder = Decoder::init(from_str("3").unwrap());
let v: f64 = Decodable::decode(&mut decoder);
assert_eq!(v, 3.0);
- let mut decoder = Decoder(from_str("3.1").unwrap());
+ let mut decoder = Decoder::init(from_str("3.1").unwrap());
let v: f64 = Decodable::decode(&mut decoder);
assert_eq!(v, 3.1);
- let mut decoder = Decoder(from_str("-1.2").unwrap());
+ let mut decoder = Decoder::init(from_str("-1.2").unwrap());
let v: f64 = Decodable::decode(&mut decoder);
assert_eq!(v, -1.2);
- let mut decoder = Decoder(from_str("0.4").unwrap());
+ let mut decoder = Decoder::init(from_str("0.4").unwrap());
let v: f64 = Decodable::decode(&mut decoder);
assert_eq!(v, 0.4);
- let mut decoder = Decoder(from_str("0.4e5").unwrap());
+ let mut decoder = Decoder::init(from_str("0.4e5").unwrap());
let v: f64 = Decodable::decode(&mut decoder);
assert_eq!(v, 0.4e5);
- let mut decoder = Decoder(from_str("0.4e15").unwrap());
+ let mut decoder = Decoder::init(from_str("0.4e15").unwrap());
let v: f64 = Decodable::decode(&mut decoder);
assert_eq!(v, 0.4e15);
- let mut decoder = Decoder(from_str("0.4e-01").unwrap());
+ let mut decoder = Decoder::init(from_str("0.4e-01").unwrap());
let v: f64 = Decodable::decode(&mut decoder);
assert_eq!(v, 0.4e-01);
}
#[test]
fn test_decode_str() {
- let mut decoder = Decoder(from_str("\"\"").unwrap());
+ let mut decoder = Decoder::init(from_str("\"\"").unwrap());
let v: ~str = Decodable::decode(&mut decoder);
assert_eq!(v, ~"");
- let mut decoder = Decoder(from_str("\"foo\"").unwrap());
+ let mut decoder = Decoder::init(from_str("\"foo\"").unwrap());
let v: ~str = Decodable::decode(&mut decoder);
assert_eq!(v, ~"foo");
- let mut decoder = Decoder(from_str("\"\\\"\"").unwrap());
+ let mut decoder = Decoder::init(from_str("\"\\\"\"").unwrap());
let v: ~str = Decodable::decode(&mut decoder);
assert_eq!(v, ~"\"");
- let mut decoder = Decoder(from_str("\"\\b\"").unwrap());
+ let mut decoder = Decoder::init(from_str("\"\\b\"").unwrap());
let v: ~str = Decodable::decode(&mut decoder);
assert_eq!(v, ~"\x08");
- let mut decoder = Decoder(from_str("\"\\n\"").unwrap());
+ let mut decoder = Decoder::init(from_str("\"\\n\"").unwrap());
let v: ~str = Decodable::decode(&mut decoder);
assert_eq!(v, ~"\n");
- let mut decoder = Decoder(from_str("\"\\r\"").unwrap());
+ let mut decoder = Decoder::init(from_str("\"\\r\"").unwrap());
let v: ~str = Decodable::decode(&mut decoder);
assert_eq!(v, ~"\r");
- let mut decoder = Decoder(from_str("\"\\t\"").unwrap());
+ let mut decoder = Decoder::init(from_str("\"\\t\"").unwrap());
let v: ~str = Decodable::decode(&mut decoder);
assert_eq!(v, ~"\t");
- let mut decoder = Decoder(from_str("\"\\u12ab\"").unwrap());
+ let mut decoder = Decoder::init(from_str("\"\\u12ab\"").unwrap());
let v: ~str = Decodable::decode(&mut decoder);
assert_eq!(v, ~"\u12ab");
- let mut decoder = Decoder(from_str("\"\\uAB12\"").unwrap());
+ let mut decoder = Decoder::init(from_str("\"\\uAB12\"").unwrap());
let v: ~str = Decodable::decode(&mut decoder);
assert_eq!(v, ~"\uAB12");
}
#[test]
fn test_decode_list() {
- let mut decoder = Decoder(from_str("[]").unwrap());
+ let mut decoder = Decoder::init(from_str("[]").unwrap());
let v: ~[()] = Decodable::decode(&mut decoder);
assert_eq!(v, ~[]);
- let mut decoder = Decoder(from_str("[null]").unwrap());
+ let mut decoder = Decoder::init(from_str("[null]").unwrap());
let v: ~[()] = Decodable::decode(&mut decoder);
assert_eq!(v, ~[()]);
- let mut decoder = Decoder(from_str("[true]").unwrap());
+ let mut decoder = Decoder::init(from_str("[true]").unwrap());
let v: ~[bool] = Decodable::decode(&mut decoder);
assert_eq!(v, ~[true]);
- let mut decoder = Decoder(from_str("[true]").unwrap());
+ let mut decoder = Decoder::init(from_str("[true]").unwrap());
let v: ~[bool] = Decodable::decode(&mut decoder);
assert_eq!(v, ~[true]);
- let mut decoder = Decoder(from_str("[3, 1]").unwrap());
+ let mut decoder = Decoder::init(from_str("[3, 1]").unwrap());
let v: ~[int] = Decodable::decode(&mut decoder);
assert_eq!(v, ~[3, 1]);
- let mut decoder = Decoder(from_str("[[3], [1, 2]]").unwrap());
+ let mut decoder = Decoder::init(from_str("[[3], [1, 2]]").unwrap());
let v: ~[~[uint]] = Decodable::decode(&mut decoder);
assert_eq!(v, ~[~[3], ~[1, 2]]);
}
{ \"a\": null, \"b\": 2, \"c\": [\"abc\", \"xyz\"] }
]
}";
- let mut decoder = Decoder(from_str(s).unwrap());
+ let mut decoder = Decoder::init(from_str(s).unwrap());
let v: Outer = Decodable::decode(&mut decoder);
assert_eq!(
v,
#[test]
fn test_decode_option() {
- let mut decoder = Decoder(from_str("null").unwrap());
+ let mut decoder = Decoder::init(from_str("null").unwrap());
let value: Option<~str> = Decodable::decode(&mut decoder);
assert_eq!(value, None);
- let mut decoder = Decoder(from_str("\"jodhpurs\"").unwrap());
+ let mut decoder = Decoder::init(from_str("\"jodhpurs\"").unwrap());
let value: Option<~str> = Decodable::decode(&mut decoder);
assert_eq!(value, Some(~"jodhpurs"));
}
#[test]
fn test_decode_enum() {
- let mut decoder = Decoder(from_str("\"Dog\"").unwrap());
+ let mut decoder = Decoder::init(from_str("\"Dog\"").unwrap());
let value: Animal = Decodable::decode(&mut decoder);
assert_eq!(value, Dog);
- let mut decoder =
- Decoder(from_str("{\"variant\":\"Frog\",\"fields\":[\"Henry\",349]}").unwrap());
+ let s = "{\"variant\":\"Frog\",\"fields\":[\"Henry\",349]}";
+ let mut decoder = Decoder::init(from_str(s).unwrap());
let value: Animal = Decodable::decode(&mut decoder);
assert_eq!(value, Frog(~"Henry", 349));
}
#[test]
fn test_decode_map() {
let s = ~"{\"a\": \"Dog\", \"b\": {\"variant\":\"Frog\",\"fields\":[\"Henry\", 349]}}";
- let mut decoder = Decoder(from_str(s).unwrap());
+ let mut decoder = Decoder::init(from_str(s).unwrap());
let mut map: TreeMap<~str, Animal> = Decodable::decode(&mut decoder);
assert_eq!(map.pop(&~"a"), Some(Dog));
match from_str(to_parse) {
Err(e) => Some(e.to_str()),
Ok(json) => {
- let _: T = Decodable::decode(&mut Decoder(json));
+ let _: T = Decodable::decode(&mut Decoder::init(json));
None
}
}