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
use std::fmt;

use nom::{
    IResult,
    branch::alt,
    combinator::map,
    bytes::complete::tag
};

#[derive(Debug, PartialEq, Clone)]
pub enum SdpMediaType {
    Audio,
    Video,
    Application
}

pub fn parse_media_type(input: &[u8]) -> IResult<&[u8], SdpMediaType> {
    alt((
      map(tag("audio"), |_| SdpMediaType::Audio),
      map(tag("video"), |_| SdpMediaType::Video),
      map(tag("application"), |_| SdpMediaType::Application)
    ))(input)
}

impl fmt::Display for SdpMediaType {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        match self {
            SdpMediaType::Audio => write!(f, "audio"),
            SdpMediaType::Video => write!(f, "video"),
            SdpMediaType::Application => write!(f, "application")
        }
    }
}