ruststream-nats 0.1.0

NATS / JetStream broker implementation for the RustStream messaging framework.
Documentation
//! Conversions between `RustStream` and `async-nats` types.

use bytes::Bytes;
use ruststream::Headers;

pub(crate) fn headers_from_nats(map: Option<&async_nats::HeaderMap>) -> Headers {
    let Some(map) = map else {
        return Headers::new();
    };
    let mut headers = Headers::new();
    for (name, values) in map.iter() {
        if let Some(first) = values.iter().next() {
            headers.insert(name.to_string(), Bytes::copy_from_slice(first.as_ref()));
        }
    }
    headers
}

pub(crate) fn headers_to_nats(headers: &Headers) -> Option<async_nats::HeaderMap> {
    if headers.is_empty() {
        return None;
    }
    let mut map = async_nats::HeaderMap::new();
    for (name, value) in headers.iter() {
        if let Ok(text) = std::str::from_utf8(value) {
            map.insert(name, text);
        }
    }
    Some(map)
}