use std::{fmt::Display, str::FromStr}; use request::Request; use response::Response; pub mod headermap; pub mod headers; pub mod method; pub mod request; pub mod response; pub mod status; pub mod uri; #[derive(Debug, Clone)] pub enum Message { Request(Request), Response(Response), } impl Display for Message { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Message::Request(r) => write!(f, "{r}"), Message::Response(r) => write!(f, "{r}"), } } } impl FromStr for Message { type Err = anyhow::Error; fn from_str(s: &str) -> Result { if s.starts_with("SIP/") { Response::from_str(s).map(Message::Response) } else { Request::from_str(s).map(Message::Request) } } } impl Message { pub fn body_mut(&mut self) -> &mut String { match self { Message::Request(r) => &mut r.body, Message::Response(r) => &mut r.body, } } }