use std::fmt;
use std::str::FromStr;
use serde::{
Deserialize,
Serialize,
};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum AttemptTimeoutPolicy {
Retry,
Abort,
}
impl Default for AttemptTimeoutPolicy {
#[inline]
fn default() -> Self {
Self::Retry
}
}
impl fmt::Display for AttemptTimeoutPolicy {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Retry => f.write_str("retry"),
Self::Abort => f.write_str("abort"),
}
}
}
impl FromStr for AttemptTimeoutPolicy {
type Err = String;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s.trim().to_ascii_lowercase().as_str() {
"retry" => Ok(Self::Retry),
"abort" => Ok(Self::Abort),
_ => Err("attempt timeout policy must be `retry` or `abort`".to_string()),
}
}
}