/
akmitrich
/
udith
Обзор
Документация
Войти
/
akmitrich
/
udith
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/message/start_line/request.rs
48 строк
1 KB
akmitrich
refactor: Clean up 1.90 warnings
25 окт 2025, 17:45
25 окт 2025, 17:45
38d6cef
Код
Авторство
О чём код?
use nom::{Parser, bytes::complete::tag, combinator::map}; use crate::{ message::{Method, uri::Uri}, parse_utils::{CRLF, ParseResult, SIP_VERSION, SP}, }; #[derive(Debug)] pub struct RequestLine { pub method: Method, pub uri: Uri, } impl RequestLine { pub fn parse(src: &'_ [u8]) -> ParseResult<'_, Self> { // Request-Line = Method SP Request-URI SP SIP-Version CRLF map( ( Method::parse, nom::sequence::delimited(tag(SP), Uri::parse, tag(SP)), tag(SIP_VERSION), tag(CRLF), ), |(method, uri, _, _)| Self { method, uri }, ) .parse(src) } } impl std::fmt::Display for RequestLine { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{} {} SIP/2.0", self.method, self.uri) } } #[cfg(test)] mod tests { use super::*; #[test] fn parse_works() { let line = b"INVITE sip:127.0.0.1:5060 SIP/2.0\r\n"; let (rest, request_line) = RequestLine::parse(line).unwrap(); assert!(rest.is_empty()); assert_eq!(Method::Invite, request_line.method); assert_eq!("sip:127.0.0.1:5060", request_line.uri.to_string()); } }