use serde::{Serialize, Deserialize};
use std::str::FromStr;
use crate::error::{Error, Result};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
#[derive(Default)]
pub enum ProtocolKind {
#[default]
Triple,
Dubbo,
Unknown(String),
}
impl FromStr for ProtocolKind {
type Err = Error;
fn from_str(s: &str) -> Result<Self> {
match s.to_lowercase().as_str() {
"triple" | "tri" => Ok(ProtocolKind::Triple),
"dubbo" => Ok(ProtocolKind::Dubbo),
_ => Ok(ProtocolKind::Unknown(s.to_string())),
}
}
}
impl std::fmt::Display for ProtocolKind {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
ProtocolKind::Triple => write!(f, "tri"),
ProtocolKind::Dubbo => write!(f, "dubbo"),
ProtocolKind::Unknown(s) => write!(f, "{}", s),
}
}
}