firecracker_http_client/
metrics.rs1use crate::validation::validate_writable_path;
2use crate::FirecrackerError;
3use async_trait::async_trait;
4use serde::{Deserialize, Serialize};
5use validator::Validate;
6
7#[derive(Debug, Serialize, Deserialize, Validate)]
8pub struct Metrics {
9 #[validate(custom = "validate_writable_path")]
10 pub metrics_path: String,
11}
12
13#[async_trait]
14pub trait MetricsOperations {
15 async fn put_metrics(&self, metrics: &Metrics) -> Result<(), FirecrackerError>;
16}
17
18#[async_trait]
19impl MetricsOperations for crate::FirecrackerClient {
20 async fn put_metrics(&self, metrics: &Metrics) -> Result<(), FirecrackerError> {
21 metrics.validate()?;
22
23 let url = self.url("metrics")?;
24 let response = self.client.put(url).json(metrics).send().await?;
25
26 if !response.status().is_success() {
27 return Err(FirecrackerError::Api {
28 status_code: response.status().as_u16(),
29 message: response.text().await?,
30 });
31 }
32
33 Ok(())
34 }
35}