notify: Use Duration inside the newtype Microseconds
This commit is contained in:
parent
f5b9796a32
commit
907008df66
|
@ -121,3 +121,18 @@ impl Display for OtherStateError {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Error for OtherStateError {}
|
impl Error for OtherStateError {}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum MicrosecondsFromDurationError {
|
||||||
|
NoMicroseconds,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Display for MicrosecondsFromDurationError {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
match self {
|
||||||
|
Self::NoMicroseconds => write!(f, "Minimal precision is microseconds but no microseconds are within the Duration provided."),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Error for MicrosecondsFromDurationError {}
|
||||||
|
|
|
@ -230,10 +230,10 @@ pub enum NotifyState<'a> {
|
||||||
/// Tell the service manager to execute the configured watchdog option.
|
/// Tell the service manager to execute the configured watchdog option.
|
||||||
WatchdogTrigger,
|
WatchdogTrigger,
|
||||||
/// Reset watchdog timeout value during runtime.
|
/// Reset watchdog timeout value during runtime.
|
||||||
/// The value is in microseconds.
|
/// Minimal precision is microseconds, not nanoseconds.
|
||||||
WatchdogUsec(types::Microseconds),
|
WatchdogUsec(types::Microseconds),
|
||||||
/// Tells the service manager to extend the startup, runtime or shutdown service timeout corresponding the current state.
|
/// Tells the service manager to extend the startup, runtime or shutdown service timeout corresponding the current state.
|
||||||
/// The value is in microseconds.
|
/// Minimal precision is microseconds, not nanoseconds.
|
||||||
ExtendTimeoutUsec(types::Microseconds),
|
ExtendTimeoutUsec(types::Microseconds),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -254,11 +254,11 @@ impl<'a> Display for NotifyState<'a> {
|
||||||
NotifyState::Stopping => f.write_str("STOPPING=1"),
|
NotifyState::Stopping => f.write_str("STOPPING=1"),
|
||||||
NotifyState::Watchdog => f.write_str("WATCHDOG=1"),
|
NotifyState::Watchdog => f.write_str("WATCHDOG=1"),
|
||||||
NotifyState::WatchdogTrigger => f.write_str("WATCHDOG=trigger"),
|
NotifyState::WatchdogTrigger => f.write_str("WATCHDOG=trigger"),
|
||||||
NotifyState::WatchdogUsec(types::Microseconds(milliseconds)) => {
|
NotifyState::WatchdogUsec(duration) => {
|
||||||
write!(f, "WATCHDOG_USEC={milliseconds}")
|
write!(f, "WATCHDOG_USEC={duration}")
|
||||||
}
|
}
|
||||||
NotifyState::ExtendTimeoutUsec(types::Microseconds(milliseconds)) => {
|
NotifyState::ExtendTimeoutUsec(duration) => {
|
||||||
write!(f, "EXTEND_TIMEOUT_USEC={milliseconds}")
|
write!(f, "EXTEND_TIMEOUT_USEC={duration}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
//! Newtypes used by [`NotifyState`](super::NotifyState)
|
//! Newtypes used by [`NotifyState`](super::NotifyState)
|
||||||
|
|
||||||
|
use core::{fmt::Display, time::Duration};
|
||||||
|
|
||||||
use super::error;
|
use super::error;
|
||||||
|
|
||||||
/// Allowed File descriptor name.
|
/// Allowed File descriptor name.
|
||||||
|
@ -72,17 +74,22 @@ impl AsRef<str> for StatusLine<'_> {
|
||||||
|
|
||||||
/// Semantic type representing a number of microseconds.
|
/// Semantic type representing a number of microseconds.
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||||
pub struct Microseconds(pub(super) u64);
|
pub struct Microseconds(Duration);
|
||||||
|
|
||||||
impl From<u64> for Microseconds {
|
impl TryFrom<Duration> for Microseconds {
|
||||||
fn from(value: u64) -> Self {
|
type Error = error::MicrosecondsFromDurationError;
|
||||||
Self(value)
|
|
||||||
|
fn try_from(value: Duration) -> Result<Self, Self::Error> {
|
||||||
|
if value.as_micros() == 0 {
|
||||||
|
return Err(Self::Error::NoMicroseconds);
|
||||||
|
}
|
||||||
|
Ok(Self(value))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AsRef<u64> for Microseconds {
|
impl Display for Microseconds {
|
||||||
fn as_ref(&self) -> &u64 {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
&self.0
|
write!(f, "{}", self.0.as_micros())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue