bouillon 0.2.1

A thin, opinionated wrapper around soup that provides an easy, fluent API for sending HTTP requests.
Documentation
use soup::MessageHeaders;
use soup::glib::translate::ToGlibPtr as _;

pub(crate) trait MessageHeadersExt {
    fn contains(&self, name: &str) -> bool;
}

impl MessageHeadersExt for MessageHeaders {
    fn contains(&self, name: &str) -> bool {
        // SAFETY: The return value is owned by the `headers` instance.
        let value = unsafe {
            soup::ffi::soup_message_headers_get_one(self.to_glib_none().0, name.to_glib_none().0)
        };
        !value.is_null()
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use soup::MessageHeadersType;

    const HEADER: &str = "X-Test-Header";

    #[test]
    fn contains_returns_false_when_header_is_missing() {
        let headers = MessageHeaders::new(MessageHeadersType::Request);
        assert!(!headers.contains(HEADER));
    }

    #[test]
    fn contains_returns_true_when_header_is_present_with_one_value() {
        let headers = MessageHeaders::new(MessageHeadersType::Request);
        headers.append(HEADER, "foo");
        assert!(headers.contains(HEADER));
    }

    #[test]
    fn contains_returns_true_when_header_is_present_with_multiple_values() {
        let headers = MessageHeaders::new(MessageHeadersType::Request);
        headers.append(HEADER, "foo");
        headers.append(HEADER, "bar");
        assert!(headers.contains(HEADER));
    }
}