Skip to main content

codex_mobile_bridge/bridge_protocol/
helpers.rs

1use anyhow::Result;
2use serde::Deserialize;
3use serde_json::{Value, json};
4
5use super::envelopes::ServerEnvelope;
6use super::runtime::{ApiError, RuntimeSummary};
7
8pub fn error_response(request_id: String, error: ApiError) -> ServerEnvelope {
9    ServerEnvelope::Response {
10        request_id,
11        success: false,
12        data: None,
13        error: Some(error),
14    }
15}
16
17pub fn now_millis() -> i64 {
18    let now = std::time::SystemTime::now();
19    let since_epoch = now
20        .duration_since(std::time::UNIX_EPOCH)
21        .unwrap_or_default();
22    since_epoch.as_millis() as i64
23}
24
25pub fn json_string(value: &Value) -> String {
26    match value {
27        Value::String(inner) => inner.clone(),
28        _ => value.to_string(),
29    }
30}
31
32pub fn require_payload<T: for<'de> Deserialize<'de>>(payload: Value) -> Result<T> {
33    Ok(serde_json::from_value(payload)?)
34}
35
36pub fn status_payload(runtime: &RuntimeSummary) -> Value {
37    json!({ "runtime": runtime })
38}
39
40pub fn runtime_list_payload(runtimes: &[RuntimeSummary]) -> Value {
41    json!({ "runtimes": runtimes })
42}