20#include "cc_tools_qt/ToolsMessageBase.h"
21#include "cc_tools_qt/ToolsProtMsgInterface.h"
24#include "comms/field/String.h"
26#include <QtCore/QString>
27#include <QtCore/QJsonObject>
28#include <QtCore/QJsonDocument>
29#include <QtCore/QByteArray>
40template <
typename TFieldBase>
41class ToolsExtraInfoMessageData :
public
44 comms::option::def::HasName
50 comms::option::def::HasName
53 static const char* name()
60 auto& val = Base::value();
65 auto doc = QJsonDocument::fromJson(QByteArray(val.c_str(),
static_cast<int>(val.size())));
66 return doc.isObject();
70template <
typename TMsgBase,
typename...>
71class ToolsExtraInfoMessageImpl :
public
74 comms::option::NoIdImpl,
75 comms::option::FieldsImpl<std::tuple<ToolsExtraInfoMessageData<typename TMsgBase::Field>>>,
76 comms::option::MsgType<ToolsExtraInfoMessageImpl<TMsgBase>>
84template<
typename TBase>
85class ToolsExtraInfoMessage :
public
88 details::ToolsExtraInfoMessageImpl,
89 ToolsExtraInfoMessage<TBase>
95 details::ToolsExtraInfoMessageImpl,
96 ToolsExtraInfoMessage<TBase>
99 using FieldsList =
typename Base::FieldsList;
101 virtual ~ToolsExtraInfoMessage() noexcept = default;
104 virtual const
char* nameImpl()
const override
106 static const char* Str =
"Generic Extra Info Message";
110 virtual void resetImpl()
override
112 [[maybe_unused]]
static constexpr bool Must_not_be_called =
false;
113 assert(Must_not_be_called);
118 [[maybe_unused]]
static constexpr bool Must_not_be_called =
false;
119 assert(Must_not_be_called);
123 virtual FieldsList transportFieldsImpl()
override
128 virtual FieldsList payloadFieldsImpl()
override
130 auto fields = Base::payloadFieldsImpl();
131 for (
auto& f : fields) {
132 f->forceHiddenSerialization();