#[derive(Debug)]
enum Test1<T> {
I(i32),
T1(T),
}
#[derive(Debug)]
struct Test2<T1, T2> {
t1: T1,
t2: T2,
}
impl<T1, T2> Test2<T1, T2> {
fn from(t1: T1, t2: T2) -> Test2<T1, T2> {
Test2 { t1, t2 }
}
fn f1<T3>(self, t3: T3) -> Test2<T1, T3> {
Test2 {
t1: self.t1,
t2: t3,
}
}
fn t1(&self) -> &T1 {
&self.t1
}
fn t2(&self) -> &T2 {
&self.t2
}
}
fn f1<T>(t: T) -> T {
t
}
fn main() {
println!("1.1 : {:?}", Test1::<i64>::I(1));
println!("1.2 : {:?}", Test1::T1(1));
println!("1.3 : {:?}", Test1::T1(String::from("a")));
println!("2.1 : {:?}", Test2 { t1: 1, t2: 1.1 });
println!("2.2 : {:?}", Test2::from(1, String::from("a")));
println!("2.3 : {:?}", Test2::from(1, 2).t1());
println!("2.3 : {:?}", Test2::from(1, 2).t2());
println!("2.4 : {:?}", Test2::from(1, 2).f1(1.1));
println!("3.1 : {}", f1(1));
println!("3.2 : {}", f1(1.1));
}