From 46c896bcd78d31130321562b0659e28230261b8e Mon Sep 17 00:00:00 2001 From: Dylan Date: Sat, 6 Jun 2026 18:05:19 +1200 Subject: feat: Initial commit, json data structure and serializing to json --- src/json.cpp | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/json.cpp (limited to 'src/json.cpp') diff --git a/src/json.cpp b/src/json.cpp new file mode 100644 index 0000000..c11ca6e --- /dev/null +++ b/src/json.cpp @@ -0,0 +1,69 @@ +#include "json.h" + +#include +#include + +namespace TehJSON +{ + JSON::JSON() + :children() + { + } + + JSON::~JSON() + { + } + + std::string JSON::leafType() + { + if(!isLeaf) + throw std::runtime_error("Node is not a leaf!"); + throw std::runtime_error("Not implemented yet"); + } + + std::string JSON::getSerialized() + { + return _getSerialized(0); + } + std::string JSON::_getSerialized(int currIndent) + { + if(isLeaf) + return dataSerializer(data); + + std::string serialized = "{\n"; + + int childrenLeft = childCount(); + for(auto [childName, child]: children) + { + childrenLeft--; + for(int i = 0; i < currIndent + 1; i++) + serialized += '\t'; + serialized += "\"" + childName + "\": "; + serialized += child._getSerialized(currIndent + 1); + if(childrenLeft != 0) + serialized += ','; + serialized += '\n'; + } + for(int i = 0; i < currIndent; i++) + serialized += '\t'; + serialized += "}"; + + return serialized; + } + + JSON& JSON::operator[](std::string name) + { + if(isLeaf) + throw std::runtime_error("Node is a leaf!"); + // if(children.count(name) == 0) + // throw std::out_of_range("Child \"" + name + "\" does not exist"); + return children[name]; + } + + size_t JSON::childCount() + { + if(isLeaf) + throw std::runtime_error("Node is a leaf!"); + return children.size(); + } +} -- cgit v1.2.3