21#include "cc_tools_qt/ToolsMessageBase.h"
22#include "cc_tools_qt/ToolsProtMsgInterface.h"
25#include "comms/field/String.h"
27#include <QtCore/QString>
28#include <QtCore/QJsonObject>
29#include <QtCore/QJsonDocument>
30#include <QtCore/QByteArray>
42template <
typename TFieldBase>
43class ToolsExtraInfoMessageData :
public
46 comms::option::def::HasName
52 comms::option::def::HasName
55 static const char* name()
62 auto& val = Base::value();
67 auto doc = QJsonDocument::fromJson(QByteArray(val.c_str(),
static_cast<int>(val.size())));
68 return doc.isObject();
72template <
typename TMsgBase,
typename...>
73class ToolsExtraInfoMessageImpl :
public
76 comms::option::NoIdImpl,
77 comms::option::FieldsImpl<std::tuple<ToolsExtraInfoMessageData<typename TMsgBase::Field>>>,
78 comms::option::MsgType<ToolsExtraInfoMessageImpl<TMsgBase>>
86template<
typename TBase>
87class ToolsExtraInfoMessage :
public
90 details::ToolsExtraInfoMessageImpl,
91 ToolsExtraInfoMessage<TBase>
97 details::ToolsExtraInfoMessageImpl,
98 ToolsExtraInfoMessage<TBase>
101 using FieldsList =
typename Base::FieldsList;
103 virtual ~ToolsExtraInfoMessage() noexcept = default;
106 virtual const
char* nameImpl()
const override
108 static const char* Str =
"Generic Extra Info Message";
112 virtual void resetImpl()
override
114 [[maybe_unused]]
static constexpr bool Must_not_be_called =
false;
115 assert(Must_not_be_called);
120 [[maybe_unused]]
static constexpr bool Must_not_be_called =
false;
121 assert(Must_not_be_called);
125 virtual FieldsList transportFieldsImpl()
override
130 virtual FieldsList payloadFieldsImpl()
override
132 auto fields = Base::payloadFieldsImpl();
133 for (
auto& f : fields) {
134 f->forceHiddenSerialization();