Update to the latest rustc-serialize

This commit is contained in:
Francesco Mazzoli 2015-01-07 02:23:05 +01:00
parent bfbaeaacd1
commit 14f6b84c88
5 changed files with 15 additions and 26 deletions

View File

@ -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"

View File

@ -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,8 +33,7 @@ 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)
} }
@ -43,19 +41,13 @@ where T: Decodable<DecoderReader<'a, MemReader>, IoError> {
// the current json encoder in the stdlib // the current json encoder in the stdlib
// TODO: Make code safe https://github.com/rust-lang/rust/issues/14302 // 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<()> pub fn encode_into<T: Encodable, W: Writer>(t: &T, w: &mut W, size_limit: SizeLimit) -> IoResult<()> {
where W: 'a + Writer, T: Encodable<EncoderWriter<'a, W>, IoError>{ t.encode(&mut writer::EncoderWriter::new(w, size_limit))
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 // TODO: Make code safe https://github.com/rust-lang/rust/issues/14302
pub fn decode_from<'a, R, T>(r: &mut R, size_limit: SizeLimit) -> IoResult<T> pub fn decode_from<R: Reader+Buffer, T: Decodable>(r: &mut R, size_limit: SizeLimit) -> IoResult<T> {
where R: 'a + Reader + Buffer, T: Decodable<DecoderReader<'a, R>, IoError>{ Decodable::decode(&mut reader::DecoderReader::new(r, size_limit))
unsafe {
Decodable::decode(std::mem::transmute(&mut reader::DecoderReader::new(r, size_limit)))
}
} }
#[cfg(test)] #[cfg(test)]

View File

@ -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(())
} }

View File

@ -3,7 +3,6 @@ extern crate "rustc-serialize" as serialize;
use std::io::MemWriter; use std::io::MemWriter;
use std::fmt::Show; use std::fmt::Show;
use std::io::MemReader; use std::io::MemReader;
use std::io::IoError;
use std::collections::HashMap; use std::collections::HashMap;
use rustc_serialize::{ use rustc_serialize::{
@ -14,18 +13,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());
} }

View File

@ -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)