use crate::util::raw_string::ToInt;
pub struct Status<'a> {
pub ns: u16,
pub status_code: u16,
pub comment: Option<&'a [u8]>,
}
pub trait AsMsrpStatus<'a> {
type Target;
fn as_msrp_status(&'a self) -> Option<Self::Target>;
}
impl<'a> AsMsrpStatus<'a> for [u8] {
type Target = Status<'a>;
fn as_msrp_status(&'a self) -> Option<Status> {
if self.len() > 3 && self[3] == b' ' {
if self.len() == 7 || (self.len() > 7 && self[7] == b' ') {
let i1 = &self[..3].to_int();
let i2 = &self[4..7].to_int();
if let (Ok(i1), Ok(i2)) = (i1, i2) {
if self.len() == 7 {
return Some(Status {
ns: *i1,
status_code: *i2,
comment: None,
});
} else {
return Some(Status {
ns: *i1,
status_code: *i2,
comment: Some(&self[8..]),
});
}
}
}
}
None
}
}