diff --git a/src/config/SystemConfig.h b/src/config/SystemConfig.h index 4e1b8ed..3b313dc 100644 --- a/src/config/SystemConfig.h +++ b/src/config/SystemConfig.h @@ -6,11 +6,13 @@ class System; // 前向声明 -// 1. 首先定义所有基础结构体 +// 1. 首先定义基础结构体 struct CoordinatePoint { std::string point; double latitude; double longitude; + + NLOHMANN_DEFINE_TYPE_INTRUSIVE(CoordinatePoint, point, latitude, longitude) }; // 2. 定义 SystemConfig 类及其所有嵌套结构体 @@ -18,16 +20,19 @@ class SystemConfig { public: // 嵌套结构体定义 struct Airport { - std::string name; - std::string iata; - std::string icao; - struct ReferencePoint { double latitude; double longitude; + + NLOHMANN_DEFINE_TYPE_INTRUSIVE(ReferencePoint, latitude, longitude) } reference_point; - + + std::string name; + std::string iata; + std::string icao; std::vector coordinate_points; + + NLOHMANN_DEFINE_TYPE_INTRUSIVE(Airport, name, iata, icao, reference_point, coordinate_points) } airport; struct DataSource { @@ -39,6 +44,8 @@ public: int refresh_interval_ms; int timeout_ms; int read_timeout_ms; + + NLOHMANN_DEFINE_TYPE_INTRUSIVE(DataSource, host, port, aircraft_path, vehicle_path, traffic_light_path, refresh_interval_ms, timeout_ms, read_timeout_ms) } data_source; struct WebSocket { @@ -46,11 +53,15 @@ public: int aircraft_interval_ms; int vehicle_interval_ms; int traffic_light_interval_ms; + + NLOHMANN_DEFINE_TYPE_INTRUSIVE(PositionUpdate, aircraft_interval_ms, vehicle_interval_ms, traffic_light_interval_ms) } position_update; uint16_t port; int max_connections; int ping_interval_ms; + + NLOHMANN_DEFINE_TYPE_INTRUSIVE(WebSocket, port, max_connections, ping_interval_ms, position_update) } websocket; struct CollisionDetection { @@ -59,9 +70,13 @@ public: double vehicle_size; double aircraft_size; double min_unmanned_speed; + + NLOHMANN_DEFINE_TYPE_INTRUSIVE(Prediction, time_window, vehicle_size, aircraft_size, min_unmanned_speed) } prediction; int update_interval_ms; + + NLOHMANN_DEFINE_TYPE_INTRUSIVE(CollisionDetection, update_interval_ms, prediction) } collision_detection; struct Logging { @@ -70,17 +85,23 @@ public: int max_size_mb; int max_files; bool console_output; + + NLOHMANN_DEFINE_TYPE_INTRUSIVE(Logging, level, file, max_size_mb, max_files, console_output) } logging; struct Debug { bool enable_mock_data; bool save_raw_data; bool profile_performance; + + NLOHMANN_DEFINE_TYPE_INTRUSIVE(Debug, enable_mock_data, save_raw_data, profile_performance) } debug; struct Warning { int warning_interval_ms; int log_interval_ms; + + NLOHMANN_DEFINE_TYPE_INTRUSIVE(Warning, warning_interval_ms, log_interval_ms) } warning; // 公共方法 @@ -96,21 +117,8 @@ public: friend class System; + NLOHMANN_DEFINE_TYPE_INTRUSIVE(SystemConfig, airport, data_source, websocket, collision_detection, logging, debug, warning) + private: SystemConfig() = default; -}; - -// 3. 最后定义所有 NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE 宏 -// 从最内层的结构开始定义 -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(CoordinatePoint, point, latitude, longitude) -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(SystemConfig::Airport::ReferencePoint, latitude, longitude) -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(SystemConfig::WebSocket::PositionUpdate, aircraft_interval_ms, vehicle_interval_ms, traffic_light_interval_ms) -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(SystemConfig::CollisionDetection::Prediction, time_window, vehicle_size, aircraft_size, min_unmanned_speed) -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(SystemConfig::Airport, name, iata, icao, reference_point, coordinate_points) -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(SystemConfig::WebSocket, port, max_connections, ping_interval_ms, position_update) -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(SystemConfig::CollisionDetection, update_interval_ms, prediction) -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(SystemConfig::DataSource, host, port, aircraft_path, vehicle_path, traffic_light_path, refresh_interval_ms, timeout_ms, read_timeout_ms) -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(SystemConfig::Logging, level, file, max_size_mb, max_files, console_output) -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(SystemConfig::Debug, enable_mock_data, save_raw_data, profile_performance) -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(SystemConfig::Warning, warning_interval_ms, log_interval_ms) -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(SystemConfig, airport, data_source, websocket, collision_detection, logging, debug, warning) \ No newline at end of file +}; \ No newline at end of file