5个版本 (3个重大更新)
使用旧的Rust 2015
0.4.0 | 2017年6月6日 |
---|---|
0.3.1 | 2016年11月28日 |
0.3.0 | 2016年2月29日 |
0.2.0 | 2016年2月22日 |
0.1.0 | 2016年2月18日 |
#1766 在 编码
在 2 个crate中使用了(通过 stockfighter)
11KB
90 行
可序列化枚举
概述
提供两个宏,以简化对没有数据变体的枚举的序列化和反序列化。当使用serde序列化没有数据的枚举时,默认的序列化形式为:{"Variant": []}
。虽然这对于大多数用例来说都适用,但你可能希望枚举以 "variant"
的形式进行序列化。此crate中的两个宏有助于简化这种序列化和反序列化。
这些宏仅设计用于与 serde 一起使用。
用法
将以下内容添加到您的 Cargo.toml
[dependencies]
serializable_enum = "0.1.0"
并将以下内容添加到您的crate中
#[macro_use] extern crate serializable_enum;
示例
考虑这个结构体
#[derive(Serialize, Deserialize)]
struct Post {
title: String,
content: String,
content_format: ContentFormat,
}
pub enum ContentFormat {
Html,
Markdown,
}
假设一个 Post
的实例
let p = Post {
title: String::from("I <3 serde"),
content: String::from("awesome content"),
content_format: ContentFormat::Markdown,
};
在序列化 Post
时,您希望得到以下输出(json
)
{
"title": "I <3 serde",
"content": "awesome content",
"content_format": "markdown",
}
使用此crate中的宏,我们可以通过以下方式实现(假设实现如上所示的 Post
)
extern crate serde;
extern crate serde_json;
#[macro_use] extern crate serializable_enum;
#[derive(Debug)]
pub enum Error {
Parse(String)
}
// You will need display implemented for Error (you should already have this).
impl ::std::fmt::Display for Error {
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
write!(f, "{:?}", self)
}
}
serializable_enum! {
/// Supported content formats
#[derive(Debug, PartialEq)]
pub enum ContentFormat {
/// Markdown
Markdown,
/// HTML
Html,
}
ContentFormatVisitor
}
impl_as_ref_from_str! {
ContentFormat {
Markdown => "markdown",
Html => "html",
}
Error::Parse
}
fn main() {
let md = ContentFormat::Markdown;
assert_eq!(serde_json::to_string(&md).unwrap(), "\"markdown\"");
let des_md: ContentFormat = serde_json::from_str("\"markdown\"").unwrap();
assert_eq!(md, des_md);
}
serializable_enum
使用提供的访问者类型设置serde的序列化和反序列化,在本例中为 ContentFormatVisitor
。
impl_as_ref_from_str
为枚举提供实现 AsRef
和 FromStr
特性,使用提供的映射,这些映射用于序列化和反序列化。 Error::Parse
是在您的crate中定义的一个具有 String
数据的 Error
枚举的一个变体。这个变体被用作 FromStr 的 Err
类型。
注意: serializable_enum
宏调用 需要
- 每个变体的文档注释。
更多信息,请访问文档。
许可证
本库的发行条件与Rust类似:双重许可,MIT许可证和Apache许可证(版本2.0)。
有关详情,请参阅LICENSE-APACHE、LICENSE-MIT和COPYRIGHT。
依赖
~110–385KB