ftth_rsip/headers/typed/
warning.rs1#[doc(hidden)]
2pub use super::tokenizers::WarningTokenizer as Tokenizer;
3
4use crate::common::Uri;
5use rsip_derives::TypedHeader;
6use std::convert::{TryFrom, TryInto};
7
8#[derive(TypedHeader, Eq, PartialEq, Clone, Debug)]
10pub struct Warning {
11 pub code: u16,
12 pub uri: Uri,
13 pub text: String,
14}
15
16impl<'a> TryFrom<Tokenizer<'a>> for Warning {
17 type Error = crate::Error;
18
19 fn try_from(tokenizer: Tokenizer) -> Result<Self, Self::Error> {
20 Ok(Self {
21 code: tokenizer.code.parse::<u16>()?,
22 uri: Uri {
23 host_with_port: tokenizer.host.try_into()?,
24 ..Default::default()
25 },
26 text: tokenizer.text.into(),
27 })
28 }
29}
30
31impl std::fmt::Display for Warning {
32 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
33 if self.text.starts_with('"') && self.text.ends_with('"') {
34 write!(f, "{} {} {}", self.code, self.uri, self.text)
35 } else {
36 write!(f, "{} {} \"{}\"", self.code, self.uri, self.text)
37 }
38 }
39}