summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/NeKit/Json.h
diff options
context:
space:
mode:
Diffstat (limited to 'dev/kernel/NeKit/Json.h')
-rw-r--r--dev/kernel/NeKit/Json.h51
1 files changed, 34 insertions, 17 deletions
diff --git a/dev/kernel/NeKit/Json.h b/dev/kernel/NeKit/Json.h
index 836a0995..1e804354 100644
--- a/dev/kernel/NeKit/Json.h
+++ b/dev/kernel/NeKit/Json.h
@@ -19,54 +19,68 @@
#define kNeJsonLen (256)
#define kNeJsonNullArr "[]"
#define kNeJsonNullObj "{}"
+#define kNeJsonNullKey "null"
+#define kNeJsonNullValue kNeJsonNullKey
namespace Kernel {
-/// @brief JavaScript object class
+/// ================================================================================
+/// @brief JSON object representation.
+/// ================================================================================
+template <typename CharKind = Char>
class JsonObject final {
public:
explicit JsonObject() {
- auto len = kNeJsonMaxLen;
- KBasicString<> key = KString(len);
- key += kNeJsonNullObj;
+ KBasicString<CharKind> key = KString(kNeJsonMaxLen);
+ key += kNeJsonNullValue;
this->AsKey() = key;
- this->AsValue() = key;
+ this->AsValue() = key;
}
- explicit JsonObject(SizeT lhsLen, SizeT rhsLen) : fKey(lhsLen), fValue(rhsLen) {}
+ explicit JsonObject(SizeT lhsLen, SizeT rhsLen) : fKey(lhsLen), fValue(rhsLen) {
+
+ KBasicString<CharKind> key = KString(lhsLen);
+ this->AsKey() = key;
+
+ KBasicString<CharKind> value = KString(rhsLen);
+ this->AsValue() = value;
+ }
~JsonObject() = default;
NE_COPY_DEFAULT(JsonObject)
+ NE_MOVE_DEFAULT(JsonObject)
Bool& IsUndefined() { return fUndefined; }
private:
Bool fUndefined; // is this instance undefined?
- KBasicString<> fKey;
- KBasicString<> fValue;
+ KBasicString<CharKind> fKey;
+ KBasicString<CharKind> fValue;
public:
/// @brief returns the key of the json
/// @return the key as string view.
- KBasicString<>& AsKey() { return fKey; }
+ KBasicString<CharKind>& AsKey() { return fKey; }
/// @brief returns the value of the json.
/// @return the key as string view.
- KBasicString<>& AsValue() { return fValue; }
+ KBasicString<CharKind>& AsValue() { return fValue; }
- static JsonObject kNull;
+ STATIC JsonObject<CharKind> kNull;
};
-/// @brief JsonObject stream reader helper.
-struct JsonStreamReader final {
- STATIC JsonObject In(const Char* full_array) {
+/// ================================================================================
+/// @brief JsonObject stream reader helper for ASCII.
+/// ================================================================================
+struct AsciiJsonStreamReader final {
+ STATIC JsonObject<Char> In(const Char* full_array) {
auto start_val = '{';
auto end_val = '}';
Boolean probe_value = false;
if (full_array[0] != start_val) {
- if (full_array[0] != '[') return JsonObject::kNull;
+ if (full_array[0] != '[') return JsonObject<Char>{0, 0};
start_val = '[';
end_val = ']';
@@ -79,7 +93,7 @@ struct JsonStreamReader final {
SizeT key_len = 0;
SizeT value_len = 0;
- JsonObject type(kNeJsonMaxLen, kNeJsonMaxLen);
+ JsonObject<Char> type(kNeJsonMaxLen, kNeJsonMaxLen);
for (SizeT i = 1; i < len; ++i) {
if (full_array[i] == '\r' || full_array[i] == '\n') continue;
@@ -125,5 +139,8 @@ struct JsonStreamReader final {
}
};
-using JsonStream = Stream<JsonStreamReader, JsonObject>;
+/// ================================================================================
+/// @brief AsciiJsonStream type definition.
+/// ================================================================================
+using AsciiJsonStream = Stream<AsciiJsonStreamReader, JsonObject<Char>>;
} // namespace Kernel