mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-10-21 03:06:22 +00:00
Migrate over to cargo
This commit is contained in:
1 parent
618e8d7b5a
commit
4077d83cf2
14 files changed
+246
-3
No files matched your search
@@ -0,0 +1 @@
|
||||
/target/
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
[package]
|
||||
name = "serde"
|
||||
version = "0.1.0"
|
||||
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
|
||||
|
||||
[[lib]]
|
||||
name = "serde"
|
||||
path = "src/lib.rs"
|
||||
|
||||
[dependencies.serde_macros]
|
||||
path = "serde_macros/"
|
||||
@@ -0,0 +1,9 @@
|
||||
[package]
|
||||
name = "serde_macros"
|
||||
version = "0.1.0"
|
||||
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
|
||||
|
||||
[[lib]]
|
||||
name = "serde_macros"
|
||||
path = "src/lib.rs"
|
||||
plugin = true
|
||||
@@ -1,5 +1,6 @@
|
||||
#![crate_name = "serde_macros"]
|
||||
#![crate_type = "dylib"]
|
||||
#![crate_type = "rlib"]
|
||||
#![license = "MIT/ASL2"]
|
||||
|
||||
#![feature(plugin_registrar)]
|
||||
|
||||
@@ -114,7 +115,6 @@ fn expand_deriving_serializable(cx: &mut ExtCtxt,
|
||||
)
|
||||
),
|
||||
attributes: attrs,
|
||||
const_nonmatching: true,
|
||||
combine_substructure: combine_substructure(|a, b, c| {
|
||||
serializable_substructure(a, b, c)
|
||||
}),
|
||||
@@ -291,7 +291,6 @@ pub fn expand_deriving_deserializable(cx: &mut ExtCtxt,
|
||||
)
|
||||
),
|
||||
attributes: Vec::new(),
|
||||
const_nonmatching: true,
|
||||
combine_substructure: combine_substructure(|a, b, c| {
|
||||
deserializable_substructure(a, b, c)
|
||||
}),
|
||||
@@ -0,0 +1,223 @@
|
||||
use test::Bencher;
|
||||
|
||||
use serialize::Decodable;
|
||||
|
||||
use de::{Deserializable};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#[deriving(Show)]
|
||||
enum Error {
|
||||
EndOfStream,
|
||||
SyntaxError,
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
mod decoder {
|
||||
use std::vec;
|
||||
use serialize::Decoder;
|
||||
|
||||
use super::{Error, EndOfStream, SyntaxError};
|
||||
|
||||
pub struct BytesDecoder {
|
||||
iter: vec::MoveItems<u8>,
|
||||
}
|
||||
|
||||
impl BytesDecoder {
|
||||
#[inline]
|
||||
pub fn new(values: Vec<u8>) -> BytesDecoder {
|
||||
BytesDecoder {
|
||||
iter: values.move_iter()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Decoder<Error> for BytesDecoder {
|
||||
// Primitive types:
|
||||
fn read_nil(&mut self) -> Result<(), Error> { Err(SyntaxError) }
|
||||
fn read_uint(&mut self) -> Result<uint, Error> { Err(SyntaxError) }
|
||||
fn read_u64(&mut self) -> Result<u64, Error> { Err(SyntaxError) }
|
||||
fn read_u32(&mut self) -> Result<u32, Error> { Err(SyntaxError) }
|
||||
fn read_u16(&mut self) -> Result<u16, Error> { Err(SyntaxError) }
|
||||
#[inline]
|
||||
fn read_u8(&mut self) -> Result<u8, Error> {
|
||||
match self.iter.next() {
|
||||
Some(value) => Ok(value),
|
||||
None => Err(EndOfStream),
|
||||
}
|
||||
}
|
||||
fn read_int(&mut self) -> Result<int, Error> { Err(SyntaxError) }
|
||||
fn read_i64(&mut self) -> Result<i64, Error> { Err(SyntaxError) }
|
||||
fn read_i32(&mut self) -> Result<i32, Error> { Err(SyntaxError) }
|
||||
fn read_i16(&mut self) -> Result<i16, Error> { Err(SyntaxError) }
|
||||
fn read_i8(&mut self) -> Result<i8, Error> { Err(SyntaxError) }
|
||||
fn read_bool(&mut self) -> Result<bool, Error> { Err(SyntaxError) }
|
||||
fn read_f64(&mut self) -> Result<f64, Error> { Err(SyntaxError) }
|
||||
fn read_f32(&mut self) -> Result<f32, Error> { Err(SyntaxError) }
|
||||
fn read_char(&mut self) -> Result<char, Error> { Err(SyntaxError) }
|
||||
fn read_str(&mut self) -> Result<String, Error> { Err(SyntaxError) }
|
||||
|
||||
// Compound types:
|
||||
fn read_enum<T>(&mut self, _name: &str, _f: |&mut BytesDecoder| -> Result<T, Error>) -> Result<T, Error> { Err(SyntaxError) }
|
||||
|
||||
fn read_enum_variant<T>(&mut self,
|
||||
_names: &[&str],
|
||||
_f: |&mut BytesDecoder, uint| -> Result<T, Error>)
|
||||
-> Result<T, Error> { Err(SyntaxError) }
|
||||
fn read_enum_variant_arg<T>(&mut self,
|
||||
_a_idx: uint,
|
||||
_f: |&mut BytesDecoder| -> Result<T, Error>)
|
||||
-> Result<T, Error> { Err(SyntaxError) }
|
||||
|
||||
fn read_enum_struct_variant<T>(&mut self,
|
||||
_names: &[&str],
|
||||
_f: |&mut BytesDecoder, uint| -> Result<T, Error>)
|
||||
-> Result<T, Error> { Err(SyntaxError) }
|
||||
fn read_enum_struct_variant_field<T>(&mut self,
|
||||
_f_name: &str,
|
||||
_f_idx: uint,
|
||||
_f: |&mut BytesDecoder| -> Result<T, Error>)
|
||||
-> Result<T, Error> { Err(SyntaxError) }
|
||||
|
||||
fn read_struct<T>(&mut self, _s_name: &str, _len: uint, _f: |&mut BytesDecoder| -> Result<T, Error>)
|
||||
-> Result<T, Error> { Err(SyntaxError) }
|
||||
fn read_struct_field<T>(&mut self,
|
||||
_f_name: &str,
|
||||
_f_idx: uint,
|
||||
_f: |&mut BytesDecoder| -> Result<T, Error>)
|
||||
-> Result<T, Error> { Err(SyntaxError) }
|
||||
|
||||
fn read_tuple<T>(&mut self, _f: |&mut BytesDecoder, uint| -> Result<T, Error>) -> Result<T, Error> { Err(SyntaxError) }
|
||||
fn read_tuple_arg<T>(&mut self, _a_idx: uint, _f: |&mut BytesDecoder| -> Result<T, Error>) -> Result<T, Error> { Err(SyntaxError) }
|
||||
|
||||
fn read_tuple_struct<T>(&mut self,
|
||||
_s_name: &str,
|
||||
_f: |&mut BytesDecoder, uint| -> Result<T, Error>)
|
||||
-> Result<T, Error> { Err(SyntaxError) }
|
||||
fn read_tuple_struct_arg<T>(&mut self,
|
||||
_a_idx: uint,
|
||||
_f: |&mut BytesDecoder| -> Result<T, Error>)
|
||||
-> Result<T, Error> { Err(SyntaxError) }
|
||||
|
||||
// Specialized types:
|
||||
fn read_option<T>(&mut self, _f: |&mut BytesDecoder, bool| -> Result<T, Error>) -> Result<T, Error> { Err(SyntaxError) }
|
||||
|
||||
#[inline]
|
||||
fn read_seq<T>(&mut self, f: |&mut BytesDecoder, uint| -> Result<T, Error>) -> Result<T, Error> {
|
||||
f(self, 3)
|
||||
}
|
||||
#[inline]
|
||||
fn read_seq_elt<T>(&mut self, _idx: uint, f: |&mut BytesDecoder| -> Result<T, Error>) -> Result<T, Error> {
|
||||
f(self)
|
||||
}
|
||||
|
||||
fn read_map<T>(&mut self, _f: |&mut BytesDecoder, uint| -> Result<T, Error>) -> Result<T, Error> { Err(SyntaxError) }
|
||||
fn read_map_elt_key<T>(&mut self, _idx: uint, _f: |&mut BytesDecoder| -> Result<T, Error>) -> Result<T, Error> { Err(SyntaxError) }
|
||||
fn read_map_elt_val<T>(&mut self, _idx: uint, _f: |&mut BytesDecoder| -> Result<T, Error>) -> Result<T, Error> { Err(SyntaxError) }
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
mod deserializer {
|
||||
use std::num;
|
||||
use std::vec;
|
||||
|
||||
use super::{Error, EndOfStream, SyntaxError};
|
||||
|
||||
use de::Deserializer;
|
||||
use de::{Token, Int, SeqStart, Sep, End};
|
||||
|
||||
#[deriving(Eq, Show)]
|
||||
enum State {
|
||||
StartState,
|
||||
SepOrEndState,
|
||||
EndState,
|
||||
}
|
||||
|
||||
pub struct BytesDeserializer {
|
||||
state: State,
|
||||
len: uint,
|
||||
iter: vec::MoveItems<u8>,
|
||||
}
|
||||
|
||||
impl BytesDeserializer {
|
||||
#[inline]
|
||||
pub fn new(values: Vec<int>) -> BytesDeserializer {
|
||||
BytesDeserializer {
|
||||
state: StartState,
|
||||
len: values.len(),
|
||||
iter: values.move_iter(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Iterator<Result<Token, Error>> for BytesDeserializer {
|
||||
#[inline]
|
||||
fn next(&mut self) -> Option<Result<Token, Error>> {
|
||||
match self.state {
|
||||
StartState => {
|
||||
self.state = SepOrEndState;
|
||||
Some(Ok(SeqStart(self.len)))
|
||||
}
|
||||
SepOrEndState => {
|
||||
match self.iter.next() {
|
||||
Some(value) => {
|
||||
Some(Ok(Int(value)))
|
||||
}
|
||||
None => {
|
||||
self.state = EndState;
|
||||
Some(Ok(End))
|
||||
}
|
||||
}
|
||||
}
|
||||
EndState => {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Deserializer<Error> for BytesDeserializer {
|
||||
#[inline]
|
||||
fn end_of_stream_error<T>(&self) -> Result<T, Error> {
|
||||
Err(EndOfStream)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn syntax_error<T>(&self) -> Result<T, Error> {
|
||||
Err(SyntaxError)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
fn run_bench_decoder(bytes: Vec<u8>) {
|
||||
let mut d = decoder::BytesDecoder::new(bytes.clone());
|
||||
let value: Vec<u8> = Decodable::decode(&mut d).unwrap();
|
||||
|
||||
assert_eq!(value, bytes);
|
||||
}
|
||||
|
||||
fn run_bench_deserializer(bytes: Vec<u8>) {
|
||||
let mut d = deserializer::BytesDeserializer::new(bytes.clone());
|
||||
let value: Vec<u8> = Deserializable::deserialize(&mut d).unwrap();
|
||||
|
||||
assert_eq!(value, bytes);
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_bytes_decoder_empty(b: &mut Bencher) {
|
||||
b.iter(|| {
|
||||
run_bench_decoder(vec!())
|
||||
})
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_bytes_deserializer_empty(b: &mut Bencher) {
|
||||
b.iter(|| {
|
||||
run_bench_deserializer(vec!())
|
||||
})
|
||||
}
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Reference in new issue
Block a user