X-Git-Url: https://piware.de/gitweb/?a=blobdiff_plain;f=src%2Fmain.rs;h=0c9efe90216132d2a0ff01f57352f24279c3aa07;hb=HEAD;hp=718ecb5f22028762b437c4b87a60dac13f99c90c;hpb=f026aa1e762803c4e784f82fd3830c9f936cf8d5;p=learn-rust.git diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index 718ecb5..0000000 --- a/src/main.rs +++ /dev/null @@ -1,146 +0,0 @@ -mod word_utils; -mod lib; - -use std::collections::HashMap; -use std::io::{prelude::*, ErrorKind}; -use std::fs::{self, File}; - -use lib::*; -use word_utils::{first_word, second_word}; - -fn test_strings() { - let s = String::from("Hello world"); - println!("first word: '{}'", first_word(&s)); - println!("second word: '{}'", second_word(&s).unwrap()); - - let s2 = "hello dude blah"; - println!("second word of single: '{}'", second_word(s2).unwrap_or("(none)")); - - match second_word(s2) { - Some(w) => println!("match: second word of '{}' exists: {}", s2, w), - None => println!("match: second word of '{}' does not exist", s2), - } -} - -fn test_vectors() { - let v1 = vec![1, 2, 3]; - println!("statically initialized vector: {:?}", v1); - - let mut v2: Vec = Vec::new(); - v2.push("Hello".to_string()); - v2.push(String::from("world")); - println!("dynamically built vector: {:?}", v2); - println!("first element: {}", v2[0]); - for el in &mut v2 { - *el += "xx"; - } - for el in &v2 { - println!("{}", el); - } -} - -fn test_hashmaps() { - let mut scores = HashMap::new(); - scores.insert("john", 10); - scores.insert("mary", 20); - - println!("scores: {:?}", scores); - - // hash map with .collect() - let persons = vec![("homer", 42), ("marge", 30)]; - let collect_scores: HashMap<_, _> = persons.into_iter().collect(); - println!("collect_scores: {:?}", collect_scores); - - for (p, s) in &collect_scores { - println!("person {}: score {}", p, s); - } - - println!("john's score: {}", scores.get("john").unwrap()); - println!("jake's score: {}", scores.get("jake").unwrap_or(&-1)); - - // double scores - for (_, v) in scores.iter_mut() { - *v *= 2; - } - println!("scores after doubling: {:?}", scores); - - // double scores of immutable hashmap (rebuild it) - let collect_scores: HashMap<_, _> = collect_scores.iter() - .map(|(k, v)| (k, 2 * v)) - .collect(); - println!("collect_scores after rebuilding with doubling: {:?}", collect_scores); -} - -fn test_files() { - if let Ok(mut f) = File::open("Cargo.toml") { - let mut contents = String::new(); - match f.read_to_string(&mut contents) { - Ok(len) => println!("successfully opened Cargo.toml: {:?}, contents {} bytes:\n{}\n----------", f, len, contents), - Err(e) => panic!("could not read file: {:?}", e) - } - } else { - println!("could not open Cargo.toml"); - } - - // alternative form, more specific error checking - let mut f = File::open("Cargo.toml").unwrap_or_else(|e| { - if e.kind() == ErrorKind::NotFound { - println!("Cargo.toml not found, falling back to /dev/null"); - // need to return a File - File::open("/dev/null").unwrap() - } else { - panic!("Could not open Cargo.toml: {:?}", e); - } - }); - let mut contents = String::new(); - let len = f.read_to_string(&mut contents).unwrap_or_else(|e| { - panic!("Could not read file: {:?}", e); - }); - println!("successfully opened Cargo.toml with unwrap_or_else: {:?}, contents {} bytes:\n{}\n----------", f, len, contents); - - // using the '?' operator - match read_file("Cargo.toml") { - Ok(s) => println!("Cargo.toml contents:\n{}\n-------------", s), - Err(e) => println!("Could not open Cargo.toml: {:?}", e) - } - - // using std API - match fs::read_to_string("Cargo.toml") { - Ok(s) => println!("Cargo.toml contents:\n{}\n-------------", s), - Err(e) => println!("Could not open Cargo.toml: {:?}", e) - } -} - -fn test_generics() { - let num_list = vec![3, 42, -7, 100, 0]; - println!("largest number: {}", largest(&num_list)); - println!("num_list: {:?}", num_list); - - let char_list = vec!['a', 'y', 'q', 'm']; - println!("largest char: {}", largest(&char_list)); - - let str_list = vec!["hello", "world", "blue", "planet"]; - println!("largest str: {}", largest(&str_list)); - println!("str_list: {:?}", str_list); - - let string_list = vec!["aaaa".to_string(), "xxxxx".to_string(), "ffff".to_string()]; - println!("largest string (with cloning): {}", largest_clone(&string_list)); - println!("largest string (with ref): {}", largest_ref(&string_list)); - println!("string_list: {:?}", string_list); - - let s1 = String::from("abcd"); - let l; - { - let s2 = "efghi"; - l = longest(&s1, s2); - } - println!("longest string: {}", l); -} - -fn main() { - test_strings(); - test_vectors(); - test_hashmaps(); - test_files(); - test_generics(); -}