Added new iterator and const_iterator objects to UserList and also implemented the serialization function to write to a JSON file
62 lines
1.7 KiB
C++
62 lines
1.7 KiB
C++
#include "serialization.h"
|
|
#include <filesystem>
|
|
#include <QFile>
|
|
#include <QJsonDocument>
|
|
#include <QJsonArray>
|
|
#include <QJsonObject>
|
|
|
|
UserList loadUserList(const QString &file)
|
|
{
|
|
QFile doc{std::filesystem::path{file.toStdString()}};
|
|
doc.open(QFile::ReadOnly);
|
|
|
|
QString fileContents = doc.readAll();
|
|
|
|
QJsonParseError errors;
|
|
QJsonDocument document =
|
|
QJsonDocument::fromJson(fileContents.toUtf8(),
|
|
&errors);
|
|
|
|
if (document.isNull())
|
|
{
|
|
qDebug() << errors.errorString();
|
|
throw std::runtime_error{"Could not parse JSON file"};
|
|
}
|
|
|
|
QJsonArray array = document.array();
|
|
QVector<User> container;
|
|
|
|
for (QJsonArray::const_iterator elem = array.constBegin(); elem != array.constEnd(); ++elem)
|
|
{
|
|
auto obj = elem->toObject();
|
|
User newUser{obj[NAME_LABEL].toString(), QDate::fromString(obj[DATE_OF_BIRTH_LABEL].toString()),
|
|
QDate::fromString(obj[DATE_OF_DEATH_LABEL].toString()), obj[DEFAULT_LABEL].toBool()};
|
|
|
|
container.append(newUser);
|
|
}
|
|
|
|
return container;
|
|
}
|
|
|
|
void saveUserList(const UserList &list, const QString &file)
|
|
{
|
|
QFile doc{std::filesystem::path{file.toStdString()}};
|
|
doc.open(QFile::WriteOnly);
|
|
|
|
QJsonArray container;
|
|
|
|
for(auto &obj: list)
|
|
{
|
|
QJsonObject newObject;
|
|
newObject[NAME_LABEL] = obj.getName();
|
|
newObject[DATE_OF_BIRTH_LABEL] = obj.getDateOfBirth().toString();
|
|
newObject[DATE_OF_DEATH_LABEL] = obj.getDateOfDeath().toString();
|
|
newObject[DEFAULT_LABEL] = obj.getIsItDefault();
|
|
|
|
container.append(newObject);
|
|
}
|
|
|
|
QJsonDocument document{container};
|
|
doc.write(document.toJson());
|
|
}
|