summaryrefslogtreecommitdiff
path: root/errors/src
diff options
context:
space:
mode:
Diffstat (limited to 'errors/src')
-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);
+}