diff options
Diffstat (limited to '2025/joltage.rs')
| -rw-r--r-- | 2025/joltage.rs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/2025/joltage.rs b/2025/joltage.rs new file mode 100644 index 0000000..5cb8ede --- /dev/null +++ b/2025/joltage.rs @@ -0,0 +1,44 @@ +use std::ops::Deref; + +#[derive(Ord, PartialOrd, PartialEq, Eq, Debug)] +pub struct Joltage { + inner: u8, +} + +impl Joltage { + pub fn parse(value: u8) -> Result<Self, String> { + if value > 10 { + return Err( + format!( + "Joltage value {} is out of range (0-10)", + value + ), + ); + } else if value == 0 { + return Err("Joltage value cannot be zero".to_string()); + } + Ok( + Joltage { + inner: value, + }, + ) + } + + fn value(&self) -> u8 { + self.inner + } +} + +impl Deref for Joltage { + type Target = u8; + + fn deref(&self) -> &Self::Target { + &self.inner + } +} + +impl From<Joltage> for u8 { + fn from(value: Joltage) -> Self { + value.inner + } +} |
