#serde-json #proc-macro #serde-derive #stable #operations #compatible #collection

serde-json-helpers

一个与稳定版 Rust 2018 兼容的过程宏集合,简化了一些由 serde_derive 没有涵盖的常见操作。

3 个版本

0.1.2 2019年2月18日
0.1.1 2019年2月17日
0.1.0 2019年2月17日

#1303 in 过程宏

MIT OR Apache-2.0+

23KB
372 代码行(不含注释)

Crates.io Build Status

serde-json-helpers

一个与稳定版 Rust 2018 兼容的过程宏集合,简化了一些由 serde_derive 没有涵盖的常见操作。

虽然这个包命名为 serde_json_helpers,但使用它并不需要 serde_json;这只是过程宏想要帮助的。

示例

serde_enum_string

use serde_json_helpers::serde_enum_string;

#[serde_enum_string(transform = "snake_case")]
#[derive(Debug, Copy, Clone, PartialOrd, PartialEq)]
enum ExampleEnum {
    Option1,
    Option2,
    Option3,
    AnotherOption,
}

fn main() {
    let out1 =
        serde_json::to_string(&ExampleEnum::Option1).expect("Unable to serialize ExampleEnum");
    let out2 =
        serde_json::to_string(&ExampleEnum::Option2).expect("Unable to serialize ExampleEnum");
    let out3 =
        serde_json::to_string(&ExampleEnum::Option3).expect("Unable to serialize ExampleEnum");
    let out4 = serde_json::to_string(&ExampleEnum::AnotherOption)
        .expect("Unable to serialize ExampleEnum");

    println!("Serialized ExampleEnum::Option1: {}", out1);
    println!("Serialized ExampleEnum::Option2: {}", out2);
    println!("Serialized ExampleEnum::Option3: {}", out3);
    println!("Serialized ExampleEnum::AnotherOption: {}", out4);

    let in1 = serde_json::from_str::<ExampleEnum>(&*out1).expect("Unable to deserialize");
    let in2 = serde_json::from_str::<ExampleEnum>(&*out2).expect("Unable to deserialize");
    let in3 = serde_json::from_str::<ExampleEnum>(&*out3).expect("Unable to deserialize");
    let in4 = serde_json::from_str::<ExampleEnum>(&*out4).expect("Unable to deserialize");

    println!("Deserialized {}: {:?}", out1, in1);
    println!("Deserialized {}: {:?}", out2, in2);
    println!("Deserialized {}: {:?}", out3, in3);
    println!("Deserialized {}: {:?}", out4, in4);

    println!(
        "Bad deserialized value {}: {:?}",
        "\"bad_value\"",
        serde_json::from_str::<ExampleEnum>("\"bad_value\"")
    );
}

许可证

以下任一许可证下授权:

任选其一。

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交的工作内容将根据上述许可证双重授权,不附加任何额外条款或条件。

依赖关系

~0.7–1.3MB
~29K SLoC