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)

MIT/Apache

15KB
266 代码行

IRI 枚举。

CI Crate informations License Documentation

这是 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:suffixiri 属性都将展开为前缀 IRI 和 suffix 的连接。

#[derive(IriEnum)]
#[iri_prefix("schema" = "https://schema.org/")]
pub enum Vocab {
  #[iri("schema:name")] Name,
  #[iri("schema:knows")] Knows
}

许可

许可协议为以下之一

任选其一。

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中的任何贡献,将按照上述方式双许可,无需附加条款或条件。

依赖

~4MB
~85K SLoC