http_type/protocol/impl.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
use super::r#type::Protocol;
use http_constant::*;
use std::{
fmt::{self, Display},
str::FromStr,
};
impl Default for Protocol {
fn default() -> Self {
Self::HTTP
}
}
/// Provides utility methods for the `Protocol` type.
impl Protocol {
/// Creates a new instance of `Protocol` with the default value of `Self::HTTP`.
///
/// This is a shorthand for using the `default` method.
pub fn new() -> Self {
Self::default()
}
/// Checks if the current protocol is `HTTP`.
///
/// Returns `true` if the protocol is `HTTP`, otherwise returns `false`.
pub fn is_http(&self) -> bool {
self.to_owned() == Self::HTTP.to_owned()
}
/// Checks if the current protocol is `HTTPS`.
///
/// Returns `true` if the protocol is `HTTPS`, otherwise returns `false`.
pub fn is_https(&self) -> bool {
self.to_owned() == Self::HTTPS.to_owned()
}
/// Returns the default port associated with the protocol.
///
/// - Returns `80` for `Self::HTTP`.
/// - Returns `443` for `Self::HTTPS`.
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())),
}
}
}