6 个稳定版本
3.0.0 | 2023 年 8 月 23 日 |
---|---|
2.1.0 | 2022 年 5 月 10 日 |
2.0.0 | 2022 年 3 月 18 日 |
1.2.0 | 2020 年 10 月 14 日 |
1.0.0 | 2020 年 4 月 25 日 |
#336 in 国际化 (i18n)
15KB
266 代码行
IRI 枚举。
这是 iref
的配套 crate,提供了一个派生宏来声明可以将 IRIs 转换为/从 IRIs 转换的枚举类型。
IRI 的存储和比较可能代价高昂。人们可能更喜欢使用代表已知 IRIs 的枚举类型,并提供两种类型之间的便宜转换函数。此 crate 通过使用 IriEnum
派生宏以简单的方式声明此类枚举。此宏将为您实现 TryFrom<Iri>
和 Into<Iri>
。
基本用法
使用 #[derive(IriEnum)]
属性来生成枚举类型的 TryFrom<Iri>
和 Into<Iri>
的实现。每个变体的 IRI 定义使用 iri
属性
use iref_enum::IriEnum;
#[derive(IriEnum, PartialEq, Debug)]
pub enum Vocab {
#[iri("https://schema.org/name")] Name,
#[iri("https://schema.org/knows")] Knows
}
pub fn main() {
let term: Vocab = static_iref::iri!("https://schema.org/name").try_into().unwrap();
assert_eq!(term, Vocab::Name)
}
每个变体最多只能有一个参数。如果它有一个参数,则其类型必须实现 TryFrom<Iri>
和 Into<Iri>
。
紧凑 IRI
派生宏还支持使用特殊的 iri_prefix
属性来使用紧凑 IRI。首先声明与给定 IRI
关联的前缀。然后,任何形式为 prefix:suffix
的 iri
属性都将展开为前缀 IRI 和 suffix
的连接。
#[derive(IriEnum)]
#[iri_prefix("schema" = "https://schema.org/")]
pub enum Vocab {
#[iri("schema:name")] Name,
#[iri("schema:knows")] Knows
}
许可
许可协议为以下之一
- Apache License,版本 2.0(《LICENSE-APACHE》或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 协议(《LICENSE-MIT》或http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中的任何贡献,将按照上述方式双许可,无需附加条款或条件。
依赖
~4MB
~85K SLoC