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
use default_port::DefaultPort;
use string_repr::StringRepr;

#[macro_export]
macro_rules! scheme {
    ($scheme:expr) => {
        Scheme::new($scheme)
    };
}

pub enum Scheme<'a> {
    HTTP,
    HTTPS,
    CUSTOM(&'a str),
}

impl<'a> Scheme<'a> {
    /// Create new Scheme.
    /// # Example:
    /// ```rust
    /// use wdg_uri::scheme::Scheme;
    /// let custom_scheme = Scheme::new("http");
    /// ```
    pub fn new(data: &str) -> Scheme {
        Scheme::CUSTOM(data)
    }
}

impl<'a> StringRepr for Scheme<'a> {
    fn string_repr(&self) -> String {
        match self {
            Scheme::HTTP => String::from("http"),
            Scheme::HTTPS => String::from("https"),
            Scheme::CUSTOM(string) => String::from(*string),
        }
    }
}

impl<'a> DefaultPort for Scheme<'a> {
    fn default_port(&self) -> Option<usize> {
        match self {
            Scheme::HTTP => Some(80),
            Scheme::HTTPS => Some(443),
            _ => None,
        }
    }
}