Skip to main content

lambda_microvm_hook_server/
request.rs

1use serde::{Deserialize, Deserializer};
2use std::collections::BTreeMap;
3
4#[derive(Debug, Deserialize)]
5#[serde(rename_all = "camelCase", deny_unknown_fields)]
6pub struct RunHookRequest {
7    pub microvm_id: String,
8    #[serde(deserialize_with = "deserialize_run_hook_payload")]
9    pub run_hook_payload: RunHookPayload,
10}
11
12#[derive(Debug, Deserialize)]
13#[serde(rename_all = "camelCase", deny_unknown_fields)]
14pub struct RunHookPayload {
15    pub command: String,
16    #[serde(default)]
17    pub args: Vec<String>,
18    #[serde(default)]
19    pub environment: BTreeMap<String, String>,
20}
21
22fn deserialize_run_hook_payload<'a, T: Deserializer<'a>>(deserializer: T) -> Result<RunHookPayload, T::Error> {
23    let encoded = String::deserialize(deserializer)?;
24    serde_json::from_str(&encoded).map_err(serde::de::Error::custom)
25}