h10 0.6.10

Simple HTTP/1.0 Server
Documentation
use crate::server::ServerError;

use super::traits::ArgName;
use std::{fmt::Display, ops::Deref, str::FromStr};

#[derive(Debug)]
pub(crate) struct CliPortNumber(u16);
impl Default for CliPortNumber {
    fn default() -> Self {
        Self(8080)
    }
}

impl ArgName for CliPortNumber {
    fn arg_name() -> String {
        "--port".into()
    }
}

impl Display for CliPortNumber {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "{}", self.0)
    }
}

impl FromStr for CliPortNumber {
    type Err = ServerError;

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        let ip_addr = s
            .parse()
            .map_err(|_| ServerError::PortParseError("Invalid payload for Port number".into()))?;
        if ip_addr > 1024 {
            Ok(Self(ip_addr))
        } else {
            Err(ServerError::PortParseError(
                "Port must be higher than 1023".into(),
            ))
        }
    }
}

impl Deref for CliPortNumber {
    type Target = u16;

    fn deref(&self) -> &Self::Target {
        &self.0
    }
}