#枚举 #序列化 #字符串 #serde #反序列化

无std serde-enum-str

序列化和反序列化枚举字符串

12个不稳定版本 (3个破坏性更新)

0.4.0 2023年8月4日
0.3.2 2022年12月17日
0.2.5 2022年4月5日
0.2.4 2021年8月22日
0.1.4 2021年7月25日

#1498 in 编码

Download history 20551/week @ 2024-04-09 24729/week @ 2024-04-16 24282/week @ 2024-04-23 23580/week @ 2024-04-30 24657/week @ 2024-05-07 21598/week @ 2024-05-14 23300/week @ 2024-05-21 22513/week @ 2024-05-28 20885/week @ 2024-06-04 23294/week @ 2024-06-11 19412/week @ 2024-06-18 18864/week @ 2024-06-25 17942/week @ 2024-07-02 20121/week @ 2024-07-09 19175/week @ 2024-07-16 16566/week @ 2024-07-23

每月下载量77,118
用于 67 个crate (30直接使用)

Apache-2.0 OR MIT

51KB
1K SLoC

serde-enum-str

解决

https://stackoverflow.com/questions/57469527

开发

cargo expand --verbose --test test

lib.rs:

序列化和反序列化枚举字符串。

[dependencies]
serde-enum-str = "0.3"
serde = { version = "1", features = ["derive"] }
use serde_enum_str::{Deserialize_enum_str, Serialize_enum_str};

#[derive(Deserialize_enum_str, Serialize_enum_str, Debug, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
enum Foo {
    A,
    #[serde(rename = "B")]
    B,
    #[serde(other)]
    Other(String),
}

fn main() -> serde_json::Result<()> {
    assert_eq!(serde_json::to_string(&Foo::A).unwrap(), r#""a""#);
    assert_eq!(serde_json::from_str::<Foo>(r#""a""#).unwrap(), Foo::A);

    assert_eq!(
        serde_json::from_str::<Foo>(r#""c""#).unwrap(),
        Foo::Other("c".to_owned())
    );

    assert_eq!(Foo::A.to_string(), "a");
    assert_eq!("a".parse::<Foo>().unwrap(), Foo::A);

    Ok(())
}

依赖

~2MB
~42K SLoC