http_type/protocol/
impl.rsuse super::r#type::Protocol;
use http_constant::*;
use std::{
fmt::{self, Display},
str::FromStr,
};
impl Default for Protocol {
fn default() -> Self {
Self::HTTP
}
}
impl Protocol {
#[allow(dead_code)]
pub fn new() -> Self {
Self::default()
}
#[allow(dead_code)]
pub fn is_http(&self) -> bool {
self.to_owned() == Self::HTTP.to_owned()
}
pub fn is_https(&self) -> bool {
self.to_owned() == Self::HTTPS.to_owned()
}
pub fn get_port(&self) -> u16 {
match self {
Self::HTTP => 80,
Self::HTTPS => 443,
Self::Unknown(_) => 80,
}
}
}
impl Display for Protocol {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let http: String = HTTP.to_lowercase();
let https: String = HTTPS.to_lowercase();
let res: &str = match self {
Self::HTTP => http.as_str(),
Self::HTTPS => https.as_str(),
Self::Unknown(protocol) => protocol,
};
write!(f, "{}", res)
}
}
impl FromStr for Protocol {
type Err = &'static str;
fn from_str(data: &str) -> Result<Self, Self::Err> {
match data.to_lowercase().as_str() {
_data if _data == HTTP.to_lowercase() => Ok(Self::HTTP),
_data if _data == HTTPS.to_lowercase() => Ok(Self::HTTPS),
_ => Ok(Self::Unknown(data.to_string())),
}
}
}