use serde::{Deserialize, Deserializer};
use std::collections::BTreeMap;
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct RunHookRequest {
pub microvm_id: String,
#[serde(deserialize_with = "deserialize_run_hook_payload")]
pub run_hook_payload: RunHookPayload,
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct RunHookPayload {
pub command: String,
#[serde(default)]
pub args: Vec<String>,
#[serde(default)]
pub environment: BTreeMap<String, String>,
}
fn deserialize_run_hook_payload<'a, T: Deserializer<'a>>(deserializer: T) -> Result<RunHookPayload, T::Error> {
let encoded = String::deserialize(deserializer)?;
serde_json::from_str(&encoded).map_err(serde::de::Error::custom)
}