mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-25 03:27:56 +00:00
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ab3e40ca45 | |||
| 8f67e9c048 | |||
| 7dc1a64f03 | |||
| ac3a3e922f | |||
| 4e50c56542 | |||
| 26b1ed79c0 | |||
| 2e8ef0f768 | |||
| c993414b92 | |||
| ed6ef4e149 | |||
| 859cdcc815 | |||
| 745a95b607 |
+25
-7
@@ -1,16 +1,34 @@
|
|||||||
language: rust
|
language: rust
|
||||||
|
rust:
|
||||||
|
- stable
|
||||||
|
- beta
|
||||||
|
- nightly
|
||||||
|
env:
|
||||||
|
global:
|
||||||
|
secure: HO41LMpMXkF2In9+1sxWVu7fgolL+y9+4Q5PI6wZX2L5pDwpPJCjxaQarQXCEnoIxED1PlP03JuF7ULNz0zw1ylYhAOfOSdkxFZRnE2wMZqq6qvXBHwyMiDrAociIzoPKSGv7JVrKPsjsnd+96K6xxueIodQZrmAdyq7N/M82Mc=
|
||||||
|
matrix:
|
||||||
|
- CRATE=serde_tests TARGET=test
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- rust: nightly
|
||||||
|
env: CRATE=serde_macros TARGET=test
|
||||||
|
- rust: nightly
|
||||||
|
env: CRATE=serde_macros TARGET=bench
|
||||||
|
- rust: nightly
|
||||||
|
env: CRATE=serde_tests TARGET=bench
|
||||||
script:
|
script:
|
||||||
- cargo test
|
- (cd $CRATE && cargo $TARGET)
|
||||||
- cargo bench
|
|
||||||
- cargo doc
|
|
||||||
after_success: |
|
after_success: |
|
||||||
[ $TRAVIS_BRANCH = "master" ] &&
|
[ $TRAVIS_BRANCH = "master" ] &&
|
||||||
[ $TRAVIS_PULL_REQUEST = false ] &&
|
[ $TRAVIS_PULL_REQUEST = false ] &&
|
||||||
cargo doc &&
|
mkdir -p target/doc &&
|
||||||
|
(cd serde && cargo doc --no-deps) &&
|
||||||
|
(cd serde_codegen && cargo doc --no-deps) &&
|
||||||
|
(cd serde_macros && cargo doc --no-deps) &&
|
||||||
|
cp -r serde/target/doc target/doc/serde &&
|
||||||
|
cp -r serde_codegen/target/doc target/doc/serde_codegen &&
|
||||||
|
cp -r serde_macros/target/doc target/doc/serde_macros &&
|
||||||
echo "<meta http-equiv=refresh content=0;url=`echo $TRAVIS_REPO_SLUG | cut -d '/' -f 2`/index.html>" > target/doc/index.html &&
|
echo "<meta http-equiv=refresh content=0;url=`echo $TRAVIS_REPO_SLUG | cut -d '/' -f 2`/index.html>" > target/doc/index.html &&
|
||||||
sudo pip install ghp-import &&
|
sudo pip install ghp-import &&
|
||||||
ghp-import -n target/doc &&
|
ghp-import -n target/doc &&
|
||||||
git push -fq https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG}.git gh-pages
|
git push -fq https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG}.git gh-pages
|
||||||
env:
|
|
||||||
global:
|
|
||||||
secure: HO41LMpMXkF2In9+1sxWVu7fgolL+y9+4Q5PI6wZX2L5pDwpPJCjxaQarQXCEnoIxED1PlP03JuF7ULNz0zw1ylYhAOfOSdkxFZRnE2wMZqq6qvXBHwyMiDrAociIzoPKSGv7JVrKPsjsnd+96K6xxueIodQZrmAdyq7N/M82Mc=
|
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ and
|
|||||||
for the annotated type:
|
for the annotated type:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
#[feature(custom_derive, plugin)]
|
#![feature(custom_derive, plugin)]
|
||||||
#[plugin(serde_macros)]
|
#![plugin(serde_macros)]
|
||||||
|
|
||||||
extern crate serde;
|
extern crate serde;
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "0.4.0"
|
version = "0.4.1"
|
||||||
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
|
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
|
||||||
license = "MIT/Apache-2.0"
|
license = "MIT/Apache-2.0"
|
||||||
description = "A generic serialization/deserialization framework"
|
description = "A generic serialization/deserialization framework"
|
||||||
|
|||||||
+21
-14
@@ -1,4 +1,5 @@
|
|||||||
use std::char;
|
use std::char;
|
||||||
|
use std::i32;
|
||||||
use std::io;
|
use std::io;
|
||||||
use std::str;
|
use std::str;
|
||||||
|
|
||||||
@@ -13,6 +14,15 @@ pub struct Deserializer<Iter: Iterator<Item=io::Result<u8>>> {
|
|||||||
str_buf: Vec<u8>,
|
str_buf: Vec<u8>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
macro_rules! try_or_invalid {
|
||||||
|
($self_:expr, $e:expr) => {
|
||||||
|
match $e {
|
||||||
|
Some(v) => v,
|
||||||
|
None => { return Err($self_.error(ErrorCode::InvalidNumber)); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<Iter> Deserializer<Iter>
|
impl<Iter> Deserializer<Iter>
|
||||||
where Iter: Iterator<Item=io::Result<u8>>,
|
where Iter: Iterator<Item=io::Result<u8>>,
|
||||||
{
|
{
|
||||||
@@ -198,16 +208,8 @@ impl<Iter> Deserializer<Iter>
|
|||||||
while !self.eof() {
|
while !self.eof() {
|
||||||
match self.ch_or_null() {
|
match self.ch_or_null() {
|
||||||
c @ b'0' ... b'9' => {
|
c @ b'0' ... b'9' => {
|
||||||
macro_rules! try_or_invalid {
|
accum = try_or_invalid!(self, accum.checked_mul(10));
|
||||||
($e: expr) => {
|
accum = try_or_invalid!(self, accum.checked_add((c as u64) - ('0' as u64)));
|
||||||
match $e {
|
|
||||||
Some(v) => v,
|
|
||||||
None => { return Err(self.error(ErrorCode::InvalidNumber)); }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
accum = try_or_invalid!(accum.checked_mul(10));
|
|
||||||
accum = try_or_invalid!(accum.checked_add((c as u64) - ('0' as u64)));
|
|
||||||
|
|
||||||
try!(self.bump());
|
try!(self.bump());
|
||||||
}
|
}
|
||||||
@@ -249,7 +251,7 @@ impl<Iter> Deserializer<Iter>
|
|||||||
fn parse_exponent(&mut self, mut res: f64) -> Result<f64, Error> {
|
fn parse_exponent(&mut self, mut res: f64) -> Result<f64, Error> {
|
||||||
try!(self.bump());
|
try!(self.bump());
|
||||||
|
|
||||||
let mut exp = 0;
|
let mut exp: u64 = 0;
|
||||||
let mut neg_exp = false;
|
let mut neg_exp = false;
|
||||||
|
|
||||||
if self.ch_is(b'+') {
|
if self.ch_is(b'+') {
|
||||||
@@ -267,8 +269,8 @@ impl<Iter> Deserializer<Iter>
|
|||||||
while !self.eof() {
|
while !self.eof() {
|
||||||
match self.ch_or_null() {
|
match self.ch_or_null() {
|
||||||
c @ b'0' ... b'9' => {
|
c @ b'0' ... b'9' => {
|
||||||
exp *= 10;
|
exp = try_or_invalid!(self, exp.checked_mul(10));
|
||||||
exp += (c as i32) - (b'0' as i32);
|
exp = try_or_invalid!(self, exp.checked_add((c as u64) - (b'0' as u64)));
|
||||||
|
|
||||||
try!(self.bump());
|
try!(self.bump());
|
||||||
}
|
}
|
||||||
@@ -276,7 +278,12 @@ impl<Iter> Deserializer<Iter>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let exp: f64 = 10_f64.powi(exp);
|
let exp = if exp <= i32::MAX as u64 {
|
||||||
|
10_f64.powi(exp as i32)
|
||||||
|
} else {
|
||||||
|
return Err(self.error(ErrorCode::InvalidNumber));
|
||||||
|
};
|
||||||
|
|
||||||
if neg_exp {
|
if neg_exp {
|
||||||
res /= exp;
|
res /= exp;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ impl Value {
|
|||||||
///
|
///
|
||||||
/// assert!(obj.lookup("x.a").unwrap() == &Value::U64(1));
|
/// assert!(obj.lookup("x.a").unwrap() == &Value::U64(1));
|
||||||
/// ```
|
/// ```
|
||||||
pub fn lookup<'a>(&'a self, path: &'a str) -> Option<&'a Value> {
|
pub fn lookup<'a>(&'a self, path: &str) -> Option<&'a Value> {
|
||||||
let mut target = self;
|
let mut target = self;
|
||||||
for key in path.split('.') {
|
for key in path.split('.') {
|
||||||
match target.find(key) {
|
match target.find(key) {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "serde_codegen"
|
name = "serde_codegen"
|
||||||
version = "0.4.0"
|
version = "0.4.1"
|
||||||
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
|
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
|
||||||
license = "MIT/Apache-2.0"
|
license = "MIT/Apache-2.0"
|
||||||
description = "Macros to auto-generate implementations for the serde framework"
|
description = "Macros to auto-generate implementations for the serde framework"
|
||||||
|
|||||||
@@ -24,11 +24,11 @@ pub fn expand_derive_deserialize(
|
|||||||
cx: &mut ExtCtxt,
|
cx: &mut ExtCtxt,
|
||||||
span: Span,
|
span: Span,
|
||||||
meta_item: &MetaItem,
|
meta_item: &MetaItem,
|
||||||
annotatable: Annotatable,
|
annotatable: &Annotatable,
|
||||||
push: &mut FnMut(Annotatable)
|
push: &mut FnMut(Annotatable)
|
||||||
) {
|
) {
|
||||||
let item = match annotatable {
|
let item = match *annotatable {
|
||||||
Annotatable::Item(item) => item,
|
Annotatable::Item(ref item) => item,
|
||||||
_ => {
|
_ => {
|
||||||
cx.span_err(
|
cx.span_err(
|
||||||
meta_item.span,
|
meta_item.span,
|
||||||
|
|||||||
@@ -19,11 +19,11 @@ pub fn expand_derive_serialize(
|
|||||||
cx: &mut ExtCtxt,
|
cx: &mut ExtCtxt,
|
||||||
span: Span,
|
span: Span,
|
||||||
meta_item: &MetaItem,
|
meta_item: &MetaItem,
|
||||||
annotatable: Annotatable,
|
annotatable: &Annotatable,
|
||||||
push: &mut FnMut(Annotatable)
|
push: &mut FnMut(Annotatable)
|
||||||
) {
|
) {
|
||||||
let item = match annotatable {
|
let item = match *annotatable {
|
||||||
Annotatable::Item(item) => item,
|
Annotatable::Item(ref item) => item,
|
||||||
_ => {
|
_ => {
|
||||||
cx.span_err(
|
cx.span_err(
|
||||||
meta_item.span,
|
meta_item.span,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "serde_macros"
|
name = "serde_macros"
|
||||||
version = "0.4.0"
|
version = "0.4.1"
|
||||||
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
|
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
|
||||||
license = "MIT/Apache-2.0"
|
license = "MIT/Apache-2.0"
|
||||||
description = "Macros to auto-generate implementations for the serde framework"
|
description = "Macros to auto-generate implementations for the serde framework"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "serde_tests"
|
name = "serde_tests"
|
||||||
version = "0.4.0"
|
version = "0.4.1"
|
||||||
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
|
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
|
||||||
license = "MIT/Apache-2.0"
|
license = "MIT/Apache-2.0"
|
||||||
description = "A generic serialization/deserialization framework"
|
description = "A generic serialization/deserialization framework"
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
#![feature(test)]
|
|
||||||
|
|
||||||
extern crate serde;
|
extern crate serde;
|
||||||
extern crate test;
|
|
||||||
|
|
||||||
include!(concat!(env!("OUT_DIR"), "/test.rs"));
|
include!(concat!(env!("OUT_DIR"), "/test.rs"));
|
||||||
|
|||||||
@@ -703,6 +703,7 @@ fn test_parse_number_errors() {
|
|||||||
("1e+", Error::SyntaxError(ErrorCode::InvalidNumber, 1, 3)),
|
("1e+", Error::SyntaxError(ErrorCode::InvalidNumber, 1, 3)),
|
||||||
("1a", Error::SyntaxError(ErrorCode::TrailingCharacters, 1, 2)),
|
("1a", Error::SyntaxError(ErrorCode::TrailingCharacters, 1, 2)),
|
||||||
("777777777777777777777777777", Error::SyntaxError(ErrorCode::InvalidNumber, 1, 20)),
|
("777777777777777777777777777", Error::SyntaxError(ErrorCode::InvalidNumber, 1, 20)),
|
||||||
|
("1e777777777777777777777777777", Error::SyntaxError(ErrorCode::InvalidNumber, 1, 22)),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user