You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
965 B
Rust
50 lines
965 B
Rust
#![warn(rust_2018_idioms)]
|
|
#![allow(elided_lifetimes_in_paths)]
|
|
|
|
use std::collections::HashMap;
|
|
|
|
#[macro_use] mod macros;
|
|
|
|
#[derive(Clone, PartialEq, Debug)]
|
|
pub enum Json {
|
|
Null,
|
|
Boolean(bool),
|
|
Number(f64),
|
|
String(String),
|
|
Array(Vec<Json>),
|
|
Object(Box<HashMap<String, Json>>)
|
|
}
|
|
|
|
impl From<bool> for Json {
|
|
fn from(b: bool) -> Json {
|
|
Json::Boolean(b)
|
|
}
|
|
}
|
|
|
|
impl From<String> for Json {
|
|
fn from(s: String) -> Json {
|
|
Json::String(s)
|
|
}
|
|
}
|
|
|
|
impl<'a> From<&'a str> for Json {
|
|
fn from(s: &'a str) -> Json {
|
|
Json::String(s.to_string())
|
|
}
|
|
}
|
|
|
|
macro_rules! impl_from_num_for_json {
|
|
( $( $t:ident )* ) => {
|
|
$(
|
|
impl From<$t> for Json {
|
|
fn from(n: $t) -> Json {
|
|
Json::Number(n as f64)
|
|
}
|
|
}
|
|
)*
|
|
};
|
|
}
|
|
|
|
impl_from_num_for_json!(u8 i8 u16 i16 u32 i32 u64 i64 u128 i128
|
|
usize isize f32 f64);
|