firecracker_http_client/
mmds.rs

1use crate::FirecrackerError;
2use async_trait::async_trait;
3use serde_json::Value;
4
5#[async_trait]
6pub trait MmdsOperations {
7    async fn put_mmds(&self, data: Value) -> Result<(), FirecrackerError>;
8    async fn patch_mmds(&self, data: Value) -> Result<(), FirecrackerError>;
9    async fn get_mmds(&self) -> Result<Value, FirecrackerError>;
10}
11
12#[async_trait]
13impl MmdsOperations for crate::FirecrackerClient {
14    async fn put_mmds(&self, data: Value) -> Result<(), FirecrackerError> {
15        let url = self.url("mmds")?;
16        let response = self.client.put(url).json(&data).send().await?;
17
18        if !response.status().is_success() {
19            return Err(FirecrackerError::Api {
20                status_code: response.status().as_u16(),
21                message: response.text().await?,
22            });
23        }
24
25        Ok(())
26    }
27
28    async fn patch_mmds(&self, data: Value) -> Result<(), FirecrackerError> {
29        let url = self.url("mmds")?;
30        let response = self.client.patch(url).json(&data).send().await?;
31
32        if !response.status().is_success() {
33            return Err(FirecrackerError::Api {
34                status_code: response.status().as_u16(),
35                message: response.text().await?,
36            });
37        }
38
39        Ok(())
40    }
41
42    async fn get_mmds(&self) -> Result<Value, FirecrackerError> {
43        let url = self.url("mmds")?;
44        let response = self.client.get(url).send().await?;
45
46        if !response.status().is_success() {
47            return Err(FirecrackerError::Api {
48                status_code: response.status().as_u16(),
49                message: response.text().await?,
50            });
51        }
52
53        Ok(response.json().await?)
54    }
55}