summaryrefslogtreecommitdiff
path: root/src/codec-json
diff options
context:
space:
mode:
authorClaudius "keldu" Holeksa <mail@keldu.de>2023-06-05 08:41:27 +0200
committerClaudius "keldu" Holeksa <mail@keldu.de>2023-06-05 08:41:27 +0200
commit07fd10c0584c7f0827dfd3ff8319e4cb174e5973 (patch)
treecfb095c15076fdc7df2a4bf208e3170f96c4dbcb /src/codec-json
parent766120ab30d9dfc1f74e57ea7062f62796e244f3 (diff)
codec-json, c++: Initial ideas for json codec.
Technically We do have to transcode and the language we are transcoding from requires to have some restriction rules as an argument.
Diffstat (limited to 'src/codec-json')
-rw-r--r--src/codec-json/json.h73
1 files changed, 71 insertions, 2 deletions
diff --git a/src/codec-json/json.h b/src/codec-json/json.h
index 2c5b83e..0ba7a2d 100644
--- a/src/codec-json/json.h
+++ b/src/codec-json/json.h
@@ -1,12 +1,81 @@
#pragma once
+#include <forstio/core/buffer.h>
+#include <forstio/core/common.h>
+#include <forstio/codec/data.h>
+
+#include <algorithm>
+
namespace saw {
-namespace encoded {
+namespace encode {
struct Json {};
}
template<typename Schema>
-class codec<Schema, Json> {
+class data<Schema, encode::Json> {
+private:
+ own<buffer> buffer_;
+public:
+ data() = default;
+
+ void reserve(std::size_t i){
+ buffer_.reserve(i);
+ }
+
+ void concat(int8_t c){
+ buffer_.emplace_back(c);
+ }
+
+ std::size_t get_size() const {
+ return buffer_.size();
+ }
+
+ int8_t& at(std::size_t i){
+ return buffer_.at(i);
+ }
+
+ const int8_t& at(std::size_t i) const {
+ return buffer_.at(i);
+ }
+};
+
+/**
+ * Codec class for json
+ */
+template<typename Schema>
+class codec<Schema, encode::Json> {
+public:
+ struct config {
+ size_t depth = 16;
+ size_t length = 1024;
+ };
+private:
+ config cfg_;
+public:
+ /**
+ * Default constructor
+ */
+ config(){}
+
+ /**
+ * Constructor
+ */
+ codec(config cfg__):cfg_{std::move(cfg__)}{}
+
+ SAW_FORBID_COPY(codec);
+ SAW_DEFAULT_MOVE(codec);
+
+ template <typename FromEncoding>
+ ErrorOr<void> encode(const data<Schema, FromEncoding>& from_encode, data<Schema, encode::Json>& to_encode){
+ // To Be encoded
+
+
+ return Void {};
+ }
+ template <typename ToEncoding>
+ ErrorOr<void> decode(const data<Schema, encode::Json>& from_decode, data<Schema, ToEncoding>& to_decode){
+ return Void {};
+ }
};
}