summaryrefslogtreecommitdiff
path: root/rust/theBook/chapter-9-error-handling/result
diff options
context:
space:
mode:
Diffstat (limited to 'rust/theBook/chapter-9-error-handling/result')
-rw-r--r--rust/theBook/chapter-9-error-handling/result/Cargo.toml8
-rw-r--r--rust/theBook/chapter-9-error-handling/result/src/main.rs62
2 files changed, 70 insertions, 0 deletions
diff --git a/rust/theBook/chapter-9-error-handling/result/Cargo.toml b/rust/theBook/chapter-9-error-handling/result/Cargo.toml
new file mode 100644
index 0000000..e32be4b
--- /dev/null
+++ b/rust/theBook/chapter-9-error-handling/result/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "result"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/rust/theBook/chapter-9-error-handling/result/src/main.rs b/rust/theBook/chapter-9-error-handling/result/src/main.rs
new file mode 100644
index 0000000..265250c
--- /dev/null
+++ b/rust/theBook/chapter-9-error-handling/result/src/main.rs
@@ -0,0 +1,62 @@
+use std::fs::{Self,File};
+use std::io::{Self, Read, ErrorKind};
+
+fn main() {
+ let greeting_file_result = File::open("hello.txt");
+
+ let greeting_file = match greeting_file_result {
+ Ok(file) => file,
+ Err(error) => match error.kind() {
+ ErrorKind::NotFound => match File::create("hello.txt") {
+ Ok(fc) => fc,
+ Err(e) => panic!("problem opening file {:?}",e),
+ },
+ other_error => {
+ panic!("problem opening file {:?}",other_error);
+ }
+ },
+ };
+
+ // or use unwrap, it will return value or panic just like match
+ // let greeting_file = File::open("hello.txt").unwrap();
+}
+
+// functions to read username from file
+// each one is a shorter solution of its previous one.
+fn read_username_from_file() -> Result<String, io::Error> {
+ let username_file_result = File::open("hello.txt");
+
+ let username_file = match username_file_result {
+ Ok(file) => file,
+ Err(e) => return Err(e),
+ };
+
+ let mut username = String::new();
+
+ match username_file.read_to_string(&mut username) {
+ Ok(_) => Ok(username),
+ Err(e) => Err(e),
+ }
+}
+
+// ? is like match, but shorter
+// return content of Ok() if true, or return Err() from whole function
+fn read_username_from_file_short() -> Result<String, io::Error> {
+ let mut username_file = File::open("hello.txt")?;
+
+ let mut username = String::new();
+
+ username_file.read_to_string(&mut username)?;
+ Ok(username)
+}
+
+fn read_username_from_file_even_short() -> Result<String, io::Error> {
+ let mut username = String::new();
+
+ File::open("hello.txt")?.read_to_string(&mut username)?;
+ Ok(username)
+}
+
+fn read_username_from_file_shortest() -> Result<String, io::Error> {
+ fs::read_to_string("hello.txt")
+}