1 个不稳定版本
0.1.0 | 2024年6月24日 |
---|
#372 in 值格式化
14KB
120 行
serenum
示例用法
源代码
#[derive(SerEnum)]
pub enum Order {
#[serenum(text = "full")]
Full,
#[serenum(text = "short")]
Short,
}
assert_eq!(Order::Full.text(), "full");
assert_eq!(Order::Short.text(), "short");
展开
impl ::serde::Serialize for Order {
fn serialize<S>(&self, serializer: S) -> ::core::result::Result<S::Ok, S::Error>
where
S: ::serde::Serializer,
{
serializer.serialize_str(self.text())
}
}
impl<'de> ::serde::Deserialize<'de> for Order {
fn deserialize<D>(deserializer: D) -> ::core::result::Result<Self, D::Error>
where
D: ::serde::Deserializer<'de>,
{
#[allow(non_camel_case_types)]
#[derive(::serde::Deserialize)]
enum __impl_Order {
#[serde(rename = "full")]
Full,
#[serde(rename = "short")]
Short,
}
let result = <__impl_Order as ::serde::Deserialize<'de>>::deserialize(deserializer)?;
Ok(match result {
__impl_Order::Full => Order::Full,
__impl_Order::Short => Order::Short,
})
}
}
impl Order {
pub const FULL: &'static str = "full";
pub const SHORT: &'static str = "short";
pub fn from_text(text: &impl ::core::convert::AsRef<str>) -> ::core::option::Option<Self> {
match <_ as ::core::convert::AsRef<str>>::as_ref(text) {
Self::FULL => ::core::option::Option::Some(Self::Full),
Self::SHORT => ::core::option::Option::Some(Self::Short),
_ => ::core::option::Option::None,
}
}
pub const fn text(&self) -> &str {
match self {
Self::Full => Self::FULL,
Self::Short => Self::SHORT,
}
}
}
特性
名称 | 默认或不 | 描述 |
---|---|---|
serde |
默认 | 生成 serde::Serialize 和 serde::Deserialize 实现。 |
宏配置
枚举级别
名称 | 语法 | 是否必需 | 描述 |
---|---|---|---|
来自 |
来自= "some_function_name" |
默认: from_text |
生成的字符串解析器的名称。 |
到 |
到= "some_function_name" |
默认: text |
生成的文本获取器的名称。 |
变体级别
名称 | 语法 | 是否必需 | 描述 |
---|---|---|---|
文本 |
文本= "variant_repr" |
必需 | 变体的字符串表示。 |
const_name |
const_name= "CONST_NAME" |
默认:变体名称的大写蛇形命名法。 | 变体的关联常量项的名称。 |
依赖项
~1.6–2.2MB
~42K SLoC