#version #semver #checker #derive #macro #serde-semver #semver-req

serde-semver-derive

为Serde兼容的版本检查器生成宏

2个版本

0.1.1 2021年12月8日
0.1.0 2021年12月8日

#91 in #checker

50 每月下载量
2 个crate中使用 (通过 serde-semver)

MIT 许可证

6KB
93

serde-semver: Serde兼容的版本检查器

API文档

此crate提供了一个生成宏 SemverReq,用于构建一个 版本化 标记类型。例如,它将类型与版本 "3.1.4" 关联。

#[derive(SemverReq)]
#[version("3.1.4")]
struct MyVersion;

标记类型在反序列化过程中充当版本检查器。在这个例子中,标记检查反序列化的JSON文本是否与版本 "3.1.4" 兼容。例如,"3.1.3" 和 "3.1.0" 是有效版本,但 "3.2.0" 和 "2.7.0" 不是。

use semver::Version;
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
use serde_semver::SemverReq;

#[derive(SemverReq)]
#[version("3.1.4")]
struct MyVersion;

// An example configuration with version tag
#[derive(Serialize, Deserialize)]
struct Config {
    pub version: MyVersion,
    pub input_file: PathBuf,
    pub output_file: PathBuf,
}

// The version is audited during deserialization.
let config: Config = serde_json::from_str(
    r#"{
  "version": "3.1.4",
  "input_file": "input.txt",
  "output_file": "output.txt"
}"#,
)
.unwrap();

// The version is recovered after serialization.
assert_eq!(
    serde_json::to_string_pretty(&config).unwrap(),
    r#"{
  "version": "3.1.4",
  "input_file": "input.txt",
  "output_file": "output.txt"
}"#,
);

许可证

MIT许可证。请参阅 LICENSE.txt 文件。

依赖项

~1.5MB
~41K SLoC