use crate::http::{
headers::{HeaderEntry, HeaderName, HeaderValue, IntoHeader},
result::H10LibResult,
};
#[derive(Debug, PartialEq, Eq)]
pub struct UserAgent {
name: HeaderName,
value: HeaderValue,
}
impl IntoHeader for UserAgent {
fn into_header(self) -> HeaderEntry {
let Self { name, value } = self;
HeaderEntry { name, value }
}
}
impl UserAgent {
pub fn custom(product_name: &str, product_version: &str) -> H10LibResult<Self> {
let new_value = format!(
"{prodname}/{prodversion} {library}",
prodname = product_name,
prodversion = product_version,
library = library_str()
);
Ok(Self {
value: new_value.parse()?,
..Default::default()
})
}
}
impl Default for UserAgent {
fn default() -> Self {
Self {
name: HeaderName::new_unchecked("User-Agent"),
value: HeaderValue::new_unchecked(library_str().as_str()),
}
}
}
fn library_str() -> String {
format!("{}/{}", env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION"))
}