#枚举 # #联合类型

typeunion

用于在Rust中声明类型联合的属性宏

1 个不稳定版本

0.1.0 2023年12月2日

#114 in #枚举


4 个crate中使用了(通过galvan-ast

MIT/Apache

7KB
89

typeunion

与其像这样使用枚举声明简单的类型联合

pub enum MyTypes {
  String(String),
  Int(i32),
}

此宏允许您简单地写这个

// Use an alias to give the enum case a custom name.
// By default, the associated type name is used.
type Int = i32;

#[type_union]
pub type MyTypes = String + Int;

它还可以为子集生成 From 实现功能

use typeunion::type_union;

#[type_union]
type SuperSet = String + TypeB + TypeC;

#[type_union(super = SuperSet)]
type SubSet = String + TypeB;

fn main() {
  // `From` is automatically implemented for all types contained in SubSet
  let sub_set: SubSet = "hello".to_string().into();
  let super_set: SuperSet = sub.into();
}

由于生成的枚举实例名称自动派生于给定的类型名称,类型联合的成员只能使用标识符。为了解决这个问题,您可以创建一个类型别名

type ArcStr = Arc<str>;
type IntVec = Vec<i64>;

#[type_union]
type Types = ArcStr + IntVec;

依赖

~260–710KB
~17K SLoC