diff --git a/README.md b/README.md index 863aede..0cbfdb8 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ Project or files: ├── __log │   └── log4rs ├── __misc +│   ├── fancy-regex │   ├── human_panic │   ├── lazy_static │   ├── num_cpus @@ -82,6 +83,7 @@ Project or files: │   ├── csv │   ├── encoding │   ├── flatbuffers +│   ├── hjson │   └── serde_json ├── __shell │   ├── ssh2 @@ -139,7 +141,7 @@ Project or files: ├── vec.rs └── while.rs -111 directories, 26 files +113 directories, 26 files ``` diff --git a/__serialization/hjson/Cargo.lock b/__serialization/hjson/Cargo.lock new file mode 100644 index 0000000..1382abc --- /dev/null +++ b/__serialization/hjson/Cargo.lock @@ -0,0 +1,198 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "aho-corasick" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" +dependencies = [ + "memchr", +] + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "hjson" +version = "0.1.0" +dependencies = [ + "serde 1.0.117", + "serde-hjson", + "serde_json", +] + +[[package]] +name = "itoa" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "linked-hash-map" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d262045c5b87c0861b3f004610afd0e2c851e2908d08b6c870cbb9d5f494ecd" +dependencies = [ + "serde 0.8.23", + "serde_test", +] + +[[package]] +name = "memchr" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" + +[[package]] +name = "num-traits" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" +dependencies = [ + "num-traits 0.2.14", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + +[[package]] +name = "proc-macro2" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "regex" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", + "thread_local", +] + +[[package]] +name = "regex-syntax" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189" + +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "serde" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dad3f759919b92c3068c696c15c3d17238234498bbdcc80f2c469606f948ac8" + +[[package]] +name = "serde" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b88fa983de7720629c9387e9f517353ed404164b1e482c970a90c1a4aaf7dc1a" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-hjson" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a3a4e0ea8a88553209f6cc6cfe8724ecad22e1acf372793c27d995290fe74f8" +dependencies = [ + "lazy_static", + "linked-hash-map", + "num-traits 0.1.43", + "regex", + "serde 0.8.23", +] + +[[package]] +name = "serde_derive" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbd1ae72adb44aab48f325a02444a5fc079349a8d804c1fc922aed3f7454c74e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcac07dbffa1c65e7f816ab9eba78eb142c6d44410f4eeba1e26e4f5dfa56b95" +dependencies = [ + "itoa", + "ryu", + "serde 1.0.117", +] + +[[package]] +name = "serde_test" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "110b3dbdf8607ec493c22d5d947753282f3bae73c0f56d322af1e8c78e4c23d5" +dependencies = [ + "serde 0.8.23", +] + +[[package]] +name = "syn" +version = "1.0.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c1e438504729046a5cfae47f97c30d6d083c7d91d94603efdae3477fc070d4c" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "thread_local" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "unicode-xid" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" diff --git a/__serialization/hjson/Cargo.toml b/__serialization/hjson/Cargo.toml new file mode 100644 index 0000000..1329912 --- /dev/null +++ b/__serialization/hjson/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "hjson" +version = "0.1.0" +authors = ["Hatter Jiang "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +serde = { version = "*", features = ["derive"] } +serde_json = "*" +serde-hjson = "*" + diff --git a/__serialization/hjson/src/main.rs b/__serialization/hjson/src/main.rs new file mode 100644 index 0000000..0884771 --- /dev/null +++ b/__serialization/hjson/src/main.rs @@ -0,0 +1,51 @@ +use serde::{Serialize, Deserialize}; +use serde_json::Number; +use serde_json::map::Map; +use serde_json::Value as JsonValue; +use serde_hjson::Value as HJsonValue; + +#[derive(Serialize, Deserialize, Debug)] +struct Config { + id: f64, + name: String, +} + +fn main() { + let confing_str = r#" + { + id: 111 // id + name: "hatter jiang" // name + } +"#; + // let c: Config = serde_hjson::from_str(confing_str).unwrap(); // why not works? + let c: HJsonValue = serde_hjson::from_str(confing_str).unwrap(); + println!("{:#?}", &c); + println!("{}", serde_json::to_string_pretty(&map(&c)).unwrap()); + let cc: Config = serde_json::from_str(&serde_json::to_string_pretty(&map(&c)).unwrap()).unwrap(); + println!("{}", serde_json::to_string_pretty(&cc).unwrap()); +} + +fn map(c: &HJsonValue) -> JsonValue { + match c { + HJsonValue::Array(a) => { + let mut aa = vec![]; + for x in a.iter() { + aa.push(map(x)); + } + JsonValue::Array(aa) + } + HJsonValue::Bool(b) => JsonValue::Bool(*b), + HJsonValue::F64(f) => JsonValue::Number(Number::from_f64(*f).unwrap()), + HJsonValue::I64(i) => JsonValue::Number(Number::from_f64(*i as f64).unwrap()), + HJsonValue::Null => JsonValue::Null, + HJsonValue::Object(o) => { + let mut mm = Map::new(); + for (k, v) in o.iter() { + mm.insert(k.to_owned(), map(v)); + } + JsonValue::Object(mm) + }, + HJsonValue::String(s) => JsonValue::String(s.to_owned()), + HJsonValue::U64(u) => JsonValue::Number(Number::from_f64(*u as f64).unwrap()), + } +}