From 9dd5f9dc7a68f90935af1a6c148b86cf4c971c91 Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Wed, 13 May 2015 07:58:41 -0700 Subject: [PATCH] Restructure directories to prep for syntex --- Cargo.toml => serde/Cargo.toml | 4 - {examples => serde/examples}/json.rs | 0 serde/src/buf.rs | 94 +++++++++++++++++++ {src => serde/src}/bytes.rs | 0 {src => serde/src}/de/impls.rs | 0 {src => serde/src}/de/mod.rs | 0 {src => serde/src}/de/value.rs | 0 {src => serde/src}/iter.rs | 0 {src => serde/src}/json/builder.rs | 0 {src => serde/src}/json/de.rs | 0 {src => serde/src}/json/error.rs | 0 {src => serde/src}/json/mod.rs | 0 {src => serde/src}/json/ser.rs | 0 {src => serde/src}/json/value.rs | 0 {src => serde/src}/lib.rs | 0 {src => serde/src}/ser/impls.rs | 0 {src => serde/src}/ser/mod.rs | 0 serde_tests/Cargo.toml | 18 ++++ .../benches}/bench_enum.rs | 0 {benches => serde_tests/benches}/bench_log.rs | 0 {benches => serde_tests/benches}/bench_map.rs | 0 .../benches}/bench_struct.rs | 0 {benches => serde_tests/benches}/bench_vec.rs | 0 .../tests}/test_annotations.rs | 0 {tests => serde_tests/tests}/test_bytes.rs | 0 {tests => serde_tests/tests}/test_de.rs | 0 {tests => serde_tests/tests}/test_json.rs | 0 .../tests}/test_json_builder.rs | 0 {tests => serde_tests/tests}/test_macros.rs | 0 {tests => serde_tests/tests}/test_ser.rs | 0 30 files changed, 112 insertions(+), 4 deletions(-) rename Cargo.toml => serde/Cargo.toml (79%) rename {examples => serde/examples}/json.rs (100%) create mode 100644 serde/src/buf.rs rename {src => serde/src}/bytes.rs (100%) rename {src => serde/src}/de/impls.rs (100%) rename {src => serde/src}/de/mod.rs (100%) rename {src => serde/src}/de/value.rs (100%) rename {src => serde/src}/iter.rs (100%) rename {src => serde/src}/json/builder.rs (100%) rename {src => serde/src}/json/de.rs (100%) rename {src => serde/src}/json/error.rs (100%) rename {src => serde/src}/json/mod.rs (100%) rename {src => serde/src}/json/ser.rs (100%) rename {src => serde/src}/json/value.rs (100%) rename {src => serde/src}/lib.rs (100%) rename {src => serde/src}/ser/impls.rs (100%) rename {src => serde/src}/ser/mod.rs (100%) create mode 100644 serde_tests/Cargo.toml rename {benches => serde_tests/benches}/bench_enum.rs (100%) rename {benches => serde_tests/benches}/bench_log.rs (100%) rename {benches => serde_tests/benches}/bench_map.rs (100%) rename {benches => serde_tests/benches}/bench_struct.rs (100%) rename {benches => serde_tests/benches}/bench_vec.rs (100%) rename {tests => serde_tests/tests}/test_annotations.rs (100%) rename {tests => serde_tests/tests}/test_bytes.rs (100%) rename {tests => serde_tests/tests}/test_de.rs (100%) rename {tests => serde_tests/tests}/test_json.rs (100%) rename {tests => serde_tests/tests}/test_json_builder.rs (100%) rename {tests => serde_tests/tests}/test_macros.rs (100%) rename {tests => serde_tests/tests}/test_ser.rs (100%) diff --git a/Cargo.toml b/serde/Cargo.toml similarity index 79% rename from Cargo.toml rename to serde/Cargo.toml index 9269fd92..e5f1726f 100644 --- a/Cargo.toml +++ b/serde/Cargo.toml @@ -11,7 +11,3 @@ keywords = ["serialization"] [dependencies] num = "*" - -[dev-dependencies] -rustc-serialize = "*" -serde_macros = { version = "*", path = "serde_macros" } diff --git a/examples/json.rs b/serde/examples/json.rs similarity index 100% rename from examples/json.rs rename to serde/examples/json.rs diff --git a/serde/src/buf.rs b/serde/src/buf.rs new file mode 100644 index 00000000..4dd41aaf --- /dev/null +++ b/serde/src/buf.rs @@ -0,0 +1,94 @@ +use std::cmp; +use std::io; +use std::slice; + +trait IntoBufRead { + type IntoBuf: io::BufRead + BufReadExt; + + fn into_buf_read(self) -> Self::IntoBuf; +} + +trait BufReadExt { + fn get_buf(&self) -> &[u8]; + fn read_u8(&mut self) -> io::Result>; +} + +struct SliceReader<'a> { + buf: &'a [u8], +} + +impl<'a> io::Read for SliceReader<'a> { + #[inline] + fn read(&mut self, buf: &mut [u8]) -> io::Result { + let amt = cmp::min(buf.len(), self.buf.len()); + let (a, b) = self.buf.split_at(amt); + slice::bytes::copy_memory(buf, a); + *self.buf = b; + Ok(amt) + } +} + +impl<'a> io::BufRead for SliceReader<'a> { + fn fill_buf(&mut self) -> io::Result<&[u8]> { Ok(*self) } + fn consume(&mut self, amt: usize) { *self.buf = &self.buf[amt..]; } +} + +impl<'a> BufReadExt for SliceReader<'a> { + fn get_buf(&self) -> &[u8] { self.buf } + fn read_u8(&mut self) -> io::Result> { + let byte = self.buf.get(0); + *self.buf = &self.buf[1..]; + byte + } +} + +struct BufReader { + inner: R, + buf: io::Cursor>, +} + +impl BufReader where R: io::Read { + fn new(inner: R) -> Self { + BufferedReader::with_capacity(io::DEFAULT_BUF_SIZE, inner) + } + + fn new(cap: usize, inner: R) -> Self { + BufferedReader { + inner: inner, + buf: io::Cursor::new(Vec::with_capacity(cap)), + } + } + + fn into_inner(self) -> R { + self.inner + } +} + +impl Read for BufReader where R: io::Read { + fn read(&mut self, buf: &mut [u8]) -> io::Result { + // If we don't have any buffered data and we're doing a massive read + // (larger than our internal buffer), bypass our internal buffer + // entirely. + if self.buf.get_ref().len() == self.buf.position() as usize && + buf.len() >= self.buf.get_ref().capacity() { + return self.inner.read(buf); + } + try!(self.fill_buf()); + self.buf.read(buf) + } +} + +impl BufReadExt for BufReader { + fn get_buf(&self) -> &[u8] { + self.buf.get_ref() + } + + fn read_u8(&mut self) -> io::Result> { + if self.buf.get_ref().len() == self.buf.position() as usize { + + } + let byte = self.buf.get(0); + *self.buf = &self.buf[1..]; + byte + } +} diff --git a/src/bytes.rs b/serde/src/bytes.rs similarity index 100% rename from src/bytes.rs rename to serde/src/bytes.rs diff --git a/src/de/impls.rs b/serde/src/de/impls.rs similarity index 100% rename from src/de/impls.rs rename to serde/src/de/impls.rs diff --git a/src/de/mod.rs b/serde/src/de/mod.rs similarity index 100% rename from src/de/mod.rs rename to serde/src/de/mod.rs diff --git a/src/de/value.rs b/serde/src/de/value.rs similarity index 100% rename from src/de/value.rs rename to serde/src/de/value.rs diff --git a/src/iter.rs b/serde/src/iter.rs similarity index 100% rename from src/iter.rs rename to serde/src/iter.rs diff --git a/src/json/builder.rs b/serde/src/json/builder.rs similarity index 100% rename from src/json/builder.rs rename to serde/src/json/builder.rs diff --git a/src/json/de.rs b/serde/src/json/de.rs similarity index 100% rename from src/json/de.rs rename to serde/src/json/de.rs diff --git a/src/json/error.rs b/serde/src/json/error.rs similarity index 100% rename from src/json/error.rs rename to serde/src/json/error.rs diff --git a/src/json/mod.rs b/serde/src/json/mod.rs similarity index 100% rename from src/json/mod.rs rename to serde/src/json/mod.rs diff --git a/src/json/ser.rs b/serde/src/json/ser.rs similarity index 100% rename from src/json/ser.rs rename to serde/src/json/ser.rs diff --git a/src/json/value.rs b/serde/src/json/value.rs similarity index 100% rename from src/json/value.rs rename to serde/src/json/value.rs diff --git a/src/lib.rs b/serde/src/lib.rs similarity index 100% rename from src/lib.rs rename to serde/src/lib.rs diff --git a/src/ser/impls.rs b/serde/src/ser/impls.rs similarity index 100% rename from src/ser/impls.rs rename to serde/src/ser/impls.rs diff --git a/src/ser/mod.rs b/serde/src/ser/mod.rs similarity index 100% rename from src/ser/mod.rs rename to serde/src/ser/mod.rs diff --git a/serde_tests/Cargo.toml b/serde_tests/Cargo.toml new file mode 100644 index 00000000..2df1f68b --- /dev/null +++ b/serde_tests/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "serde_tests" +version = "0.3.3" +authors = ["Erick Tryzelaar "] +license = "MIT/Apache-2.0" +description = "A generic serialization/deserialization framework" +repository = "https://github.com/serde-rs/serde" +documentation = "http://serde-rs.github.io/serde/serde" +readme = "README.md" +keywords = ["serialization"] + +[dependencies] +num = "*" + +[dev-dependencies] +rustc-serialize = "*" +serde = { version = "*", path = "../serde" } +serde_macros = { version = "*", path = "../serde_macros" } diff --git a/benches/bench_enum.rs b/serde_tests/benches/bench_enum.rs similarity index 100% rename from benches/bench_enum.rs rename to serde_tests/benches/bench_enum.rs diff --git a/benches/bench_log.rs b/serde_tests/benches/bench_log.rs similarity index 100% rename from benches/bench_log.rs rename to serde_tests/benches/bench_log.rs diff --git a/benches/bench_map.rs b/serde_tests/benches/bench_map.rs similarity index 100% rename from benches/bench_map.rs rename to serde_tests/benches/bench_map.rs diff --git a/benches/bench_struct.rs b/serde_tests/benches/bench_struct.rs similarity index 100% rename from benches/bench_struct.rs rename to serde_tests/benches/bench_struct.rs diff --git a/benches/bench_vec.rs b/serde_tests/benches/bench_vec.rs similarity index 100% rename from benches/bench_vec.rs rename to serde_tests/benches/bench_vec.rs diff --git a/tests/test_annotations.rs b/serde_tests/tests/test_annotations.rs similarity index 100% rename from tests/test_annotations.rs rename to serde_tests/tests/test_annotations.rs diff --git a/tests/test_bytes.rs b/serde_tests/tests/test_bytes.rs similarity index 100% rename from tests/test_bytes.rs rename to serde_tests/tests/test_bytes.rs diff --git a/tests/test_de.rs b/serde_tests/tests/test_de.rs similarity index 100% rename from tests/test_de.rs rename to serde_tests/tests/test_de.rs diff --git a/tests/test_json.rs b/serde_tests/tests/test_json.rs similarity index 100% rename from tests/test_json.rs rename to serde_tests/tests/test_json.rs diff --git a/tests/test_json_builder.rs b/serde_tests/tests/test_json_builder.rs similarity index 100% rename from tests/test_json_builder.rs rename to serde_tests/tests/test_json_builder.rs diff --git a/tests/test_macros.rs b/serde_tests/tests/test_macros.rs similarity index 100% rename from tests/test_macros.rs rename to serde_tests/tests/test_macros.rs diff --git a/tests/test_ser.rs b/serde_tests/tests/test_ser.rs similarity index 100% rename from tests/test_ser.rs rename to serde_tests/tests/test_ser.rs