lib.rs
use std::fmt;
const MINUTES_PER_HOUR: i32 = 60;
const HOURS_PER_DAY: i32 = 24;
const MINUTES_PER_DAY: i32 = MINUTES_PER_HOUR * HOURS_PER_DAY;
#[derive(Debug, PartialEq)]
pub struct Clock {
minutes: i32,
}
impl Clock {
pub fn new(hours: i32, minutes: i32) -> Self {
Self {
minutes: (hours * MINUTES_PER_HOUR + minutes).rem_euclid(MINUTES_PER_DAY),
}
}
pub fn add_minutes(&self, minutes: i32) -> Self {
Self::new(0, self.minutes + minutes)
}
fn minutes(&self) -> i32 {
self.minutes % MINUTES_PER_HOUR
}
fn hours(&self) -> i32 {
self.minutes / MINUTES_PER_HOUR
}
}
impl fmt::Display for Clock {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(formatter, "{:02}:{:02}", self.hours(), self.minutes())
}
}