diff options
author | Jordan Gong <jordan.gong@protonmail.com> | 2020-09-01 20:32:27 +0800 |
---|---|---|
committer | Jordan Gong <jordan.gong@protonmail.com> | 2020-09-01 20:32:27 +0800 |
commit | eeb7ceeff94b9bac0fb629ad393e7113a04f31c1 (patch) | |
tree | 9af5b285e9d6d973c078b8172ee9e8c8a528c35e /errors/src | |
parent | 79833af30e82bc258fdf300d5c6701e39ffc95da (diff) |
Handle errors
Diffstat (limited to 'errors/src')
-rw-r--r-- | errors/src/main.rs | 83 |
1 files changed, 83 insertions, 0 deletions
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<String, io::Error> { + // 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<String, io::Error> { + // 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<String, io::Error> { + // 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<String, io::Error> { + fs::read_to_string("hello.txt") + } + + let r = read_username_from_file(); + println!("{:?}", r); +} |