use std::str::FromStr;
#[derive(Copy, PartialEq, Debug, Clone)]
pub struct Protocol(ProtocolInner);
impl Protocol {
pub const WEB_TRANSPORT: Protocol = Protocol(ProtocolInner::WebTransport);
pub const CONNECT_UDP: Protocol = Protocol(ProtocolInner::ConnectUdp);
pub const CONNECT_IP: Protocol = Protocol(ProtocolInner::ConnectIp);
pub const WEBSOCKET: Protocol = Protocol(ProtocolInner::WebSocket);
#[inline]
pub fn as_str(&self) -> &str {
match self.0 {
ProtocolInner::WebTransport => "webtransport",
ProtocolInner::ConnectUdp => "connect-udp",
ProtocolInner::ConnectIp => "connect-ip",
ProtocolInner::WebSocket => "websocket",
}
}
}
#[derive(Copy, PartialEq, Debug, Clone)]
enum ProtocolInner {
WebTransport,
ConnectUdp,
ConnectIp,
WebSocket,
}
pub struct InvalidProtocol;
impl FromStr for Protocol {
type Err = InvalidProtocol;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"webtransport" => Ok(Self(ProtocolInner::WebTransport)),
"connect-udp" => Ok(Self(ProtocolInner::ConnectUdp)),
"connect-ip" => Ok(Self(ProtocolInner::ConnectIp)),
"websocket" => Ok(Self(ProtocolInner::WebSocket)),
_ => Err(InvalidProtocol),
}
}
}