mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-22 22:58:02 +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
|
||||
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:
|
||||
- cargo test
|
||||
- cargo bench
|
||||
- cargo doc
|
||||
- (cd $CRATE && cargo $TARGET)
|
||||
after_success: |
|
||||
[ $TRAVIS_BRANCH = "master" ] &&
|
||||
[ $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 &&
|
||||
sudo pip install ghp-import &&
|
||||
ghp-import -n target/doc &&
|
||||
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:
|
||||
|
||||
```rust
|
||||
#[feature(custom_derive, plugin)]
|
||||
#[plugin(serde_macros)]
|
||||
#![feature(custom_derive, plugin)]
|
||||
#![plugin(serde_macros)]
|
||||
|
||||
extern crate serde;
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "serde"
|
||||
version = "0.4.0"
|
||||
version = "0.4.1"
|
||||
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
|
||||
license = "MIT/Apache-2.0"
|
||||
description = "A generic serialization/deserialization framework"
|
||||
|
||||
+21
-14
@@ -1,4 +1,5 @@
|
||||
use std::char;
|
||||
use std::i32;
|
||||
use std::io;
|
||||
use std::str;
|
||||
|
||||
@@ -13,6 +14,15 @@ pub struct Deserializer<Iter: Iterator<Item=io::Result<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>
|
||||
where Iter: Iterator<Item=io::Result<u8>>,
|
||||
{
|
||||
@@ -198,16 +208,8 @@ impl<Iter> Deserializer<Iter>
|
||||
while !self.eof() {
|
||||
match self.ch_or_null() {
|
||||
c @ b'0' ... b'9' => {
|
||||
macro_rules! try_or_invalid {
|
||||
($e: expr) => {
|
||||
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)));
|
||||
accum = try_or_invalid!(self, accum.checked_mul(10));
|
||||
accum = try_or_invalid!(self, accum.checked_add((c as u64) - ('0' as u64)));
|
||||
|
||||
try!(self.bump());
|
||||
}
|
||||
@@ -249,7 +251,7 @@ impl<Iter> Deserializer<Iter>
|
||||
fn parse_exponent(&mut self, mut res: f64) -> Result<f64, Error> {
|
||||
try!(self.bump());
|
||||
|
||||
let mut exp = 0;
|
||||
let mut exp: u64 = 0;
|
||||
let mut neg_exp = false;
|
||||
|
||||
if self.ch_is(b'+') {
|
||||
@@ -267,8 +269,8 @@ impl<Iter> Deserializer<Iter>
|
||||
while !self.eof() {
|
||||
match self.ch_or_null() {
|
||||
c @ b'0' ... b'9' => {
|
||||
exp *= 10;
|
||||
exp += (c as i32) - (b'0' as i32);
|
||||
exp = try_or_invalid!(self, exp.checked_mul(10));
|
||||
exp = try_or_invalid!(self, exp.checked_add((c as u64) - (b'0' as u64)));
|
||||
|
||||
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 {
|
||||
res /= exp;
|
||||
} else {
|
||||
|
||||
@@ -57,7 +57,7 @@ impl Value {
|
||||
///
|
||||
/// 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;
|
||||
for key in path.split('.') {
|
||||
match target.find(key) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "serde_codegen"
|
||||
version = "0.4.0"
|
||||
version = "0.4.1"
|
||||
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
|
||||
license = "MIT/Apache-2.0"
|
||||
description = "Macros to auto-generate implementations for the serde framework"
|
||||
|
||||
@@ -24,11 +24,11 @@ pub fn expand_derive_deserialize(
|
||||
cx: &mut ExtCtxt,
|
||||
span: Span,
|
||||
meta_item: &MetaItem,
|
||||
annotatable: Annotatable,
|
||||
annotatable: &Annotatable,
|
||||
push: &mut FnMut(Annotatable)
|
||||
) {
|
||||
let item = match annotatable {
|
||||
Annotatable::Item(item) => item,
|
||||
let item = match *annotatable {
|
||||
Annotatable::Item(ref item) => item,
|
||||
_ => {
|
||||
cx.span_err(
|
||||
meta_item.span,
|
||||
|
||||
@@ -19,11 +19,11 @@ pub fn expand_derive_serialize(
|
||||
cx: &mut ExtCtxt,
|
||||
span: Span,
|
||||
meta_item: &MetaItem,
|
||||
annotatable: Annotatable,
|
||||
annotatable: &Annotatable,
|
||||
push: &mut FnMut(Annotatable)
|
||||
) {
|
||||
let item = match annotatable {
|
||||
Annotatable::Item(item) => item,
|
||||
let item = match *annotatable {
|
||||
Annotatable::Item(ref item) => item,
|
||||
_ => {
|
||||
cx.span_err(
|
||||
meta_item.span,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "serde_macros"
|
||||
version = "0.4.0"
|
||||
version = "0.4.1"
|
||||
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
|
||||
license = "MIT/Apache-2.0"
|
||||
description = "Macros to auto-generate implementations for the serde framework"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "serde_tests"
|
||||
version = "0.4.0"
|
||||
version = "0.4.1"
|
||||
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>"]
|
||||
license = "MIT/Apache-2.0"
|
||||
description = "A generic serialization/deserialization framework"
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
#![feature(test)]
|
||||
|
||||
extern crate serde;
|
||||
extern crate test;
|
||||
|
||||
include!(concat!(env!("OUT_DIR"), "/test.rs"));
|
||||
|
||||
@@ -703,6 +703,7 @@ fn test_parse_number_errors() {
|
||||
("1e+", Error::SyntaxError(ErrorCode::InvalidNumber, 1, 3)),
|
||||
("1a", Error::SyntaxError(ErrorCode::TrailingCharacters, 1, 2)),
|
||||
("777777777777777777777777777", Error::SyntaxError(ErrorCode::InvalidNumber, 1, 20)),
|
||||
("1e777777777777777777777777777", Error::SyntaxError(ErrorCode::InvalidNumber, 1, 22)),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user