/// Errors encountered by the timer implementation. /// /// Currently, there are two different errors that can occur: /// /// * `shutdown` occurs when a timer operation is attempted, but the timer /// instance has been dropped. In this case, the operation will never be able /// to complete and the `shutdown` error is returned. This is a permanent /// error, i.e., once this error is observed, timer operations will never /// succeed in the future. /// /// * `at_capacity` occurs when a timer operation is attempted, but the timer /// instance is currently handling its maximum number of outstanding sleep instances. /// In this case, the operation is not able to be performed at the current /// moment, and `at_capacity` is returned. This is a transient error, i.e., at /// some point in the future, if the operation is attempted again, it might /// succeed. Callers that observe this error should attempt to [shed load]. One /// way to do this would be dropping the future that issued the timer operation. /// /// [shed load]: https://en.wikipedia.org/wiki/Load_Shedding #[derive(Debug, Copy, Clone)] pubstruct Error(Kind);
/// Errors returned by `Timeout`. /// /// This error is returned when a timeout expires before the function was able /// to finish. #[derive(Debug, PartialEq, Eq)] pubstruct Elapsed(());
impl Error { /// Creates an error representing a shutdown timer. pubfn shutdown() -> Error {
Error(Kind::Shutdown)
}
/// Returns `true` if the error was caused by the timer being shutdown. pubfn is_shutdown(&self) -> bool {
matches!(self.0, Kind::Shutdown)
}
/// Creates an error representing a timer at capacity. pubfn at_capacity() -> Error {
Error(Kind::AtCapacity)
}
/// Returns `true` if the error was caused by the timer being at capacity. pubfn is_at_capacity(&self) -> bool {
matches!(self.0, Kind::AtCapacity)
}
/// Creates an error representing a misconfigured timer. pubfn invalid() -> Error {
Error(Kind::Invalid)
}
/// Returns `true` if the error was caused by the timer being misconfigured. pubfn is_invalid(&self) -> bool {
matches!(self.0, Kind::Invalid)
}
}
impl error::Error for Error {}
impl fmt::Display for Error { fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { let descr = matchself.0 {
Kind::Shutdown => { "the timer is shutdown, must be called from the context of Tokio runtime"
}
Kind::AtCapacity => "timer is at capacity and cannot create a new entry",
Kind::Invalid => "timer duration exceeds maximum duration",
};
write!(fmt, "{}", descr)
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.