44 ,
created(QDateTime::currentDateTimeUtc())
45 ,
modified(QDateTime::currentDateTimeUtc())
55 json[QLatin1String(
"mna_version")] =
mnaVersion;
56 json[QLatin1String(
"name")] =
name;
58 json[QLatin1String(
"created")] =
created.toString(Qt::ISODate);
59 json[QLatin1String(
"modified")] =
modified.toString(Qt::ISODate);
63 subjArr.append(s.toJson());
65 json[QLatin1String(
"subjects")] = subjArr;
69 pipeArr.append(nd.toJson());
71 json[QLatin1String(
"pipeline")] = pipeArr;
81 proj.
mnaVersion = json[QLatin1String(
"mna_version")].toString();
82 proj.
name = json[QLatin1String(
"name")].toString();
83 proj.
description = json[QLatin1String(
"description")].toString();
84 proj.
created = QDateTime::fromString(json[QLatin1String(
"created")].toString(), Qt::ISODate);
85 proj.
modified = QDateTime::fromString(json[QLatin1String(
"modified")].toString(), Qt::ISODate);
87 const QJsonArray subjArr = json[QLatin1String(
"subjects")].toArray();
88 for(
const QJsonValue& v : subjArr) {
92 const QJsonArray pipeArr = json[QLatin1String(
"pipeline")].toArray();
93 for(
const QJsonValue& v : pipeArr) {
98 static const QSet<QString> knownKeys = {
99 QStringLiteral(
"mna_version"), QStringLiteral(
"name"),
100 QStringLiteral(
"description"), QStringLiteral(
"created"),
101 QStringLiteral(
"modified"), QStringLiteral(
"subjects"),
102 QStringLiteral(
"pipeline")
104 for (
auto it = json.constBegin(); it != json.constEnd(); ++it) {
105 if (!knownKeys.contains(it.key()))
106 proj.
extras.insert(it.key(), it.value());
117 QCborMap cbor = QCborMap::fromJsonObject(
extras);
118 cbor[QLatin1String(
"mna_version")] =
mnaVersion;
119 cbor[QLatin1String(
"name")] =
name;
121 cbor[QLatin1String(
"created")] = QCborValue(
created);
122 cbor[QLatin1String(
"modified")] = QCborValue(
modified);
126 subjArr.append(s.toCbor());
128 cbor[QLatin1String(
"subjects")] = subjArr;
132 pipeArr.append(nd.toCbor());
134 cbor[QLatin1String(
"pipeline")] = pipeArr;
144 proj.
mnaVersion = cbor[QLatin1String(
"mna_version")].toString();
145 proj.
name = cbor[QLatin1String(
"name")].toString();
146 proj.
description = cbor[QLatin1String(
"description")].toString();
147 proj.
created = cbor[QLatin1String(
"created")].toDateTime();
148 proj.
modified = cbor[QLatin1String(
"modified")].toDateTime();
150 const QCborArray subjArr = cbor[QLatin1String(
"subjects")].toArray();
151 for(
const QCborValue& v : subjArr) {
155 const QCborArray pipeArr = cbor[QLatin1String(
"pipeline")].toArray();
156 for(
const QCborValue& v : pipeArr) {
161 static const QSet<QString> knownKeys = {
162 QStringLiteral(
"mna_version"), QStringLiteral(
"name"),
163 QStringLiteral(
"description"), QStringLiteral(
"created"),
164 QStringLiteral(
"modified"), QStringLiteral(
"subjects"),
165 QStringLiteral(
"pipeline")
167 QJsonObject cborJson = cbor.toJsonObject();
168 for (
auto it = cborJson.constBegin(); it != cborJson.constEnd(); ++it) {
169 if (!knownKeys.contains(it.key()))
170 proj.
extras.insert(it.key(), it.value());
Reader and writer for MNA project containers — .mna (JSON, human-editable) and .mnx (CBOR,...
Top-level MNA container binding subjects, processing pipeline, schema version and project metadata.
MNE Analysis Container Format (mna/mnx).
static bool write(const MnaProject &project, const QString &path)
static MnaProject read(const QString &path)
Single executable step in an MNA pipeline graph, with attributes, typed ports, exec mode,...
static MnaNode fromJson(const QJsonObject &json)
static MnaNode fromCbor(const QCborMap &cbor)
QList< MnaSubject > subjects
QJsonObject toJson() const
static bool write(const MnaProject &project, const QString &path)
static MnaProject fromJson(const QJsonObject &json)
static MnaProject read(const QString &path)
static MnaProject fromCbor(const QCborMap &cbor)
static constexpr const char * CURRENT_SCHEMA_VERSION
QList< MnaNode > pipeline
static MnaSubject fromJson(const QJsonObject &json)
static MnaSubject fromCbor(const QCborMap &cbor)