#enums #traits #deriving #derive #macro

nightly enum_traits

为内置枚举项提供特性,主要用于 enum_traits_macros 在自动推导类型时

5 个不稳定版本

使用旧的 Rust 2015

0.3.0 2016 年 11 月 11 日
0.2.0 2016 年 11 月 9 日
0.1.2 2015 年 11 月 27 日
0.1.1 2015 年 11 月 27 日
0.1.0 2015 年 8 月 21 日

#1137 in Rust 模式


用于 pf_sandbox

MIT 许可证

4KB

enum_traits

一个带有特性和辅助过程宏的库,用于扩展枚举的功能。

为 Rust 编程语言中的枚举项提供特性和 "推导" 功能

推导

  • EnumIndex (实现 Index)
  • EnumFromIndex (实现 FromIndex)
  • EnumToIndex (实现 ToIndex)
  • EnumLen (实现 Len)
  • EnumEnds (实现 Ends)
  • EnumDiscriminant (实现 Discriminant)
  • EnumIter (实现 Iterable)
  • EnumIterator (实现 Iterator)
  • EnumVariantName (实现 VariantName)
  • EnumBitPattern (实现 BitPattern)
  • EnumUnitVariant (实现 UnitVariant)
  • EnumIsVariantFns
  • EnumFromVariantName (实现 FromStr)

特性

  • Index
  • FromIndex
  • ToIndex
  • Len
  • Ends
  • Discriminant
  • Iterable
  • VariantName
  • BitPattern
  • UnitVariant

用法

Cargo.toml

[dependencies]
enum_traits        = "*"
enum_traits_macros = "*"

无 std

[dependencies]
enum_traits        = {version="*",features=["no_std"]}
enum_traits_macros = {version="*",features=["no_std"]}

示例

//#![feature(associated_consts)]

#[macro_use]extern crate enum_traits_macros;
extern crate enum_traits;

use enum_traits::*;

fn f1(){
	#[derive(Debug,EnumIndex,EnumToIndex,EnumLen)]
	enum Enum<'t,T: 't>{
		VariantA(&'t T),
		VariantB(T),
		VariantC(T,T,T),
		VariantD{d: i32},
		VariantE{a: i8,b: i16,c: i32},
		VariantF,
	}

	assert_eq!(Enum::VariantB("OK").into_index(),1);
	assert_eq!(Enum::<'static,&'static str>::LEN,6);
}

fn f2(){
	#[derive(Debug,EnumIndex,EnumFromIndex,EnumToIndex,EnumLen,EnumIter,EnumIterator,EnumDiscriminant,EnumEnds)]
	enum Enum{
		VariantA = 10,
		VariantB = 20,
		VariantC = 30,
	}

	//From EnumToIndex
	assert_eq!(Enum::VariantB.into_index(),1);

	//From EnumLen
	//assert_eq!(Enum::LEN,3);
	assert_eq!(Enum::len(),3);

	//From EnumFromIndex
	assert!(match Enum::from_index(1){
		Some(Enum::VariantB) => true,
		_ => false
	});

	//From EnumDiscriminant
	assert!(match Enum::from_discriminant(20){
		Some(Enum::VariantB) => true,
		_ => false
	});

	//From EnumEnds
	assert!(match Enum::first(){
		Enum::VariantA => true,
		_ => false
	});

	//From EnumEnds
	assert!(match <Enum as Ends>::last(){
		Enum::VariantC => true,
		_ => false
	});

	//From EnumIter
	assert!(match Enum::variants().next(){
		Some(Enum::VariantA) => true,
		_ => false
	});

	//From EnumIterator
	assert!(match Enum::VariantA.next(){
		Some(Enum::VariantB) => true,
		_ => false
	});
}

查看测试以获取更多示例。有关库的文档,请参阅 库文档,有关推导的文档,请参阅 推导文档,有关测试或源代码,请参阅更多信息。


lib.rs:

用于内置枚举项的简单特性。主要用于 enum_traits_macros 在自动推导类型时。需要 enum_traits_macros 包才能使用推导。

无运行时依赖