Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
Schema.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 fuddlesworth
2// SPDX-License-Identifier: LGPL-2.1-or-later
3
4#pragma once
5
6#include <phosphorconfig_export.h>
7
8#include <QJsonObject>
9#include <QMap>
10#include <QMetaType>
11#include <QString>
12#include <QVariant>
13#include <QVector>
14
15#include <functional>
16#include <memory>
17
18namespace PhosphorConfig {
19
20class IGroupPathResolver;
21
35struct PHOSPHORCONFIG_EXPORT ChoiceDef
36{
39 QVariant value;
40
44 QString token;
45};
46
61struct PHOSPHORCONFIG_EXPORT KeyDef
62{
63 QString key;
64 QVariant defaultValue;
65 QMetaType::Type expectedType = QMetaType::UnknownType;
66
75 QString description = {};
76
92 std::function<QVariant(const QVariant& value)> validator = {};
93
105 QVector<ChoiceDef> choices = {};
106};
107
112struct PHOSPHORCONFIG_EXPORT MigrationStep
113{
114 int fromVersion = 0;
115 std::function<void(QJsonObject&)> migrate;
116};
117
126struct PHOSPHORCONFIG_EXPORT Schema
127{
131 int version = 1;
132
137 QString versionKey = QStringLiteral("_version");
138
147 QMap<QString, QVector<KeyDef>> groups;
148
152 QVector<MigrationStep> migrations;
153
156 std::shared_ptr<IGroupPathResolver> pathResolver;
157
160 const KeyDef* findKey(const QString& group, const QString& key) const;
161
164 QVariant defaultFor(const QString& group, const QString& key) const;
165
168 QVector<ChoiceDef> choicesFor(const QString& group, const QString& key) const;
169};
170
171} // namespace PhosphorConfig
Definition IBackend.h:19
One legal value of an enum-style key: the value as stored, plus a stable token naming it.
Definition Schema.h:36
QVariant value
The value as persisted — an int for a C++ enum, a string for a token-valued key.
Definition Schema.h:39
QString token
Stable identifier for this choice, e.g.
Definition Schema.h:44
Declaration for a single configuration key.
Definition Schema.h:62
QVariant defaultValue
Definition Schema.h:64
QString key
Definition Schema.h:63
One step in a schema version migration chain.
Definition Schema.h:113
std::function< void(QJsonObject &)> migrate
Definition Schema.h:115
Declarative description of a configuration store.
Definition Schema.h:127
std::shared_ptr< IGroupPathResolver > pathResolver
Optional per-screen / custom name resolver.
Definition Schema.h:156
QMap< QString, QVector< KeyDef > > groups
Keys grouped by their group name.
Definition Schema.h:147
QVector< MigrationStep > migrations
Ordered migration chain.
Definition Schema.h:152
QVector< ChoiceDef > choicesFor(const QString &group, const QString &key) const
The legal values of a declared key.
const KeyDef * findKey(const QString &group, const QString &key) const
Look up a KeyDef by (group, key).
QVariant defaultFor(const QString &group, const QString &key) const
Convenience: default value for a declared key, or QVariant() if the key is undeclared.