21#include "cc_tools_qt/ToolsMessageBase.h"
22#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>
41template <
typename TFieldBase>
42class ToolsExtraInfoMessageData :
public
45 comms::option::def::HasName
51 comms::option::def::HasName
54 static const char* name()
61 auto& val = Base::value();
66 auto doc = QJsonDocument::fromJson(QByteArray(val.c_str(),
static_cast<int>(val.size())));
67 return doc.isObject();
71template <
typename TMsgBase,
typename...>
72class ToolsExtraInfoMessageImpl :
public
75 comms::option::NoIdImpl,
76 comms::option::FieldsImpl<std::tuple<ToolsExtraInfoMessageData<typename TMsgBase::Field>>>,
77 comms::option::MsgType<ToolsExtraInfoMessageImpl<TMsgBase>>
85template<
typename TBase>
86class ToolsExtraInfoMessage :
public
89 details::ToolsExtraInfoMessageImpl,
90 ToolsExtraInfoMessage<TBase>
96 details::ToolsExtraInfoMessageImpl,
97 ToolsExtraInfoMessage<TBase>
100 using FieldsList =
typename Base::FieldsList;
102 virtual ~ToolsExtraInfoMessage() noexcept = default;
105 virtual const
char* nameImpl()
const override
107 static const char* Str =
"Generic Extra Info Message";
111 virtual void resetImpl()
override
113 [[maybe_unused]]
static constexpr bool Must_not_be_called =
false;
114 assert(Must_not_be_called);
119 [[maybe_unused]]
static constexpr bool Must_not_be_called =
false;
120 assert(Must_not_be_called);
124 virtual FieldsList transportFieldsImpl()
override
129 virtual FieldsList payloadFieldsImpl()
override
131 auto fields = Base::payloadFieldsImpl();
132 for (
auto& f : fields) {
133 f->forceHiddenSerialization();