#serialization #serde #configuration #section #fields #enabled #false

serde_enabled

一个小的包装器,使用Serde更容易地在配置文件中启用/禁用部分

1个不稳定版本

0.1.0 2024年1月17日

#1255 in 编码

MIT 许可证

9KB
196

Enable<T> 是一个包装器,当使用 Serde 序列化 T 时,它添加一个额外的字段 enabled。该字段可以是 true,在这种情况下,T 的所有字段都需要存在,或者它可以是一个 false,这时可以省略 T 的所有字段。

该用例是用于配置YAML文件,其中可以切换部分的开启或关闭。

use serde::{Deserialize, Serialize};
use serde_enabled::Enable;

#[derive(Deserialize, Serialize, Debug, PartialEq, Eq)]
struct Outside {
    inside: Enable<Inside>,
}

#[derive(Deserialize, Serialize, Debug, PartialEq, Eq)]
struct Inside {
    thing: u32,
    other: String,
}

let raw = indoc::indoc! {r#"
    inside:
        enable: false
        thing: 1
        other: "Great"
    "#};

let o: Outside = serde_yaml::from_str(raw).unwrap();

 assert!(!o.inside.is_enabled());

 let raw = indoc::indoc! {r#"
     inside:
         enable: true
         thing: 1
         other: "Great"
     "#};

 let o: Outside = serde_yaml::from_str(raw).unwrap();

  assert!(o.inside.is_enabled());
  assert_eq!(
        o,
        Outside {
           inside: Enable::On(Inside {
            thing: 1,
            other: "Great".into()
        })
        }
    );

依赖关系

~0.4–1MB
~22K SLoC