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);
#[inline]
pub fn as_str(&self) -> &str {
match self.0 {
ProtocolInner::WebTransport => "webtransport",
ProtocolInner::ConnectUdp => "connect-udp",
}
}
}
#[derive(Copy, PartialEq, Debug, Clone)]
enum ProtocolInner {
WebTransport,
ConnectUdp,
}
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)),
_ => Err(InvalidProtocol),
}
}
}