]> piware.de Git - learn-rust.git/blob - src/lib.rs
Move helper functions into src/lib.rs
[learn-rust.git] / src / lib.rs
1 use std::fs::File;
2 use std::io::prelude::*;
3
4 pub fn read_file(path: &str) -> Result<String, std::io::Error> {
5     let mut s = String::new();
6     File::open(path)?
7         .read_to_string(&mut s)?;
8     Ok(s)
9 }
10
11 // needs Copy trait, good for simple types
12 pub fn largest<T: PartialOrd + Copy>(list: &[T]) -> T {
13     let mut result = list[0];
14     for &i in list {
15         if i > result {
16             result = i;
17         }
18     }
19     result
20 }
21
22 // expensive for large strings, don't use that
23 pub fn largest_clone<T: PartialOrd + Clone>(list: &[T]) -> T {
24     let mut result = list[0].clone();
25     for i in list {
26         if *i > result {
27             result = i.clone();
28         }
29     }
30     result
31 }
32
33 // good for everything, but more expensive for simple types
34 pub fn largest_ref<T: PartialOrd>(list: &[T]) -> &T {
35     let mut result = &list[0];
36     for i in list {
37         if i > result {
38             result = i;
39         }
40     }
41     result
42 }
43
44 pub fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
45     if x.len() > y.len() {
46         x
47     } else {
48         y
49     }
50 }