#enum #trait #derive #deriving #macro

enum_traits_macros

通过从 crate enum_traits 继承特质,为枚举添加功能的过程宏

9 个版本 (5 个稳定版)

使用旧的 Rust 2015

2.0.0 2017年1月17日
1.2.1 2016年11月11日
0.1.3 2015年12月29日
0.1.2 2015年11月27日
0.1.0 2015年8月22日

过程宏 中排名第2208

Download history 16/week @ 2023-10-28 4/week @ 2023-11-04 11/week @ 2023-11-11 3/week @ 2023-11-18 13/week @ 2023-11-25 37/week @ 2023-12-02 2/week @ 2023-12-09 11/week @ 2023-12-16 21/week @ 2023-12-23 1/week @ 2023-12-30 1/week @ 2024-01-06 3/week @ 2024-01-13 14/week @ 2024-01-20 28/week @ 2024-01-27 10/week @ 2024-02-03

每月下载量55
被用于 pf_sandbox

MIT 许可证

18KB
518

enum_traits

一个包含特质和相应过程宏的库,用于为枚举添加功能。

为 Rust 编程语言中的枚举项提供特质和 "deriving"。

继承

  • 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
	});
}

查看测试用例以获取更多示例。查看库的文档特质的文档、测试用例或源代码以获取更多信息。

依赖项

~0.4–0.8MB
~19K SLoC