From 505e04613f81e5c87a332bbd575c8e15c53535f3 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Tue, 26 Sep 2023 06:07:51 -0400 Subject: [PATCH] Up through conversion in RBE --- rustbyexample/conversion.d/from_into.rs | 18 ++++++++++++ rustbyexample/conversion.d/from_into2.rs | 19 +++++++++++++ rustbyexample/conversion.d/string.rs | 16 +++++++++++ rustbyexample/conversion.d/string2.rs | 7 +++++ .../conversion.d/try_from_try_into.rs | 28 +++++++++++++++++++ 5 files changed, 88 insertions(+) create mode 100644 rustbyexample/conversion.d/from_into.rs create mode 100644 rustbyexample/conversion.d/from_into2.rs create mode 100644 rustbyexample/conversion.d/string.rs create mode 100644 rustbyexample/conversion.d/string2.rs create mode 100644 rustbyexample/conversion.d/try_from_try_into.rs diff --git a/rustbyexample/conversion.d/from_into.rs b/rustbyexample/conversion.d/from_into.rs new file mode 100644 index 0000000..f81dd91 --- /dev/null +++ b/rustbyexample/conversion.d/from_into.rs @@ -0,0 +1,18 @@ +use std::convert::From; + +#[allow(dead_code)] +#[derive(Debug)] +struct Number { + value: i32, +} + +impl From for Number { + fn from(item: i32) -> Self { + Number { value: item } + } +} + +fn main() { + let num = Number::from(30); + println!("My number is {:?}", num); +} diff --git a/rustbyexample/conversion.d/from_into2.rs b/rustbyexample/conversion.d/from_into2.rs new file mode 100644 index 0000000..bac7b1a --- /dev/null +++ b/rustbyexample/conversion.d/from_into2.rs @@ -0,0 +1,19 @@ +use std::convert::Into; + +#[allow(dead_code)] +#[derive(Debug)] +struct Number { + value: i32, +} + +impl Into for i32 { + fn into(self) -> Number { + Number { value: self } + } +} + +fn main() { + let int = 5; + let num: Number = int.into(); + println!("My number is {:?}", num); +} diff --git a/rustbyexample/conversion.d/string.rs b/rustbyexample/conversion.d/string.rs new file mode 100644 index 0000000..3fc1c75 --- /dev/null +++ b/rustbyexample/conversion.d/string.rs @@ -0,0 +1,16 @@ +use std::fmt; + +struct Circle { + radius: i32, +} + +impl fmt::Display for Circle { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "Circle of radius {}", self.radius) + } +} + +fn main() { + let circle = Circle { radius: 6 }; + println!("{}", circle.to_string()); +} diff --git a/rustbyexample/conversion.d/string2.rs b/rustbyexample/conversion.d/string2.rs new file mode 100644 index 0000000..e55559c --- /dev/null +++ b/rustbyexample/conversion.d/string2.rs @@ -0,0 +1,7 @@ +fn main() { + let parsed: i32 = "5".parse().unwrap(); + let turbo_parsed = "10".parse::().unwrap(); + + let sum = parsed + turbo_parsed; + println!("Sum: {:?}", sum); +} diff --git a/rustbyexample/conversion.d/try_from_try_into.rs b/rustbyexample/conversion.d/try_from_try_into.rs new file mode 100644 index 0000000..8f6c99d --- /dev/null +++ b/rustbyexample/conversion.d/try_from_try_into.rs @@ -0,0 +1,28 @@ +use std::convert::TryFrom; +use std::convert::TryInto; + +#[derive(Debug, PartialEq)] +struct EvenNumber(i32); + +impl TryFrom for EvenNumber { + type Error = (); + + fn try_from(value: i32) -> Result { + if value % 2 == 0 { + Ok(EvenNumber(value)) + } else { + Err(()) + } + } +} + +fn main() { + assert_eq!(EvenNumber::try_from(8), Ok(EvenNumber(8))); + assert_eq!(EvenNumber::try_from(5), Err(())); + + let result: Result = 8i32.try_into(); + assert_eq!(result, Ok(EvenNumber(8))); + + let result: Result = 5i32.try_into(); + assert_eq!(result, Err(())); +}