summaryrefslogtreecommitdiff
path: root/2025/joltage.rs
diff options
context:
space:
mode:
Diffstat (limited to '2025/joltage.rs')
-rw-r--r--2025/joltage.rs44
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
+ }
+}