grafana 0.1.3

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

use crate::{Error, Result};

pub(crate) fn endpoint(base_url: &Url, segments: &[&str]) -> Result<Url> {
    let mut url = base_url.clone();

    if url.query().is_some() || url.fragment().is_some() {
        return Err(Error::invalid_config(
            "base_url must not include query or fragment",
        ));
    }

    {
        let mut path = url.path_segments_mut().map_err(|_| {
            Error::invalid_config("base_url must be a hierarchical URL (e.g. https://host/)")
        })?;

        path.pop_if_empty();
        for segment in segments {
            path.push(segment);
        }
    }

    Ok(url)
}