use anyhow::Result;
use serde::Deserialize;
use serde_json::{Value, json};
use super::envelopes::ServerEnvelope;
use super::runtime::{ApiError, RuntimeSummary};
pub fn error_response(request_id: String, error: ApiError) -> ServerEnvelope {
ServerEnvelope::Response {
request_id,
success: false,
data: None,
error: Some(error),
}
}
pub fn now_millis() -> i64 {
let now = std::time::SystemTime::now();
let since_epoch = now
.duration_since(std::time::UNIX_EPOCH)
.unwrap_or_default();
since_epoch.as_millis() as i64
}
pub fn json_string(value: &Value) -> String {
match value {
Value::String(inner) => inner.clone(),
_ => value.to_string(),
}
}
pub fn require_payload<T: for<'de> Deserialize<'de>>(payload: Value) -> Result<T> {
Ok(serde_json::from_value(payload)?)
}
pub fn status_payload(runtime: &RuntimeSummary) -> Value {
json!({ "runtime": runtime })
}
pub fn runtime_list_payload(runtimes: &[RuntimeSummary]) -> Value {
json!({ "runtimes": runtimes })
}