Pioneer
Loading...
Searching...
No Matches
JsonUtils.h
Go to the documentation of this file.
1// Copyright © 2008-2023 Pioneer Developers. See AUTHORS.txt for details
2// Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3
4#ifndef _JSON_UTILS_H
5#define _JSON_UTILS_H
6
7#include "Color.h"
8#include "FrameId.h"
9#include "Json.h"
10#include "Quaternion.h"
11#include "RefCounted.h"
12#include "fixed.h"
13#include "matrix3x3.h"
14#include "matrix4x4.h"
15#include "vector3.h"
16
17namespace FileSystem {
18 class FileSource;
19 class FileData;
20} // namespace FileSystem
21
22namespace JsonUtils {
23 // Low-level load JSON from a file descriptor.
25 // Load a JSON file from a path and a file source.
26 Json LoadJsonFile(const std::string &filename, FileSystem::FileSource &source);
27 // Load a JSON file from the game's data sources, optionally applying all
28 // files with the the name <filename>.patch as Json Merge Patch (RFC 7386) files
29 Json LoadJsonDataFile(const std::string &filename, bool with_merge = true);
30 // Loads an optionally-gzipped, optionally-CBOR encoded JSON file from the specified source.
31 Json LoadJsonSaveFile(const std::string &filename, FileSystem::FileSource &source);
32} // namespace JsonUtils
33
34// To-JSON functions. These are called explicitly, and are passed a reference to the object to fill.
35void VectorToJson(Json &jsonObj, const vector2f &vec);
36void VectorToJson(Json &jsonObj, const vector2d &vec);
37void VectorToJson(Json &jsonObj, const vector3f &vec);
38void VectorToJson(Json &jsonObj, const vector3d &vec);
39void QuaternionToJson(Json &jsonObj, const Quaternionf &quat);
40void QuaternionToJson(Json &jsonObj, const Quaterniond &quat);
41void MatrixToJson(Json &jsonObj, const matrix3x3f &mat);
42void MatrixToJson(Json &jsonObj, const matrix3x3d &mat);
43void MatrixToJson(Json &jsonObj, const matrix4x4f &mat);
44void MatrixToJson(Json &jsonObj, const matrix4x4d &mat);
45void ColorToJson(Json &jsonObj, const Color3ub &col);
46void ColorToJson(Json &jsonObj, const Color4ub &col);
47void BinStrToJson(Json &jsonObj, const std::string &str);
48
49// Drivers for automatic serialization of custom types. These are implicitly called by assigning to a Json object.
50template <typename T>
51void to_json(Json &obj, const vector2<T> &vec) { VectorToJson(obj, vec); }
52template <typename T>
53void to_json(Json &obj, const vector3<T> &vec) { VectorToJson(obj, vec); }
54template <typename T>
55void to_json(Json &obj, const Quaternion<T> &vec) { QuaternionToJson(obj, vec); }
56template <typename T>
57void to_json(Json &obj, const matrix3x3<T> &mat) { MatrixToJson(obj, mat); }
58template <typename T>
59void to_json(Json &obj, const matrix4x4<T> &mat) { MatrixToJson(obj, mat); }
60inline void to_json(Json &obj, const Color3ub &col) { ColorToJson(obj, col); }
61inline void to_json(Json &obj, const Color4ub &col) { ColorToJson(obj, col); }
62inline void to_json(Json &obj, const FrameId &t) { obj = t.id(); }
63
64void from_json(const Json &obj, fixed &n);
65void to_json(Json &obj, const fixed &n);
66
67// Parse JSON functions. These functions will throw Json::type_error if passed an invalid type.
68void JsonToVector(vector2f *vec, const Json &jsonObj);
69void JsonToVector(vector2d *vec, const Json &jsonObj);
70void JsonToVector(vector3f *vec, const Json &jsonObj);
71void JsonToVector(vector3d *vec, const Json &jsonObj);
72void JsonToQuaternion(Quaternionf *pQuat, const Json &jsonObj);
73void JsonToQuaternion(Quaterniond *pQuat, const Json &jsonObj);
74void JsonToMatrix(matrix3x3f *pMat, const Json &jsonObj);
75void JsonToMatrix(matrix3x3d *pMat, const Json &jsonObj);
76void JsonToMatrix(matrix4x4f *pMat, const Json &jsonObj);
77void JsonToMatrix(matrix4x4d *pMat, const Json &jsonObj);
78void JsonToColor(Color3ub *pCol, const Json &jsonObj);
79void JsonToColor(Color4ub *pCol, const Json &jsonObj);
80std::string JsonToBinStr(const Json &jsonObj);
81
82template <typename T>
83void from_json(const Json &obj, vector2<T> &vec) { JsonToVector(&vec, obj); }
84template <typename T>
85void from_json(const Json &obj, vector3<T> &vec) { JsonToVector(&vec, obj); }
86template <typename T>
87void from_json(const Json &obj, Quaternion<T> &vec) { JsonToQuaternion(&vec, obj); }
88template <typename T>
89void from_json(const Json &obj, matrix3x3<T> &vec) { JsonToMatrix(&vec, obj); }
90template <typename T>
91void from_json(const Json &obj, matrix4x4<T> &vec) { JsonToMatrix(&vec, obj); }
92inline void from_json(const Json &obj, Color3ub &col) { JsonToColor(&col, obj); }
93inline void from_json(const Json &obj, Color4ub &col) { JsonToColor(&col, obj); }
94inline void from_json(const Json &obj, FrameId &id) { id = (int)obj; }
95
96#endif /* _JSON_UTILS_H */
void JsonToMatrix(matrix3x3f *pMat, const Json &jsonObj)
Definition JsonUtils.cpp:377
void MatrixToJson(Json &jsonObj, const matrix3x3f &mat)
Definition JsonUtils.cpp:172
void JsonToVector(vector2f *vec, const Json &jsonObj)
Definition JsonUtils.cpp:303
std::string JsonToBinStr(const Json &jsonObj)
Definition JsonUtils.cpp:502
void VectorToJson(Json &jsonObj, const vector2f &vec)
Definition JsonUtils.cpp:111
void QuaternionToJson(Json &jsonObj, const Quaternionf &quat)
Definition JsonUtils.cpp:154
void ColorToJson(Json &jsonObj, const Color3ub &col)
Definition JsonUtils.cpp:262
void JsonToColor(Color3ub *pCol, const Json &jsonObj)
Definition JsonUtils.cpp:483
void BinStrToJson(Json &jsonObj, const std::string &str)
Definition JsonUtils.cpp:281
void from_json(const Json &obj, fixed &n)
Definition JsonUtils.cpp:528
void JsonToQuaternion(Quaternionf *pQuat, const Json &jsonObj)
Definition JsonUtils.cpp:349
void to_json(Json &obj, const vector2< T > &vec)
Definition JsonUtils.h:51
nlohmann::json Json
Definition Json.h:8
Definition FileSystem.h:197
Definition RefCounted.h:36
Definition CityOnPlanet.h:27
Definition JsonUtils.cpp:43
Json LoadJsonDataFile(const std::string &filename, bool with_merge)
Definition JsonUtils.cpp:65
Json LoadJsonSaveFile(const std::string &filename, FileSystem::FileSource &source)
Definition JsonUtils.cpp:78
Json LoadJsonFile(const std::string &filename, FileSystem::FileSource &source)
Definition JsonUtils.cpp:60
Json LoadJson(RefCountedPtr< FileSystem::FileData > fd)
Definition JsonUtils.cpp:44
Definition Color.h:167
Definition Color.h:66
Definition FrameId.h:9
constexpr size_t id() const
Definition FrameId.h:23