firecracker_http_client/
machine.rs

1use crate::models::MachineConfig;
2use crate::FirecrackerError;
3use async_trait::async_trait;
4
5#[async_trait]
6pub trait MachineConfigOperations {
7    async fn get_machine_config(&self) -> Result<MachineConfig, FirecrackerError>;
8    async fn put_machine_config(&self, config: &MachineConfig) -> Result<(), FirecrackerError>;
9    async fn patch_machine_config(&self, config: &MachineConfig) -> Result<(), FirecrackerError>;
10}
11
12#[async_trait]
13impl MachineConfigOperations for crate::FirecrackerClient {
14    async fn get_machine_config(&self) -> Result<MachineConfig, FirecrackerError> {
15        let url = self.url("machine-config")?;
16        let response = self.client.get(url).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(response.json().await?)
26    }
27
28    async fn put_machine_config(&self, config: &MachineConfig) -> Result<(), FirecrackerError> {
29        let url = self.url("machine-config")?;
30        let response = self.client.put(url).json(config).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 patch_machine_config(&self, config: &MachineConfig) -> Result<(), FirecrackerError> {
43        let url = self.url("machine-config")?;
44        let response = self.client.patch(url).json(config).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(())
54    }
55}