summaryrefslogtreecommitdiff
path: root/rust/theBook/chapter-9-error-handling/result/src
diff options
context:
space:
mode:
authorgarhve <git@garhve.com>2023-01-01 23:23:55 +0800
committergarhve <git@garhve.com>2023-01-01 23:23:55 +0800
commit0e89468188b9d347495dad5b98af137e5f477432 (patch)
tree0109b539d1defe6469099476df262838ddf02320 /rust/theBook/chapter-9-error-handling/result/src
parentbbc35c878f0f0fcf7234f23efb6820aebf4287c3 (diff)
finish chapter 9
Diffstat (limited to 'rust/theBook/chapter-9-error-handling/result/src')
-rw-r--r--rust/theBook/chapter-9-error-handling/result/src/main.rs62
1 files changed, 62 insertions, 0 deletions
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")
+}