1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#[cfg(not(feature = "std"))]
extern crate alloc;
mod lib {
mod core {
#[cfg(not(feature = "std"))]
pub use core::*;
#[cfg(feature = "std")]
pub use std::*;
}
pub use self::core::cell::{Cell, RefCell};
pub use self::core::clone::{self, Clone};
pub use self::core::convert::{self, From, Into};
pub use self::core::default::{self, Default};
pub use self::core::fmt::{self, Debug, Display};
pub use self::core::hash::{self, Hash, Hasher};
pub use self::core::iter::FusedIterator;
pub use self::core::marker::{self, PhantomData};
pub use self::core::ops::{Bound, RangeBounds};
pub use self::core::result::{self, Result};
pub use self::core::{borrow, char, cmp, iter, mem, num, ops, slice, str};
#[cfg(not(feature = "std"))]
pub use alloc::borrow::{Cow, ToOwned};
#[cfg(feature = "std")]
pub use std::borrow::{Cow, ToOwned};
#[cfg(not(feature = "std"))]
pub use alloc::string::{String, ToString};
#[cfg(feature = "std")]
pub use std::string::{String, ToString};
#[cfg(not(feature = "std"))]
pub use alloc::vec::{self, Vec};
#[cfg(feature = "std")]
pub use std::vec::{self, Vec};
#[cfg(not(feature = "std"))]
pub use alloc::boxed::Box;
#[cfg(feature = "std")]
pub use std::boxed::Box;
#[cfg(not(feature = "std"))]
pub use alloc::collections::{btree_map, BTreeMap};
#[cfg(feature = "std")]
pub use std::collections::{btree_map, BTreeMap};
#[cfg(feature = "std")]
pub use std::error;
}
macro_rules! tri {
($e:expr) => {
match $e {
crate::lib::Result::Ok(val) => val,
crate::lib::Result::Err(err) => return crate::lib::Result::Err(err),
}
};
($e:expr,) => {
tri!($e)
};
}
mod bytestring;
pub mod map;
mod number;
pub mod value;
pub use bytestring::ByteString;
pub use map::*;
pub use value::{from_value, to_value, Value};
impl From<serde_json::Value> for Value {
fn from(value: serde_json::Value) -> Self {
match value {
serde_json::Value::Null => Value::Null,
serde_json::Value::Bool(b) => Value::Bool(b),
serde_json::Value::Number(n) => Value::Number(n),
serde_json::Value::String(s) => Value::String(s.into()),
serde_json::Value::Array(v) => Value::Array(v.into_iter().map(Into::into).collect()),
serde_json::Value::Object(o) => {
Value::Object(o.into_iter().map(|(k, v)| (k.into(), v.into())).collect())
}
}
}
}
pub use serde_json::json;
#[macro_export]
macro_rules! bjson {
($($json:tt)+) => {
{
let value: serde_json_bytes::Value = $crate::json!($($json)+).into();
value
}
};
}