/// Duration Module — Plan 250
///
/// Represents a span of time. Inspired by Rust's std::time::Duration,
/// Go's time.Duration, Python's datetime.timedelta.
/// Duration — represents a span of time in milliseconds internally.
type Duration {
_ms int
/// Create from milliseconds
static fn from_millis(ms int) Duration {
return Duration(_ms: ms)
}
/// Create from seconds
static fn from_secs(secs int) Duration {
return Duration(_ms: secs * 1000)
}
/// Create from minutes
static fn from_mins(mins int) Duration {
return Duration(_ms: mins * 60000)
}
/// Create from hours
static fn from_hours(hours int) Duration {
return Duration(_ms: hours * 3600000)
}
/// Get total seconds
fn secs() int {
return ._ms / 1000
}
/// Get total milliseconds
fn millis() int {
return ._ms
}
}
// Arithmetic on durations
ext Duration {
fn add(other Duration) Duration {
return Duration(_ms: ._ms + other._ms)
}
fn sub(other Duration) Duration {
return Duration(_ms: ._ms - other._ms)
}
fn mul(factor int) Duration {
return Duration(_ms: ._ms * factor)
}
}
/// Convenience constructor — create Duration from seconds
fn dur(secs int) Duration {
return Duration.from_secs(secs)
}