/
akmitrich
/
udith
Обзор
Документация
Войти
/
akmitrich
/
udith
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/message/status_code.rs
54 строки
1 KB
akmitrich
refactor: Clean up 1.90 warnings
25 окт 2025, 17:45
25 окт 2025, 17:45
38d6cef
Код
Авторство
О чём код?
use crate::parse_utils::ParseResult; use nom::bytes::complete::take_while; #[derive(Debug, Clone, Copy, PartialEq)] pub struct StatusCode { inner: u16, } impl TryFrom<&[u8]> for StatusCode { type Error = crate::Error; fn try_from(value: &[u8]) -> crate::Result<Self> { let s = std::str::from_utf8(value)?; let inner = s.parse()?; Ok(Self { inner }) } } impl From<StatusCode> for u16 { fn from(value: StatusCode) -> Self { value.inner } } impl StatusCode { pub fn parse(src: &'_ [u8]) -> ParseResult<'_, Self> { let (rest, digits) = take_while(|t: u8| t.is_ascii_digit())(src)?; match Self::try_from(digits) { Ok(code) => Ok((rest, code)), Err(_) => Err(nom::Err::Error(nom::error::make_error( src, nom::error::ErrorKind::Fail, ))), } } } #[cfg(test)] mod tests { use super::*; #[test] fn it_works() { let code = StatusCode::try_from(b"200".as_slice()).unwrap(); assert_eq!(200_u16, code.into()) } #[test] fn test_parse_status_code() { let (rest, code) = StatusCode::parse(b"503").unwrap(); assert!(rest.is_empty()); assert_eq!(503_u16, code.into()) } }