summaryrefslogtreecommitdiff
path: root/errors/src/main.rs
diff options
context:
space:
mode:
authorJordan Gong <jordan.gong@protonmail.com>2020-09-01 20:32:27 +0800
committerJordan Gong <jordan.gong@protonmail.com>2020-09-01 20:32:27 +0800
commiteeb7ceeff94b9bac0fb629ad393e7113a04f31c1 (patch)
tree9af5b285e9d6d973c078b8172ee9e8c8a528c35e /errors/src/main.rs
parent79833af30e82bc258fdf300d5c6701e39ffc95da (diff)
Handle errors
Diffstat (limited to 'errors/src/main.rs')
-rw-r--r--errors/src/main.rs83
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);
+}