1use serde::{Deserialize, Serialize};
7use std::collections::HashMap;
8use utoipa::ToSchema;
9
10#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
12pub struct AgentRegistrationRequest {
13 pub agent_type: String,
15
16 pub agent_id: String,
18
19 pub agent_data_port: u16,
21
22 pub agent_version: String,
24
25 pub controller_version: String,
27
28 pub capabilities: HashMap<String, serde_json::Value>,
30
31 #[serde(skip_serializing_if = "Option::is_none")]
33 pub agent_ip: Option<String>,
34
35 #[serde(skip_serializing_if = "Option::is_none")]
37 pub metadata: Option<HashMap<String, serde_json::Value>>,
38
39 #[serde(skip_serializing_if = "Option::is_none")]
41 pub chosen_transport: Option<String>,
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
46pub struct TransportConfig {
47 pub transport_type: String,
48 pub enabled: bool,
49 pub ports: HashMap<String, u16>,
50 pub host: String,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
55pub struct AgentRegistrationResponse {
56 pub status: String,
57 pub message: String,
58 pub success: bool,
59
60 #[serde(skip_serializing_if = "Option::is_none")]
61 pub transport: Option<HashMap<String, serde_json::Value>>,
62
63 #[serde(skip_serializing_if = "Option::is_none")]
64 pub rates: Option<HashMap<String, HashMap<String, f64>>>,
65
66 #[serde(skip_serializing_if = "Option::is_none")]
68 pub transports: Option<Vec<TransportConfig>>,
69
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub recommended_transport: Option<String>,
72
73 #[serde(skip_serializing_if = "Option::is_none")]
74 pub shm_paths: Option<HashMap<String, String>>,
75
76 pub cortical_areas: serde_json::Value,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
82pub struct HeartbeatRequest {
83 pub agent_id: String,
84}
85
86#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
88pub struct HeartbeatResponse {
89 pub message: String,
90 pub success: bool,
91}
92
93#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
95pub struct AgentListResponse {
96 #[serde(flatten)]
98 pub agent_ids: Vec<String>,
99}
100
101#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
103pub struct AgentPropertiesResponse {
104 pub agent_name: String,
105 pub agent_type: String,
106 pub agent_ip: String,
107 pub agent_data_port: u16,
108 pub agent_router_address: String,
109 pub agent_version: String,
110 pub controller_version: String,
111 pub capabilities: HashMap<String, serde_json::Value>,
112 #[serde(skip_serializing_if = "Option::is_none")]
113 pub chosen_transport: Option<String>,
114}
115
116#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
118pub struct AgentCapabilitiesSummary {
119 pub agent_name: String,
120 pub capabilities: HashMap<String, serde_json::Value>,
121 #[serde(skip_serializing_if = "Option::is_none")]
122 pub device_registrations: Option<serde_json::Value>,
123}
124
125#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
127pub struct AgentCapabilitiesAllQuery {
128 #[serde(skip_serializing_if = "Option::is_none")]
130 pub agent_type: Option<String>,
131 #[serde(skip_serializing_if = "Option::is_none")]
133 pub capability: Option<String>,
134 #[serde(skip_serializing_if = "Option::is_none")]
136 pub include_device_registrations: Option<bool>,
137}
138
139#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
141pub struct AgentDeregistrationRequest {
142 pub agent_id: String,
143}
144
145#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
147pub struct SuccessResponse {
148 pub message: String,
149 #[serde(skip_serializing_if = "Option::is_none")]
150 pub success: Option<bool>,
151}
152
153#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
155pub struct ManualStimulationRequest {
156 pub stimulation_payload: HashMap<String, Vec<Vec<i32>>>,
158}
159
160#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
162pub struct ManualStimulationResponse {
163 pub success: bool,
164 pub total_coordinates: usize,
165 pub successful_areas: usize,
166 pub failed_areas: Vec<String>,
167 #[serde(skip_serializing_if = "Option::is_none")]
168 pub error: Option<String>,
169}
170
171#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
177pub struct DeviceRegistrationExportResponse {
178 pub device_registrations: serde_json::Value,
181 pub agent_id: String,
183}
184
185#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
190pub struct DeviceRegistrationImportRequest {
191 pub device_registrations: serde_json::Value,
194}
195
196#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
198pub struct DeviceRegistrationImportResponse {
199 pub success: bool,
200 pub message: String,
201 pub agent_id: String,
202}