1*2bcacabbSAdam Hornacek //! opengrok rust test by Nikolay Denev <ndenev@gmail.com>
2*2bcacabbSAdam Hornacek
3*2bcacabbSAdam Hornacek //
4*2bcacabbSAdam Hornacek // Random Rust source
5*2bcacabbSAdam Hornacek //
6*2bcacabbSAdam Hornacek
7*2bcacabbSAdam Hornacek /// Count enum
8*2bcacabbSAdam Hornacek enum Count {
9*2bcacabbSAdam Hornacek One,
10*2bcacabbSAdam Hornacek Two(u64),
11*2bcacabbSAdam Hornacek Three(String),
12*2bcacabbSAdam Hornacek Four { id: u64, name: String },
13*2bcacabbSAdam Hornacek }
14*2bcacabbSAdam Hornacek
15*2bcacabbSAdam Hornacek struct Counter<T> where T: ShowItem {
16*2bcacabbSAdam Hornacek item: T,
17*2bcacabbSAdam Hornacek }
18*2bcacabbSAdam Hornacek
19*2bcacabbSAdam Hornacek impl<T> Counter<T> where T: ShowItem {
new(item: T) -> Counter<T>20*2bcacabbSAdam Hornacek fn new(item: T) -> Counter<T> {
21*2bcacabbSAdam Hornacek Counter { item: item }
22*2bcacabbSAdam Hornacek }
23*2bcacabbSAdam Hornacek }
24*2bcacabbSAdam Hornacek
25*2bcacabbSAdam Hornacek /// Trait
26*2bcacabbSAdam Hornacek trait ShowItem {
show(&self) -> String27*2bcacabbSAdam Hornacek fn show(&self) -> String;
28*2bcacabbSAdam Hornacek }
29*2bcacabbSAdam Hornacek
30*2bcacabbSAdam Hornacek /// Trait implementation
31*2bcacabbSAdam Hornacek impl ShowItem for Count {
show(&self) -> String32*2bcacabbSAdam Hornacek fn show(&self) -> String {
33*2bcacabbSAdam Hornacek match *self {
34*2bcacabbSAdam Hornacek Count::One => "One!".to_string(),
35*2bcacabbSAdam Hornacek Count::Two(i) => format!("Two: {}!", i),
36*2bcacabbSAdam Hornacek Count::Three(ref s) => format!("Three: {}!", s),
37*2bcacabbSAdam Hornacek Count::Four { id: i, name: ref s } => format!("Four: {}, {}!", i, s),
38*2bcacabbSAdam Hornacek }
39*2bcacabbSAdam Hornacek }
40*2bcacabbSAdam Hornacek }
41*2bcacabbSAdam Hornacek
42*2bcacabbSAdam Hornacek // fn main()
main()43*2bcacabbSAdam Hornacek fn main() {
44*2bcacabbSAdam Hornacek let mut c: Vec<Counter<Count>> = Vec::with_capacity(4);
45*2bcacabbSAdam Hornacek let c1 = Counter::new(Count::One);
46*2bcacabbSAdam Hornacek c.push(c1);
47*2bcacabbSAdam Hornacek let c2 = Counter::new(Count::Two(2));
48*2bcacabbSAdam Hornacek c.push(c2);
49*2bcacabbSAdam Hornacek let c3 = Counter::new(Count::Three("three".to_string()));
50*2bcacabbSAdam Hornacek c.push(c3);
51*2bcacabbSAdam Hornacek let c4 = Counter::new(Count::Four { id: 4, name: "four".to_string() });
52*2bcacabbSAdam Hornacek c.push(c4);
53*2bcacabbSAdam Hornacek
54*2bcacabbSAdam Hornacek let r: Vec<String> = c.into_iter().map(|i| i.item.show()).collect();
55*2bcacabbSAdam Hornacek
56*2bcacabbSAdam Hornacek for s in r.into_iter() {
57*2bcacabbSAdam Hornacek println!("-> {}", s);
58*2bcacabbSAdam Hornacek }
59*2bcacabbSAdam Hornacek }
60