firecracker_http_client/
metrics.rs

1use 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}