prometheus_http_client/
traits.rs1use crate::{Error, PromResponse};
4use reqwest::{Client, Url};
5use serde::{Serialize, de::DeserializeOwned};
6use std::fmt::Debug;
7
8#[async_trait::async_trait]
10pub trait PromRequest: Serialize {
11 const PATH: &str;
13 type Output<KV: Clone + Debug + DeserializeOwned>: Clone + Debug + DeserializeOwned;
15
16 async fn send<KV>(&self, host: &str) -> Result<Self::Output<KV>, Error>
18 where
19 KV: Clone + Debug + DeserializeOwned,
20 {
21 self.send_with_client(&Client::new(), host).await
22 }
23
24 async fn send_with_client<KV>(
26 &self,
27 client: &Client,
28 host: &str,
29 ) -> Result<Self::Output<KV>, Error>
30 where
31 KV: Clone + Debug + DeserializeOwned,
32 {
33 let url = Url::parse(host)?.join(Self::PATH)?;
34
35 let resp: PromResponse<Self::Output<KV>> =
36 client.get(url).query(&self).send().await?.json().await?;
37
38 let data = resp.into_result()?;
39 Ok(data)
40 }
41}