codex-mobile-bridge 0.3.7

Remote bridge and service manager for codex-mobile.
Documentation
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 })
}