3个不稳定版本
0.1.0 | 2020年10月23日 |
---|---|
0.0.1 | 2020年10月23日 |
0.0.0 | 2020年10月23日 |
#1769 in 过程宏
9KB
137 代码行
union_type
为Rust添加联合类型支持!
为什么我们需要这个?
请参阅此处。
结果看起来像什么?
#[macro_use]
extern crate union_type;
use std::convert::TryInto;
use std::fmt::Display;
#[derive(Debug, Clone)]
struct A(String);
impl A {
fn f(&self, a: i32) -> i32 {
println!("from A {}", a + 1);
a + 1
}
fn g<T: Display>(&self, t: T) -> String {
self.0.clone() + &format!("{}", t)
}
}
#[derive(Debug, Clone)]
struct B(i32);
impl B {
fn f(&self, a: i32) -> i32 {
println!("from B {}", a + self.0);
a + self.0
}
fn g<T: Display>(&self, t: T) -> String {
format!("{}:{}", self.0, t)
}
}
union_type! {
#[derive(Debug, Clone)]
enum C {
A,
B
}
impl C {
fn f(&self, a: i32) -> i32;
fn g<T: Display>(&self, t: T) -> String;
}
}
fn main() {
let a = A("abc".to_string());
let mut c: C = a.into();
c.f(1);
let b = B(99);
c = b.into();
c.f(2);
println!("{:?}", c);
println!("{}", c.g(99));
let b: B = c.try_into().unwrap();
println!("{:?}", b);
}
输出为
from A 2
from B 101
B(B(99))
99:99
B(99)
依赖项
~1.5MB
~35K SLoC