use std::sync::atomic::Ordering;
use axum::{Json, extract::State};
use serde::Serialize;
use crate::{models::DeviceInfo, state::AppState};
#[derive(Serialize)]
pub struct DeviceSummary {
pub id: String,
pub mac: Option<String>,
pub port_path: String,
pub baud_rate: u32,
pub serial_connected: bool,
pub collection_running: bool,
pub firmware_verified: bool,
pub device_info: Option<DeviceInfo>,
pub fault: Option<String>,
}
pub async fn list_devices(State(state): State<AppState>) -> Json<Vec<DeviceSummary>> {
let mut out = Vec::new();
for dev in state.devices.snapshot() {
out.push(DeviceSummary {
id: dev.id.clone(),
mac: dev.mac.clone(),
port_path: dev.port_path.clone(),
baud_rate: dev.baud_rate,
serial_connected: dev.serial_connected.load(Ordering::SeqCst),
collection_running: dev.collection_running.load(Ordering::SeqCst),
firmware_verified: dev.firmware_verified.load(Ordering::SeqCst),
device_info: dev.device_info.lock().await.clone(),
fault: dev.fault.lock().await.clone(),
});
}
Json(out)
}