From 7462dfdc087c31ad426cea43049551b869757056 Mon Sep 17 00:00:00 2001 From: Julio Biason Date: Wed, 8 Feb 2023 15:30:03 -0300 Subject: [PATCH] Testing if we can overwrite the try --- trynoterrortest/Cargo.lock | 7 +++++++ trynoterrortest/Cargo.toml | 8 ++++++++ trynoterrortest/README.md | 4 ++++ trynoterrortest/src/main.rs | 37 +++++++++++++++++++++++++++++++++++++ 4 files changed, 56 insertions(+) create mode 100644 trynoterrortest/Cargo.lock create mode 100644 trynoterrortest/Cargo.toml create mode 100644 trynoterrortest/README.md create mode 100644 trynoterrortest/src/main.rs diff --git a/trynoterrortest/Cargo.lock b/trynoterrortest/Cargo.lock new file mode 100644 index 0000000..13687f2 --- /dev/null +++ b/trynoterrortest/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "trynoterrortest" +version = "0.1.0" diff --git a/trynoterrortest/Cargo.toml b/trynoterrortest/Cargo.toml new file mode 100644 index 0000000..f5693d6 --- /dev/null +++ b/trynoterrortest/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "trynoterrortest" +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/trynoterrortest/README.md b/trynoterrortest/README.md new file mode 100644 index 0000000..a2ac57c --- /dev/null +++ b/trynoterrortest/README.md @@ -0,0 +1,4 @@ +# TryNotErrorTest + +Checking if the try operator (`?`) accepts capturing an error, but returning +something else, which does have a conversion from the error to it. diff --git a/trynoterrortest/src/main.rs b/trynoterrortest/src/main.rs new file mode 100644 index 0000000..8e9801f --- /dev/null +++ b/trynoterrortest/src/main.rs @@ -0,0 +1,37 @@ +#[derive(Debug)] +enum MyType { + SomethingWrong, + SomethingGood, +} + +enum SomeError { + Bad, +} + +impl From for MyType { + fn from(value: SomeError) -> Self { + MyType::SomethingWrong + } +} + +fn validate(s: &str) -> Result<(), SomeError> { + if s == "bad" { + Err(SomeError::Bad) + } else { + Ok(()) + } +} + +fn check(response: &str) -> MyType { + let inner = validate(&response)?; + println!("Inner: {:?}", inner); + inner +} + +fn main() { + let results = ["good", "bad", "good"]; + for variant in results { + let response = check(&variant); + println!("{} = {:?}", variant, response); + } +}