From eeb7ceeff94b9bac0fb629ad393e7113a04f31c1 Mon Sep 17 00:00:00 2001 From: Jordan Gong Date: Tue, 1 Sep 2020 20:32:27 +0800 Subject: Handle errors --- errors/src/main.rs | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 errors/src/main.rs (limited to 'errors/src/main.rs') diff --git a/errors/src/main.rs b/errors/src/main.rs new file mode 100644 index 0000000..e98e987 --- /dev/null +++ b/errors/src/main.rs @@ -0,0 +1,83 @@ +use std::fs::File; +use std::io::ErrorKind; + +fn main() { + // panic!("crash and burn"); + + // let f = File::open("hello.txt"); + + // let f = match f { + // Ok(file) => file, + // Err(error) => match error.kind() { + // ErrorKind::NotFound => match File::create("hello.txt") { + // Ok(fc) => fc, + // Err(e) => panic!("Problem creating the file: {:?}", e), + // }, + // other_error => { + // panic!("Problem opening file: {:?}", other_error) + // } + // }, + // }; + + // Rustacean style + // let f = File::open("hello.txt").unwrap_or_else(|error| { + // if error.kind() == ErrorKind::NotFound { + // File::create("hello.txt").unwrap_or_else(|error| { + // panic!("Problem creating the file: {:?}", error); + // }) + // } else { + // panic!("Problem opening file: {:?}", error); + // } + // }); + + // Shortcut + // let f = File::open("hello.txt").unwrap(); + + // let f = File::open("hello.txt").expect("Failed to open hello.txt"); + + // Propagating + use std::io; + use std::io::Read; + + // fn read_username_from_file() -> Result { + // let f = File::open("hello.txt"); + + // let mut f = match f { + // Ok(file) => file, + // Err(e) => return Err(e), + // }; + + // let mut s = String::new(); + + // match f.read_to_string(&mut s) { + // Ok(_) => Ok(s), + // Err(e) => Err(e), + // } + // } + + // Propagating shortcut + // fn read_username_from_file() -> Result { + // let mut f = File::open("hello.txt")?; + // let mut s = String::new(); + // f.read_to_string(&mut s)?; + // Ok(s) + // } + + // Chaining + // fn read_username_from_file() -> Result { + // let mut s = String::new(); + + // File::open("hello.txt")?.read_to_string(&mut s)?; + + // Ok(s) + // } + + // Using `fs::read_to_string` + use std::fs; + fn read_username_from_file() -> Result { + fs::read_to_string("hello.txt") + } + + let r = read_username_from_file(); + println!("{:?}", r); +} -- cgit v1.2.3