From 23185bfd86bd394cea25c5aea0508bd95c5ad9c2 Mon Sep 17 00:00:00 2001 From: Kate Korsaro Date: Sun, 16 Nov 2025 10:01:13 +0100 Subject: [PATCH] review: change Die to enum to handle range and value list in the future --- 01.workspace/oxidice_lib/src/imp/die_new.rs | 10 ---- 01.workspace/oxidice_lib/src/imp/die_roll.rs | 9 +++- .../oxidice_lib/src/imp/handful_grab.rs | 2 +- 01.workspace/oxidice_lib/src/imp/mod.rs | 1 - 01.workspace/oxidice_lib/src/lib.rs | 2 +- 01.workspace/oxidice_lib/src/str/die.rs | 46 ++++++++++++++++--- 6 files changed, 49 insertions(+), 21 deletions(-) delete mode 100644 01.workspace/oxidice_lib/src/imp/die_new.rs diff --git a/01.workspace/oxidice_lib/src/imp/die_new.rs b/01.workspace/oxidice_lib/src/imp/die_new.rs deleted file mode 100644 index d00a21e..0000000 --- a/01.workspace/oxidice_lib/src/imp/die_new.rs +++ /dev/null @@ -1,10 +0,0 @@ -use crate::*; - -impl Die { - pub fn new(sides: u16) -> Self { - Self { sides } - } -} - -// #[cfg(test)] -// mod unit_tests { use super::*; } diff --git a/01.workspace/oxidice_lib/src/imp/die_roll.rs b/01.workspace/oxidice_lib/src/imp/die_roll.rs index a79eb83..c646989 100644 --- a/01.workspace/oxidice_lib/src/imp/die_roll.rs +++ b/01.workspace/oxidice_lib/src/imp/die_roll.rs @@ -2,7 +2,12 @@ use crate::*; impl Die { pub fn roll(&self) -> i32 { - let mut rng = rand::rng(); - rng.random_range(1..=self.sides) as i32 + fn roll_sides(sides: u16) -> i32 { + let mut rng = rand::rng(); + rng.random_range(1..=sides) as i32 + } + match self { + Die::Sides(sides) => roll_sides(*sides), + } } } diff --git a/01.workspace/oxidice_lib/src/imp/handful_grab.rs b/01.workspace/oxidice_lib/src/imp/handful_grab.rs index 4de2dbf..bf6bc3a 100644 --- a/01.workspace/oxidice_lib/src/imp/handful_grab.rs +++ b/01.workspace/oxidice_lib/src/imp/handful_grab.rs @@ -4,7 +4,7 @@ impl Handful { pub fn grab(dice_num: u16, sides: u16) -> Self { let mut dice = Vec::::new(); for _ in 1..=dice_num { - dice.push(Die::new(sides)); + dice.push(Die::Sides(sides)); } Self { dice } } diff --git a/01.workspace/oxidice_lib/src/imp/mod.rs b/01.workspace/oxidice_lib/src/imp/mod.rs index f603b33..8759239 100644 --- a/01.workspace/oxidice_lib/src/imp/mod.rs +++ b/01.workspace/oxidice_lib/src/imp/mod.rs @@ -1,4 +1,3 @@ -pub mod die_new; pub mod die_roll; pub mod handful_grab; pub mod handful_roll; diff --git a/01.workspace/oxidice_lib/src/lib.rs b/01.workspace/oxidice_lib/src/lib.rs index a581a58..77e4cda 100644 --- a/01.workspace/oxidice_lib/src/lib.rs +++ b/01.workspace/oxidice_lib/src/lib.rs @@ -8,7 +8,7 @@ mod str; mod trt; mod tst; -pub(crate) use crate::str::die::O as Die; +pub(crate) use crate::str::die::E as Die; pub(crate) use crate::str::failed_to::E as FailedTo; pub(crate) use crate::str::handful::O as Handful; pub(crate) use crate::str::outcome::E as Outcome; diff --git a/01.workspace/oxidice_lib/src/str/die.rs b/01.workspace/oxidice_lib/src/str/die.rs index cadc462..85a9352 100644 --- a/01.workspace/oxidice_lib/src/str/die.rs +++ b/01.workspace/oxidice_lib/src/str/die.rs @@ -1,17 +1,51 @@ use crate::*; +// use std::fmt::Display; +// use std::str::FromStr; -#[derive(Debug, Default, PartialEq, Clone)] -pub struct O { - pub(crate) sides: u16, +#[derive(Debug, PartialEq, PartialOrd, Eq, Ord, Clone, Copy, Hash)] +pub enum E { + Sides(u16), } -// impl std::fmt::Display for O { -// fn fmt(&self, _f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> { -// todo!(); +// impl Display for E { +// fn fmt(&self, f: &mut std::fmt::Formatter) -> std::result::Result<(), std::fmt::Error> { +// match self { +// Self::NoValue => write!(f, "NoValue"), +// } +// } +// } + +// impl FromStr for E { +// type Err = Box; +// fn from_str(value: &str) -> std::result::Result> { +// match value { +// "NoValue" => Ok(Self::NoValue), +// _ => unreachable!(), +// } // } // } // #[cfg(test)] // mod unit_tests { // use super::*; +// #[test] +// fn check_001() { +// for value in [E::NoValue] { +// match value { +// E::NoValue => assert_eq!( +// E::NoValue, +// E::from_str("NoValue").unwrap() +// ), +// } +// } +// } +// +// #[test] +// fn check_002() { +// for value in [E::NoValue] { +// match value { +// E::NoValue => assert_eq!(&E::NoValue.to_string(), "NoValue"), +// } +// } +// } // }