use std::{fmt, str::FromStr};
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum FrameCapabilities {
Pipelining,
}
impl FromStr for FrameCapabilities {
type Err = String;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s.to_lowercase().as_str() {
"pipelining" => Ok(Self::Pipelining),
_ => Err(format!("Unknown capability: {s}")),
}
}
}
impl fmt::Display for FrameCapabilities {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let s = match self {
Self::Pipelining => "pipelining",
};
write!(f, "{s}")
}
}
#[cfg(test)]
#[allow(clippy::unwrap_used)]
mod tests {
use super::*;
#[test]
fn test_frame_capabilities() {
assert_eq!(
FrameCapabilities::from_str("pipelining").unwrap(),
FrameCapabilities::Pipelining
);
assert_eq!(FrameCapabilities::Pipelining.to_string(), "pipelining");
assert!(FrameCapabilities::from_str("unknown").is_err());
}
}