#![crate_name = "bincode"] #![crate_type = "rlib"] #![crate_type = "dylib"] #![feature(old_orphan_check)] #![feature(associated_types)] extern crate "rustc-serialize" as rustc_serialize; use std::io::Buffer; use std::io::MemWriter; use std::io::MemReader; use std::io::IoResult; use rustc_serialize::Encodable; use rustc_serialize::Decodable; pub use writer::EncoderWriter; pub use reader::DecoderReader; mod writer; mod reader; #[derive(Clone, Copy)] pub enum SizeLimit { Infinite, UpperBound(u64) } pub fn encode(t: &T, size_limit: SizeLimit) -> IoResult> { let mut w = MemWriter::new(); match encode_into(t, &mut w, size_limit) { Ok(()) => Ok(w.into_inner()), Err(e) => Err(e) } } pub fn decode(b: Vec, size_limit: SizeLimit) -> IoResult { decode_from(&mut MemReader::new(b), size_limit) } pub fn encode_into(t: &T, w: &mut W, size_limit: SizeLimit) -> IoResult<()> { t.encode(&mut writer::EncoderWriter::new(w, size_limit)) } pub fn decode_from(r: &mut R, size_limit: SizeLimit) -> IoResult { Decodable::decode(&mut reader::DecoderReader::new(r, size_limit)) } #[cfg(test)] mod test;