1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
/// A helper enum that is passed to the `Client::new` function in /// order to avoid errors on unsupported connection schemes. pub enum Scheme { Http, Https, } impl Scheme { fn as_str(&self) -> &str { match self { Scheme::Http => "http", Scheme::Https => "https", } } } /// A client used to execute queries. It uses a `reqwest::Client` internally /// that manages connections for us. pub struct Client { pub(crate) client: reqwest::Client, pub(crate) base_url: String, } impl Default for Client { /// Create a Client that connects to a local Prometheus instance at port 9090. /// /// ```rust /// use prometheus_http_query::Client; /// /// let client: Client = Default::default(); /// ``` fn default() -> Self { Client { client: reqwest::Client::new(), base_url: String::from("http://127.0.0.1:9090/api/v1"), } } } impl Client { /// Create a Client that connects to a Prometheus instance at the /// given FQDN/domain and port, using either HTTP or HTTPS. /// /// Note that possible errors regarding domain name resolution or /// connection establishment will only be propagated from the underlying /// `reqwest::Client` when a query is executed. /// /// ```rust /// use prometheus_http_query::{Client, Scheme}; /// /// let client = Client::new(Scheme::Http, "localhost", 9090); /// ``` pub fn new(scheme: Scheme, host: &str, port: u16) -> Self { Client { base_url: format!("{}://{}:{}/api/v1", scheme.as_str(), host, port), ..Default::default() } } }