use std::fmt::Debug;
use super::ReadsKey;
pub struct HeaderValue<T> {
pub value: T,
pub comment: Option<String>,
}
impl<T> Debug for HeaderValue<T>
where
T: Debug,
{
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("HeaderValue")
.field("value", &self.value)
.field("comment", &self.comment)
.finish()
}
}
impl<T> PartialEq<T> for HeaderValue<T>
where
T: PartialEq,
{
fn eq(&self, other: &T) -> bool {
self.value == *other
}
}
impl<T> Clone for HeaderValue<T>
where
T: Clone,
{
fn clone(&self) -> Self {
HeaderValue {
value: self.value.clone(),
comment: self.comment.clone(),
}
}
}
impl<T> Default for HeaderValue<T>
where
T: Default,
{
fn default() -> Self {
Self {
value: Default::default(),
comment: Default::default(),
}
}
}
impl<T> HeaderValue<T>
where
T: ReadsKey,
{
pub fn map<U, F>(self, f: F) -> HeaderValue<U>
where
F: FnOnce(T) -> U,
{
HeaderValue {
value: f(self.value),
comment: self.comment,
}
}
pub fn and_then<U, F>(self, f: F) -> HeaderValue<U>
where
F: FnOnce(T) -> HeaderValue<U>,
{
f(self.value)
}
}