dwh 0.7.1

A library to use the digitronic protocol dwh
Documentation
use std::{collections::HashMap, str::FromStr};

use reqwest::{
    header::{HeaderMap, HeaderName, HeaderValue},
    RequestBuilder,
};

use super::ReqwestHooks;

pub struct AddHeaders {
    headers: HeaderMap<HeaderValue>,
}

#[async_trait::async_trait]
impl ReqwestHooks for AddHeaders {
    async fn before_send(&self, req: RequestBuilder) -> crate::Result<RequestBuilder> {
        Ok(req.headers(self.headers.clone()))
    }
}

impl TryFrom<HashMap<String, String>> for AddHeaders {
    type Error = anyhow::Error;

    fn try_from(value: HashMap<String, String>) -> Result<Self, Self::Error> {
        let mut headers: HeaderMap<HeaderValue> = HeaderMap::new();
        for (header, value) in value.into_iter() {
            headers.insert(
                HeaderName::from_str(header.as_str())?,
                HeaderValue::from_str(value.as_str())?,
            );
        }
        Ok(Self { headers })
    }
}

impl AddHeaders {
    pub fn new(headers: HeaderMap<HeaderValue>) -> Self {
        Self { headers }
    }
    pub fn new_with_one(header: String, value: String) -> anyhow::Result<Self> {
        let mut headers: HeaderMap<HeaderValue> = HeaderMap::new();
        headers.insert(
            HeaderName::from_str(header.as_str())?,
            HeaderValue::from_str(value.as_str())?,
        );
        Ok(Self { headers })
    }
}