1use std::str::FromStr;
4
5#[derive(Copy, PartialEq, Debug, Clone)]
9pub struct Protocol(ProtocolInner);
10
11impl Protocol {
12 pub const WEB_TRANSPORT: Protocol = Protocol(ProtocolInner::WebTransport);
14 pub const CONNECT_UDP: Protocol = Protocol(ProtocolInner::ConnectUdp);
16
17 #[inline]
19 pub fn as_str(&self) -> &str {
20 match self.0 {
21 ProtocolInner::WebTransport => "webtransport",
22 ProtocolInner::ConnectUdp => "connect-udp",
23 }
24 }
25}
26
27#[derive(Copy, PartialEq, Debug, Clone)]
28enum ProtocolInner {
29 WebTransport,
30 ConnectUdp,
31}
32
33pub struct InvalidProtocol;
35
36impl FromStr for Protocol {
37 type Err = InvalidProtocol;
38
39 fn from_str(s: &str) -> Result<Self, Self::Err> {
40 match s {
41 "webtransport" => Ok(Self(ProtocolInner::WebTransport)),
42 "connect-udp" => Ok(Self(ProtocolInner::ConnectUdp)),
43 _ => Err(InvalidProtocol),
44 }
45 }
46}