codex_mobile_bridge/bridge_protocol/
helpers.rs1use 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}