Skip to content

Commit

Permalink
dev: Replace old serialization.
Browse files Browse the repository at this point in the history
  • Loading branch information
cosmin42 committed Oct 6, 2024
1 parent 65f0012 commit d583db5
Show file tree
Hide file tree
Showing 9 changed files with 56 additions and 328 deletions.
66 changes: 0 additions & 66 deletions PB/include/pb/components/SerializationStrategy.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,70 +68,4 @@ deserializeSpecial(Json jsonData, std::string key,
std::vector<Path> defaultValue = std::vector<Path>(),
bool optional = false);

template <SerializationPrimitiveConcept T>
std::variant<Json, PBDev::Error> serialize(int depth, T object)
{
#ifdef _CLANG_UML_
Json json;
#else
Json json = object;
#endif
#ifndef _CLANG_UML_
spdlog::info("{}T {}\n", std::string(depth * 2, ' '), json.dump());
#endif
return json;
}

template <typename T>
std::variant<Json, PBDev::Error>
serialize(int depth, std::pair<std::string, T> const &entry);

template <SerializationPrimitiveConcept T>
std::variant<Json, PBDev::Error>
serialize(int depth, std::pair<std::string, T> const &entry)
{
Json json;
#ifdef _CLANG_UML_
#else
json[entry.first] = entry.second;
#endif
#ifndef _CLANG_UML_
spdlog::info("{}T {}\n", std::string(depth * 2, ' '), json.dump());
#endif
return json;
}

template <typename Head, typename... Tail>
std::variant<Json, PBDev::Error>
serialize(int depth, std::pair<std::string, Head> const &head,
std::pair<std::string, Tail> const &...args)
{
std::variant<Json, PBDev::Error> jsonOrError =
serialize<Tail...>(depth + 1, args...);

if (std::holds_alternative<PBDev::Error>(jsonOrError)) {
return jsonOrError;
}
#ifndef _CLANG_UML_
spdlog::info("{}T {}\n", std::string(depth * 2, ' '),
std::get<Json>(jsonOrError).dump());
#endif
std::variant<Json, PBDev::Error> headJsonOrError =
serialize<Head>(depth + 1, head);

if (std::holds_alternative<PBDev::Error>(headJsonOrError)) {
return headJsonOrError;
}
#ifndef _CLANG_UML_
spdlog::info("{}T {}\n", std::string(depth * 2, ' '),
std::get<Json>(headJsonOrError).dump());
#endif
std::get<Json>(jsonOrError).update(std::get<Json>(headJsonOrError));
#ifndef _CLANG_UML_
spdlog::info("{}T {}\n", std::string(depth * 2, ' '),
std::get<Json>(jsonOrError).dump());
#endif
return jsonOrError;
}

} // namespace PB::Text
19 changes: 12 additions & 7 deletions PB/include/pb/components/Serializer.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,16 @@ template <typename Head, typename... Tail>
std::variant<Json, PBDev::Error>
flatDictionary(int depth, std::tuple<std::string, Head> const &head)
{
Json json;
auto &[tag, object] = head;

std::variant<Json, PBDev::Error> headJsonOrError =
flatAndTagSimple<Head>(depth + 1, tag, object);
flatMaybeContainer<Head>(depth + 1, object);

return headJsonOrError;
}
json[tag] = std::get<Json>(headJsonOrError);

return json;
}

