stubr 0.6.2

Wiremock implemented in Rust
Documentation
use crate::model::request::{headers::HttpReqHeadersStub, matcher::RequestMatcherStub};

impl From<&HttpReqHeadersStub> for Vec<(String, String)> {
    fn from(headers: &HttpReqHeadersStub) -> Self {
        headers
            .get_headers()
            .map(|iter| {
                iter.filter_map(|RequestMatcherStub { key, value }| Some(key).zip(value.as_ref().and_then(|it| it.try_into().ok())))
                    .collect()
            })
            .unwrap_or_default()
    }
}

#[cfg(test)]
mod verify_header_tests {
    use std::str::FromStr;

    use regex::Regex;
    use serde_json::{Map, Value};

    use crate::model::request::matcher::MatcherValueStub;

    use super::*;

    #[test]
    fn equal_to_should_generate_exact() {
        let matcher = MatcherValueStub {
            equal_to: Some(Value::String(String::from("bcd"))),
            ..Default::default()
        };
        let matcher = serde_json::to_value(matcher).unwrap();
        let headers = vec![(String::from("a"), matcher)];
        let headers = HttpReqHeadersStub {
            headers: Some(Map::from_iter(headers)),
        };
        let headers = Vec::<(String, String)>::try_from(&headers).unwrap();
        assert_eq!(headers.len(), 1);
        assert_eq!(headers.get(0).unwrap().0, "a");
        assert_eq!(headers.get(0).unwrap().1, "bcd");
    }

    #[test]
    fn contains_to_should_generate_containing() {
        let matcher = MatcherValueStub {
            contains: Some(String::from("b")),
            ..Default::default()
        };
        let matcher = serde_json::to_value(matcher).unwrap();
        let headers = vec![(String::from("a"), matcher)];
        let headers = HttpReqHeadersStub {
            headers: Some(Map::from_iter(headers)),
        };
        let headers = Vec::<(String, String)>::try_from(&headers).unwrap();
        assert_eq!(headers.len(), 1);
        assert_eq!(headers.get(0).unwrap().0, "a");
        assert!(headers.get(0).unwrap().1.contains('b'));
    }

    #[test]
    fn matches_to_should_generate_matching_regex() {
        let regex = "[a-z]{4}";
        let matcher = MatcherValueStub {
            matches: Some(Value::String(String::from(regex))),
            ..Default::default()
        };
        let matcher = serde_json::to_value(matcher).unwrap();
        let headers = vec![(String::from("a"), matcher)];
        let headers = HttpReqHeadersStub {
            headers: Some(Map::from_iter(headers)),
        };
        let headers = Vec::<(String, String)>::try_from(&headers).unwrap();
        assert_eq!(headers.len(), 1);
        assert_eq!(headers.get(0).unwrap().0, "a");
        let regex = Regex::from_str(regex).unwrap();
        assert!(regex.is_match(&headers.get(0).unwrap().1));
    }
}