xref: /OpenGrok/opengrok-indexer/src/test/resources/sources/rust/main.rs (revision 2bcacabbe843448903326d34ff21a265b5f37596)
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