use caramelo::{MatchType::ToHave, Matcher, TypedMatcher};
use crate::mock::Request;
pub fn query_param(value: &str) -> QueryParam {
let regex = regex::Regex::new(value);
match regex {
Ok(regex) => QueryParam(regex),
Err(_) => panic!("Invalid regex pattern"),
}
}
#[derive(Clone)]
pub struct QueryParam(regex::Regex);
impl Matcher<Request> for QueryParam {
fn matches(&self, value: &Request) -> bool {
if let Some(query_params) = &value.query_params() {
query_params
.iter()
.any(|(key, _)| self.0.is_match(key))
} else {
false
}
}
fn description(&self) -> String {
format!("query param matching {:?}", self.0)
}
}
impl TypedMatcher<Request> for QueryParam {
fn matcher_type(&self) -> caramelo::MatchType {
ToHave
}
}
pub fn query_value(value: &str) -> QueryValue {
let regex = regex::Regex::new(value);
match regex {
Ok(regex) => QueryValue(regex),
Err(_) => panic!("Invalid regex pattern"),
}
}
#[derive(Clone)]
pub struct QueryValue(regex::Regex);
impl Matcher<Request> for QueryValue {
fn matches(&self, value: &Request) -> bool {
if let Some(query_params) = &value.query_params() {
query_params
.iter()
.any(|(_, value)| {
self.0
.is_match(value)
})
} else {
false
}
}
fn description(&self) -> String {
format!("query value matching {:?}", self.0)
}
}
impl TypedMatcher<Request> for QueryValue {
fn matcher_type(&self) -> caramelo::MatchType {
ToHave
}
}