Merge pull request #12 from bitonic/master
Update to the latest rustc-serialize
This commit is contained in:
commit
2c1c2b2ee5
|
|
@ -11,4 +11,4 @@ license = "MIT"
|
||||||
description = "A binary serialization / deserialization strategy and implementation."
|
description = "A binary serialization / deserialization strategy and implementation."
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
rustc-serialize = "0.2.2"
|
rustc-serialize = "0.2.5"
|
||||||
|
|
|
||||||
27
src/lib.rs
27
src/lib.rs
|
|
@ -2,13 +2,13 @@
|
||||||
#![crate_type = "rlib"]
|
#![crate_type = "rlib"]
|
||||||
#![crate_type = "dylib"]
|
#![crate_type = "dylib"]
|
||||||
#![feature(old_orphan_check)]
|
#![feature(old_orphan_check)]
|
||||||
|
#![feature(associated_types)]
|
||||||
|
|
||||||
extern crate "rustc-serialize" as rustc_serialize;
|
extern crate "rustc-serialize" as rustc_serialize;
|
||||||
|
|
||||||
use std::io::Buffer;
|
use std::io::Buffer;
|
||||||
use std::io::MemWriter;
|
use std::io::MemWriter;
|
||||||
use std::io::MemReader;
|
use std::io::MemReader;
|
||||||
use std::io::IoError;
|
|
||||||
use std::io::IoResult;
|
use std::io::IoResult;
|
||||||
use rustc_serialize::Encodable;
|
use rustc_serialize::Encodable;
|
||||||
use rustc_serialize::Decodable;
|
use rustc_serialize::Decodable;
|
||||||
|
|
@ -25,8 +25,7 @@ pub enum SizeLimit {
|
||||||
UpperBound(u64)
|
UpperBound(u64)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn encode<'a, T>(t: &T, size_limit: SizeLimit) -> IoResult<Vec<u8>>
|
pub fn encode<T: Encodable>(t: &T, size_limit: SizeLimit) -> IoResult<Vec<u8>> {
|
||||||
where T: Encodable<EncoderWriter<'a, MemWriter>, IoError> {
|
|
||||||
let mut w = MemWriter::new();
|
let mut w = MemWriter::new();
|
||||||
match encode_into(t, &mut w, size_limit) {
|
match encode_into(t, &mut w, size_limit) {
|
||||||
Ok(()) => Ok(w.into_inner()),
|
Ok(()) => Ok(w.into_inner()),
|
||||||
|
|
@ -34,28 +33,16 @@ where T: Encodable<EncoderWriter<'a, MemWriter>, IoError> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn decode<'a, T>(b: Vec<u8>, size_limit: SizeLimit) -> IoResult<T>
|
pub fn decode<T: Decodable>(b: Vec<u8>, size_limit: SizeLimit) -> IoResult<T> {
|
||||||
where T: Decodable<DecoderReader<'a, MemReader>, IoError> {
|
|
||||||
decode_from(&mut MemReader::new(b), size_limit)
|
decode_from(&mut MemReader::new(b), size_limit)
|
||||||
}
|
}
|
||||||
|
|
||||||
// In order to be able to pass MemReaders/MemWriters by reference, I borrowed the method used in
|
pub fn encode_into<T: Encodable, W: Writer>(t: &T, w: &mut W, size_limit: SizeLimit) -> IoResult<()> {
|
||||||
// the current json encoder in the stdlib
|
t.encode(&mut writer::EncoderWriter::new(w, size_limit))
|
||||||
|
|
||||||
// TODO: Make code safe https://github.com/rust-lang/rust/issues/14302
|
|
||||||
pub fn encode_into<'a, W, T>(t: &T, w: &mut W, size_limit: SizeLimit) -> IoResult<()>
|
|
||||||
where W: 'a + Writer, T: Encodable<EncoderWriter<'a, W>, IoError>{
|
|
||||||
unsafe {
|
|
||||||
t.encode(std::mem::transmute(&mut writer::EncoderWriter::new(w, size_limit)))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Make code safe https://github.com/rust-lang/rust/issues/14302
|
pub fn decode_from<R: Reader+Buffer, T: Decodable>(r: &mut R, size_limit: SizeLimit) -> IoResult<T> {
|
||||||
pub fn decode_from<'a, R, T>(r: &mut R, size_limit: SizeLimit) -> IoResult<T>
|
Decodable::decode(&mut reader::DecoderReader::new(r, size_limit))
|
||||||
where R: 'a + Reader + Buffer, T: Decodable<DecoderReader<'a, R>, IoError>{
|
|
||||||
unsafe {
|
|
||||||
Decodable::decode(std::mem::transmute(&mut reader::DecoderReader::new(r, size_limit)))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,9 @@ impl<'a, R: Reader+Buffer> DecoderReader<'a, R> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, R: Reader+Buffer> Decoder<IoError> for DecoderReader<'a, R> {
|
impl<'a, R: Reader+Buffer> Decoder for DecoderReader<'a, R> {
|
||||||
|
type Error = IoError;
|
||||||
|
|
||||||
fn read_nil(&mut self) -> IoResult<()> {
|
fn read_nil(&mut self) -> IoResult<()> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
11
src/test.rs
11
src/test.rs
|
|
@ -1,9 +1,6 @@
|
||||||
extern crate "rustc-serialize" as serialize;
|
extern crate "rustc-serialize" as serialize;
|
||||||
|
|
||||||
use std::io::MemWriter;
|
|
||||||
use std::fmt::Show;
|
use std::fmt::Show;
|
||||||
use std::io::MemReader;
|
|
||||||
use std::io::IoError;
|
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use rustc_serialize::{
|
use rustc_serialize::{
|
||||||
|
|
@ -14,18 +11,12 @@ use rustc_serialize::{
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
EncoderWriter,
|
|
||||||
DecoderReader,
|
|
||||||
encode,
|
encode,
|
||||||
decode,
|
decode,
|
||||||
SizeLimit
|
|
||||||
};
|
};
|
||||||
use super::SizeLimit::Infinite;
|
use super::SizeLimit::Infinite;
|
||||||
|
|
||||||
fn the_same<'a,
|
fn the_same<'a, V>(element: V) where V: Encodable, V: Decodable, V: PartialEq, V: Show {
|
||||||
V: Encodable<EncoderWriter<'a, MemWriter>, IoError> +
|
|
||||||
Decodable<DecoderReader<'a, MemReader>, IoError> +
|
|
||||||
PartialEq + Show>(element: V) {
|
|
||||||
assert!(element == decode(encode(&element, Infinite).unwrap(), Infinite).unwrap());
|
assert!(element == decode(encode(&element, Infinite).unwrap(), Infinite).unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,9 @@ impl <'a, W: Writer> EncoderWriter<'a, W> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, W: Writer> Encoder<IoError> for EncoderWriter<'a, W> {
|
impl<'a, W: Writer> Encoder for EncoderWriter<'a, W> {
|
||||||
|
type Error = IoError;
|
||||||
|
|
||||||
fn emit_nil(&mut self) -> EwResult { Ok(()) }
|
fn emit_nil(&mut self) -> EwResult { Ok(()) }
|
||||||
fn emit_uint(&mut self, v: uint) -> EwResult {
|
fn emit_uint(&mut self, v: uint) -> EwResult {
|
||||||
self.emit_u64(v as u64)
|
self.emit_u64(v as u64)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue