use http::HeaderValue;
use crate::{
assertion::{traits::Equality, types::Header, Assertion},
dsl::expression::Predicate,
LogSettings,
};
pub trait HeaderDsl<T> {
fn is(&self, actual: T) -> Assertion<Header>;
fn is_not(&self, actual: T) -> Assertion<Header>;
fn eval(
&self,
actual: T,
predicate: Predicate,
log_settings: &LogSettings,
) -> Assertion<Header> {
match predicate {
Predicate::Is => self.is(actual).assert(log_settings),
Predicate::IsNot => self.is_not(actual).assert(log_settings),
_ => unimplemented!("Invalid predicate for the header DSL: {predicate}"),
}
}
}
impl HeaderDsl<HeaderValue> for &str {
fn is(&self, actual: HeaderValue) -> Assertion<Header> {
actual.is_eq(self)
}
fn is_not(&self, actual: HeaderValue) -> Assertion<Header> {
actual.is_ne(self)
}
}
impl HeaderDsl<HeaderValue> for String {
fn is(&self, actual: HeaderValue) -> Assertion<Header> {
actual.is_eq(self)
}
fn is_not(&self, actual: HeaderValue) -> Assertion<Header> {
actual.is_ne(self)
}
}
impl HeaderDsl<HeaderValue> for HeaderValue {
fn is(&self, actual: HeaderValue) -> Assertion<Header> {
actual.is_eq(self)
}
fn is_not(&self, actual: HeaderValue) -> Assertion<Header> {
actual.is_ne(self)
}
}