修改 json 序列化
This commit is contained in:
parent
b65eb3e833
commit
1e39c4c50a
@ -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<CoordinatePoint> 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)
|
||||
};
|
||||
Loading…
Reference in New Issue
Block a user