summaryrefslogtreecommitdiff
path: root/errors
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
parent79833af30e82bc258fdf300d5c6701e39ffc95da (diff)
Handle errors
Diffstat (limited to 'errors')
-rw-r--r--errors/.gitignore18
-rw-r--r--errors/Cargo.toml9
-rw-r--r--errors/src/main.rs83
3 files changed, 110 insertions, 0 deletions
diff --git a/errors/.gitignore b/errors/.gitignore
new file mode 100644
index 0000000..e629269
--- /dev/null
+++ b/errors/.gitignore
@@ -0,0 +1,18 @@
+
+# Created by https://www.toptal.com/developers/gitignore/api/rust
+# Edit at https://www.toptal.com/developers/gitignore?templates=rust
+
+### Rust ###
+# Generated by Cargo
+# will have compiled files and executables
+/target/
+
+# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
+# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
+Cargo.lock
+
+# These are backup files generated by rustfmt
+**/*.rs.bk
+
+# End of https://www.toptal.com/developers/gitignore/api/rust
+
diff --git a/errors/Cargo.toml b/errors/Cargo.toml
new file mode 100644
index 0000000..b7a199b
--- /dev/null
+++ b/errors/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "errors"
+version = "0.1.0"
+authors = ["Jordan Gong <jordan.gong@protonmail.com>"]
+edition = "2018"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
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);
+}