6#include <phosphorconfig_export.h>
10#include <QJsonDocument>
12#include <QJsonParseError>
44 virtual QString
readString(
const QString& key,
const QString& defaultValue = {})
const = 0;
45 virtual int readInt(
const QString& key,
int defaultValue = 0)
const = 0;
46 virtual bool readBool(
const QString& key,
bool defaultValue =
false)
const = 0;
47 virtual double readDouble(
const QString& key,
double defaultValue = 0.0)
const = 0;
48 virtual QColor
readColor(
const QString& key,
const QColor& defaultValue = {})
const = 0;
56 virtual void writeString(
const QString& key,
const QString& value) = 0;
57 virtual void writeInt(
const QString& key,
int value) = 0;
58 virtual void writeBool(
const QString& key,
bool value) = 0;
59 virtual void writeDouble(
const QString& key,
double value) = 0;
60 virtual void writeColor(
const QString& key,
const QColor& value) = 0;
72 virtual void writeJson(
const QString& key,
const QJsonValue& value)
79 if (value.isArray()) {
80 writeString(key, QString::fromUtf8(QJsonDocument(value.toArray()).toJson(QJsonDocument::Compact)));
83 if (value.isObject()) {
84 writeString(key, QString::fromUtf8(QJsonDocument(value.toObject()).toJson(QJsonDocument::Compact)));
88 wrapped.append(value);
89 const QByteArray raw = QJsonDocument(wrapped).toJson(QJsonDocument::Compact);
90 writeString(key, QString::fromUtf8(raw.mid(1, raw.size() - 2)));
101 virtual QJsonValue
readJson(
const QString& key,
const QJsonValue& defaultValue = {})
const
106 const QString raw = readString(key);
108 const QByteArray wrapped = QByteArray(
"[") + raw.toUtf8() + QByteArray(
"]");
110 const QJsonDocument doc = QJsonDocument::fromJson(wrapped, &err);
111 if (err.error != QJsonParseError::NoError) {
114 const QJsonArray arr = doc.array();
115 if (arr.size() != 1) {
122 virtual bool hasKey(
const QString& key)
const = 0;
156 virtual std::unique_ptr<IGroup>
group(
const QString& name) = 0;
172 virtual QString
readRootString(
const QString& key,
const QString& defaultValue = {})
const = 0;
Pluggable configuration backend.
Definition IBackend.h:150
virtual void setVersionStamp(const QString &, int)
Install a "stamp on first sync" version annotation: if key is absent from the backend's root on the n...
Definition IBackend.h:208
virtual ~IBackend()=default
virtual bool sync()=0
Flush pending writes to disk.
virtual void removeRootKey(const QString &key)=0
virtual bool applyMigration(const Schema &)
Apply schema's migration chain against the backend's in-memory state and commit any resulting version...
Definition IBackend.h:226
virtual std::pair< QString, int > versionStamp() const
Currently-installed version stamp as {key, version}.
Definition IBackend.h:214
virtual void deleteGroup(const QString &name)=0
Delete an entire group and everything inside it.
virtual std::unique_ptr< IGroup > group(const QString &name)=0
Return a scoped view into the named group.
IBackend(const IBackend &)=delete
virtual void writeRootString(const QString &key, const QString &value)=0
IBackend & operator=(const IBackend &)=delete
virtual QString readRootString(const QString &key, const QString &defaultValue={}) const =0
Read/write ungrouped (root-level) keys.
virtual void reparseConfiguration()=0
Re-read configuration from disk, discarding any pending in-memory changes.
virtual void setPathResolver(std::shared_ptr< IGroupPathResolver >)
Install a group-path resolver.
Definition IBackend.h:194
virtual QStringList groupList() const =0
Enumerate every top-level group name.
virtual std::shared_ptr< IGroupPathResolver > pathResolver() const
Currently-installed resolver, or nullptr when none is set (also the default for backends that ignore ...
Definition IBackend.h:199
Optional plug-in for custom group name semantics.
Definition IGroupPathResolver.h:30
Scoped view into a single configuration group.
Definition IBackend.h:38
virtual ~IGroup()=default
virtual QStringList keyList() const =0
Enumerate scalar leaf keys directly under this group.
virtual bool readBool(const QString &key, bool defaultValue=false) const =0
IGroup(const IGroup &)=delete
virtual QJsonValue readJson(const QString &key, const QJsonValue &defaultValue={}) const
Read a structured JSON value.
Definition IBackend.h:101
virtual void writeColor(const QString &key, const QColor &value)=0
virtual QString readString(const QString &key, const QString &defaultValue={}) const =0
virtual int readInt(const QString &key, int defaultValue=0) const =0
virtual void writeJson(const QString &key, const QJsonValue &value)
Write a structured JSON value (array/object/scalar) natively where supported, or as a compact-JSON st...
Definition IBackend.h:72
virtual QColor readColor(const QString &key, const QColor &defaultValue={}) const =0
virtual void deleteKey(const QString &key)=0
virtual void writeBool(const QString &key, bool value)=0
virtual void writeString(const QString &key, const QString &value)=0
Write a string.
virtual double readDouble(const QString &key, double defaultValue=0.0) const =0
virtual void writeDouble(const QString &key, double value)=0
IGroup & operator=(const IGroup &)=delete
virtual bool hasKey(const QString &key) const =0
virtual void writeInt(const QString &key, int value)=0
Declarative description of a configuration store.
Definition Schema.h:89