utils.h Example FileΒΆ
<@comment>// Copyright (C) 2022 The Qt Company Ltd.</@comment> <@comment>// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause</@comment> <@preprocessor>#ifndef UTILS_H</@preprocessor> <@preprocessor>#define UTILS_H</@preprocessor> <@preprocessor>#include "types.h"</@preprocessor> <@preprocessor>#include <QtCore/QFile></@preprocessor> <@preprocessor>#include <QtCore/QJsonArray></@preprocessor> <@preprocessor>#include <QtCore/QJsonObject></@preprocessor> <@preprocessor>#include <QtCore/QList></@preprocessor> <@preprocessor>#include <QtCore/QPair></@preprocessor> <@preprocessor>#include <QtHttpServer/QtHttpServer></@preprocessor> <@preprocessor>#include <optional></@preprocessor> <@keyword>static</@keyword> std<@op>::</@op>optional<@op><</@op><@type>QByteArray</@type><@op>></@op> readFileToByteArray(<@keyword>const</@keyword> <@type>QString</@type> <@op>&</@op>path) { <@type>QFile</@type> file(path); <@keyword>if</@keyword> (<@op>!</@op>file<@op>.</@op>open(<@type>QIODevice</@type><@op>::</@op>ReadOnly <@op>|</@op> <@type>QIODevice</@type><@op>::</@op>Text)) <@keyword>return</@keyword> std<@op>::</@op>nullopt; <@keyword>return</@keyword> file<@op>.</@op>readAll(); } <@keyword>static</@keyword> std<@op>::</@op>optional<@op><</@op><@type>QJsonArray</@type><@op>></@op> byteArrayToJsonArray(<@keyword>const</@keyword> <@type>QByteArray</@type> <@op>&</@op>arr) { <@type>QJsonParseError</@type> err; <@keyword>const</@keyword> <@keyword>auto</@keyword> json <@op>=</@op> <@type>QJsonDocument</@type><@op>::</@op>fromJson(arr<@op>,</@op> <@op>&</@op>err); <@keyword>if</@keyword> (err<@op>.</@op>error <@op>|</@op><@op>|</@op> <@op>!</@op>json<@op>.</@op>isArray()) <@keyword>return</@keyword> std<@op>::</@op>nullopt; <@keyword>return</@keyword> json<@op>.</@op>array(); } <@keyword>static</@keyword> std<@op>::</@op>optional<@op><</@op><@type>QJsonObject</@type><@op>></@op> byteArrayToJsonObject(<@keyword>const</@keyword> <@type>QByteArray</@type> <@op>&</@op>arr) { <@type>QJsonParseError</@type> err; <@keyword>const</@keyword> <@keyword>auto</@keyword> json <@op>=</@op> <@type>QJsonDocument</@type><@op>::</@op>fromJson(arr<@op>,</@op> <@op>&</@op>err); <@keyword>if</@keyword> (err<@op>.</@op>error <@op>|</@op><@op>|</@op> <@op>!</@op>json<@op>.</@op>isObject()) <@keyword>return</@keyword> std<@op>::</@op>nullopt; <@keyword>return</@keyword> json<@op>.</@op>object(); } <@keyword>template</@keyword><@op><</@op><@keyword>typename</@keyword> T<@op>></@op> <@keyword>static</@keyword> IdMap<@op><</@op>T<@op>></@op> tryLoadFromFile(<@keyword>const</@keyword> FromJsonFactory<@op><</@op>T<@op>></@op> <@op>&</@op>itemFactory<@op>,</@op> <@keyword>const</@keyword> <@type>QString</@type> <@op>&</@op>path) { <@keyword>const</@keyword> <@keyword>auto</@keyword> maybeBytes <@op>=</@op> readFileToByteArray(path); <@keyword>if</@keyword> (maybeBytes) { <@keyword>const</@keyword> <@keyword>auto</@keyword> maybeArray <@op>=</@op> byteArrayToJsonArray(<@op>*</@op>maybeBytes); <@keyword>if</@keyword> (maybeArray) { <@keyword>return</@keyword> IdMap<@op><</@op>T<@op>></@op>(itemFactory<@op>,</@op> <@op>*</@op>maybeArray); } <@keyword>else</@keyword> { <@func target="qDebug()">qDebug</@func>() <@op><</@op><@op><</@op> <@string>"Content of "</@string> <@op><</@op><@op><</@op> path <@op><</@op><@op><</@op> <@string>" is not json array."</@string>; } } <@keyword>else</@keyword> { <@func target="qDebug()">qDebug</@func>() <@op><</@op><@op><</@op> <@string>"Reading file "</@string> <@op><</@op><@op><</@op> path <@op><</@op><@op><</@op> <@string>" failed."</@string>; } <@keyword>return</@keyword> IdMap<@op><</@op>T<@op>></@op>(); } <@keyword>static</@keyword> <@type>QByteArray</@type> getValueFromHeader(<@keyword>const</@keyword> <@type>QHttpHeaders</@type> <@op>&</@op>headers<@op>,</@op> <@type>QByteArrayView</@type> headerName) { <@keyword>return</@keyword> headers<@op>.</@op>value(headerName)<@op>.</@op>toByteArray(); } <@keyword>static</@keyword> std<@op>::</@op>optional<@op><</@op><@type>QString</@type><@op>></@op> getTokenFromRequest(<@keyword>const</@keyword> <@type>QHttpServerRequest</@type> <@op>&</@op>request) { std<@op>::</@op>optional<@op><</@op><@type>QString</@type><@op>></@op> token; <@keyword>if</@keyword> (<@keyword>auto</@keyword> bytes <@op>=</@op> getValueFromHeader(request<@op>.</@op>headers()<@op>,</@op> <@string>"token"</@string>); <@op>!</@op>bytes<@op>.</@op>isEmpty()) { token <@op>=</@op> bytes; } <@keyword>return</@keyword> token; } <@preprocessor>#endif // UTILS_H</@preprocessor>