// // Created by Johnathon Slightham on 2025-06-30. // #include "SensorMessageBuilder.h" #include "SerializedMessage.h" #include "Variant.h" #include "flatbuffers_generated/SensorMessage_generated.h" namespace Flatbuffers { SerializedMessage SensorMessageBuilder::build_sensor_message(std::vector &values) { builder_.Clear(); std::vector> values_vec; std::vector sensor_values_vec; for (const auto &v : values) { std::visit( overloaded{ [&](target_angle a) { values_vec.push_back(Messaging::CreateTargetAngle(builder_, a.angle).Union()); sensor_values_vec.push_back(Messaging::SensorValue_TargetAngle); }, [&](current_angle a) { values_vec.push_back(Messaging::CreateCurrentAngle(builder_, a.angle).Union()); sensor_values_vec.push_back(Messaging::SensorValue_CurrentAngle); }, [&](target_text t) { auto text_offset = builder_.CreateString(t.text); values_vec.push_back(Messaging::CreateCurrentText(builder_, text_offset).Union()); sensor_values_vec.push_back(Messaging::SensorValue_CurrentText); }, [&](distance d) { values_vec.push_back(Messaging::CreateDistance(builder_, d.distance).Union()); sensor_values_vec.push_back(Messaging::SensorValue_Distance); }, [&](temperature t) { values_vec.push_back(Messaging::CreateTemperature(builder_, t.temperature).Union()); sensor_values_vec.push_back(Messaging::SensorValue_Temperature); }, [&](position p) { values_vec.push_back(Messaging::CreatePosition(builder_, p.heading, p.pitch, p.roll).Union()); sensor_values_vec.push_back(Messaging::SensorValue_Temperature); } }, v); } auto values_fb_vec = builder_.CreateVector(values_vec); const auto values_type_fb_vec = builder_.CreateVector(sensor_values_vec); const auto message = Messaging::CreateSensorMessage(builder_, values_type_fb_vec, values_fb_vec); builder_.Finish(message); return {builder_.GetBufferPointer(), builder_.GetSize()}; } } // namespace Flatbuffers