Skip to content

Commit 2917fac

Browse files
committed
bump 0.3.8
1 parent b86259d commit 2917fac

File tree

4 files changed

+53
-3
lines changed

4 files changed

+53
-3
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "sonic-rs"
3-
version = "0.3.7"
3+
version = "0.3.8"
44
authors = ["Volo Team <[email protected]>"]
55
edition = "2021"
66
description = "Sonic-rs is a fast Rust JSON library based on SIMD"

src/lazyvalue/value.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ use std::{
99

1010
use faststr::FastStr;
1111

12+
#[cfg(feature = "arbitrary_precision")]
13+
use crate::RawNumber;
1214
use crate::{
1315
from_str, get_unchecked, index::Index, input::JsonSlice, serde::Number, JsonType,
1416
JsonValueTrait, Result,

src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ pub mod writer;
2020
pub use ::faststr::FastStr;
2121
// re-export the serde trait
2222
pub use ::serde::{Deserialize, Serialize};
23+
#[doc(inline)]
24+
pub use reader::Read;
2325

2426
#[doc(inline)]
2527
pub use crate::error::{Error, Result};

src/reader.rs

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,30 @@ pub trait Reader<'de>: Sealed {
9595
}
9696
}
9797

98-
/// JSON input source that reads from a slice of bytes.
98+
/// JSON input source that reads from a string/bytes-like JSON input.
99+
///
100+
/// Support most common types: &str, &[u8], &FastStr, &Bytes and &String
101+
///
102+
/// # Examples
103+
/// ```
104+
/// use bytes::Bytes;
105+
/// use faststr::FastStr;
106+
/// use serde::de::Deserialize;
107+
/// use sonic_rs::{Deserializer, Read};
108+
///
109+
/// let mut de = Deserializer::new(Read::from(r#"123"#));
110+
/// let num: i32 = Deserialize::deserialize(&mut de).unwrap();
111+
/// assert_eq!(num, 123);
112+
///
113+
/// let mut de = Deserializer::new(Read::from(r#"123"#.as_bytes()));
114+
/// let num: i32 = Deserialize::deserialize(&mut de).unwrap();
115+
/// assert_eq!(num, 123);
116+
///
117+
/// let f = FastStr::new("123");
118+
/// let mut de = Deserializer::new(Read::from(&f));
119+
/// let num: i32 = Deserialize::deserialize(&mut de).unwrap();
120+
/// assert_eq!(num, 123);
121+
/// ```
99122
pub struct Read<'a> {
100123
slice: &'a [u8],
101124
pub(crate) index: usize,
@@ -335,8 +358,11 @@ impl<'a> Reader<'a> for PaddedSliceRead<'a> {
335358

336359
#[cfg(test)]
337360
mod test {
338-
use super::*;
361+
use bytes::Bytes;
362+
use faststr::FastStr;
339363

364+
use super::*;
365+
use crate::{Deserialize, Deserializer};
340366
fn test_peek() {
341367
let data = b"1234567890";
342368
let mut reader = Read::new(data, false);
@@ -371,4 +397,24 @@ mod test {
371397
test_next();
372398
test_index();
373399
}
400+
401+
macro_rules! test_deserialize_reader {
402+
($json:expr) => {
403+
let mut de = Deserializer::new(Read::from($json));
404+
let num: i32 = Deserialize::deserialize(&mut de).unwrap();
405+
assert_eq!(num, 123);
406+
};
407+
}
408+
409+
#[test]
410+
fn test_deserialize() {
411+
let b = Bytes::from(r#"123"#);
412+
let f = FastStr::from(r#"123"#);
413+
let s = String::from(r#"123"#);
414+
test_deserialize_reader!(r#"123"#);
415+
test_deserialize_reader!(r#"123"#.as_bytes());
416+
test_deserialize_reader!(&b);
417+
test_deserialize_reader!(&f);
418+
test_deserialize_reader!(&s);
419+
}
374420
}

0 commit comments

Comments
 (0)