Files
qitech-control/server/src/api/ethercat.rs
T
2025-01-21 15:28:10 +01:00

43 lines
1.2 KiB
Rust

use std::sync::Arc;
use axum::{
body::Body,
extract::State,
http::{Response, StatusCode},
};
use serde_json::json;
use crate::app_state::AppState;
use super::util::build_error_response;
#[axum::debug_handler]
pub async fn get_ethercat(State(state): State<Arc<AppState>>) -> Response<Body> {
let maindevice_guard = state.as_ref().maindevice.read().await;
let maindevice = match maindevice_guard.as_ref() {
Some(device) => device,
None => return build_error_response("MainDevice not initialized"),
};
let mut group_guard = state.group.write().await;
let group = match group_guard.as_mut() {
Some(group) => group,
None => return build_error_response("SubDeviceGroup not initialized"),
};
let body = json!({
"devices": (*group).iter(&maindevice).map(|subdevice| {
json!({
"address": subdevice.configured_address(),
"name": subdevice.name(),
})
}).collect::<Vec<_>>()
});
return Response::builder()
.status(StatusCode::OK)
.header("Content-Type", "application/json")
.body(Body::from(serde_json::to_string(&body).unwrap()))
.unwrap();
}