grafana 0.1.3

Ergonomic Rust SDK for Grafana's HTTP API, with async and blocking clients.
Documentation
use std::time::Duration;

use http::{HeaderMap, HeaderName, HeaderValue};

use crate::{Error, Result};

#[derive(Clone, Default)]
pub struct RequestOptions {
    headers: HeaderMap,
    timeout: Option<Duration>,
}

impl RequestOptions {
    pub fn new() -> Self {
        Self::default()
    }

    pub fn header(mut self, name: HeaderName, value: HeaderValue) -> Self {
        self.headers.insert(name, value);
        self
    }

    pub fn try_header(mut self, name: impl AsRef<str>, value: impl AsRef<str>) -> Result<Self> {
        let name = HeaderName::from_bytes(name.as_ref().as_bytes())
            .map_err(|e| Error::invalid_config(format!("invalid header name: {e}")))?;
        let value = HeaderValue::from_str(value.as_ref())
            .map_err(|e| Error::invalid_config(format!("invalid header value: {e}")))?;
        self.headers.insert(name, value);
        Ok(self)
    }

    pub fn timeout(mut self, timeout: Duration) -> Self {
        self.timeout = Some(timeout);
        self
    }

    pub fn headers(&self) -> &HeaderMap {
        &self.headers
    }

    pub fn timeout_override(&self) -> Option<Duration> {
        self.timeout
    }
}