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
mod email_address;
mod information;
mod origin;
mod phone_number;
mod session_description;
mod session_name;
mod uri;
mod util;
mod version;

pub use crate::session_description::SessionDescription;

use crate::{
    email_address::EmailAddress, information::Information, origin::Origin,
    phone_number::PhoneNumber, session_name::SessionName, uri::Uri, version::Version,
};

trait Parse {
    fn parse(input: &str) -> nom::IResult<&str, Self>
    where
        Self: Sized;
}

impl<T: Parse> Parse for Option<T> {
    fn parse(input: &str) -> nom::IResult<&str, Self> {
        nom::combinator::opt(T::parse)(input)
    }
}