template <typename Head, typename... Tail>
std::variant<Json, PBDev::Error>
Expand All @@ -89,16 +91,19 @@ flatDictionary(int depth, std::tuple<std::string, Head> const &head,
auto &[tag, object] = head;

std::variant<Json, PBDev::Error> headJsonOrError =
flatAndTagSimple<Head>(depth + 1, tag, object);
flatMaybeContainer<Head>(depth + 1, object);

if (std::holds_alternative<PBDev::Error>(headJsonOrError)) {
return headJsonOrError;
}

Json taggedJson;
taggedJson[tag] = std::get<Json>(headJsonOrError);

#ifndef _CLANG_UML_
spdlog::info("{}T {}\n", std::string(depth * 2, ' '),
std::get<Json>(headJsonOrError).dump());
spdlog::info("{}T {}\n", std::string(depth * 2, ' '), taggedJson.dump());
#endif
std::get<Json>(jsonOrError).update(std::get<Json>(headJsonOrError));
std::get<Json>(jsonOrError).update(taggedJson);
#ifndef _CLANG_UML_
spdlog::info("{}T {}\n", std::string(depth * 2, ' '),
std::get<Json>(jsonOrError).dump());
Expand Down
3 changes: 1 addition & 2 deletions PB/include/pb/project/Project.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@ class Project final {
static std::string generateAlbumName(std::function<bool(std::string)>);

PaperSettings paperSettings = OneConfig::A4_LANDSCAPE_PAPER;

std::string name;
std::string name;

~Project() = default;

Expand Down
6 changes: 1 addition & 5 deletions PB/include/pb/services/ProjectSerializerService.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,7 @@ class ProjectSerializerService final {

std::vector<Path> deserializeRoots(Path projectPath);

void
saveProject(std::string projectName, Project project,
std::vector<std::vector<GenericImagePtr>> const &unstagedImages,
std::vector<GenericImagePtr> const &stagedImages,
std::vector<Path> const &roots);
void saveProject(Project project);

private:
std::shared_ptr<PlatformInfo> mPlatformInfo = nullptr;
Expand Down
41 changes: 7 additions & 34 deletions PB/src/ProjectSerializerService.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include <pb/services/ProjectSerializerService.h>

#include <pb/components/SerializationStrategy.h>
#include <pb/components/Serializer.h>

#include <fstream>

Expand Down Expand Up @@ -93,9 +94,8 @@ ProjectSerializerService::deserializeStagedImages(Path projectPath)
PB::Text::deserialize<std::vector<GenericImagePtr>>(
jsonSerialization.at("staged"));

PBDev::basicAssert(
std::holds_alternative<std::vector<GenericImagePtr>>(
stagedImagesOrError));
PBDev::basicAssert(std::holds_alternative<std::vector<GenericImagePtr>>(
stagedImagesOrError));

return std::get<std::vector<GenericImagePtr>>(stagedImagesOrError);
}
Expand All @@ -117,43 +117,16 @@ std::vector<Path> ProjectSerializerService::deserializeRoots(Path projectPath)
return std::vector<Path>();
}

void ProjectSerializerService::saveProject(
std::string projectName, Project project,
std::vector<std::vector<GenericImagePtr>> const &unstagedImages,
std::vector<GenericImagePtr> const &stagedImages,
std::vector<Path> const &roots)
void ProjectSerializerService ::saveProject(Project project)
{
auto projectPath = mPlatformInfo->localStatePath / "projects" /
(projectName + OneConfig::BOOK_EXTENSION);
(project.name + OneConfig::BOOK_EXTENSION);

auto jsonOrError = PB::Text::serialize<PB::Project>(0, {"root", project});
auto jsonOrError = flatSimple<Project>(0, project);

PBDev::basicAssert(std::holds_alternative<Json>(jsonOrError));

auto imageJsonOrError =
PB::Text::serialize<std::vector<std::vector<GenericImagePtr>>>(
0, {"unstaged", unstagedImages});

PBDev::basicAssert(std::holds_alternative<Json>(imageJsonOrError));

std::get<Json>(jsonOrError).update(std::get<Json>(imageJsonOrError));

imageJsonOrError =
PB::Text::serialize<std::vector<GenericImagePtr>>(
0, {"staged", stagedImages});

PBDev::basicAssert(std::holds_alternative<Json>(imageJsonOrError));

std::get<Json>(jsonOrError).update(std::get<Json>(imageJsonOrError));

imageJsonOrError =
PB::Text::serialize<std::vector<Path>>(0, {"row-paths", roots});

PBDev::basicAssert(std::holds_alternative<Json>(imageJsonOrError));

std::get<Json>(jsonOrError).update(std::get<Json>(imageJsonOrError));

// TODO: Separate tis save to an infrastructure class.
saveAsJson(projectPath, std::get<Json>(jsonOrError));
}

} // namespace PB
Loading

0 comments on commit d583db5

Please sign in to comment.