use std::collections::BTreeMap; use serde::{Deserialize, Serialize}; use serde_json::Value; use crate::ExecutionError; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] pub struct ExecutionTelemetry { #[serde(default, skip_serializing_if = "Option::is_none")] pub ttfb_ms: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub elapsed_ms: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub upstream_bytes: Option, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] pub struct ResponseBody { #[serde(default, skip_serializing_if = "Option::is_none")] pub json_body: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub body_bytes_b64: Option, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] pub struct ExecutionResult { pub request_id: String, #[serde(default, skip_serializing_if = "Option::is_none")] pub candidate_id: Option, pub status_code: u16, #[serde(default)] pub headers: BTreeMap, #[serde(default, skip_serializing_if = "Option::is_none")] pub body: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub telemetry: Option, #[serde(default, skip_serializing_if = "Option::is_none")] pub error: Option, }