diff options
Diffstat (limited to 'dev/kernel/NeKit/Json.h')
| -rw-r--r-- | dev/kernel/NeKit/Json.h | 146 |
1 files changed, 0 insertions, 146 deletions
diff --git a/dev/kernel/NeKit/Json.h b/dev/kernel/NeKit/Json.h deleted file mode 100644 index 1e804354..00000000 --- a/dev/kernel/NeKit/Json.h +++ /dev/null @@ -1,146 +0,0 @@ - -/* ======================================== - - Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ - -#pragma once - -/// @brief Kernel JSON API. - -#include <CompilerKit/CompilerKit.h> -#include <NeKit/Defines.h> -#include <NeKit/KString.h> -#include <NeKit/Stream.h> -#include <NeKit/Utils.h> - -#define kNeJsonMaxLen (8196) -#define kNeJsonLen (256) -#define kNeJsonNullArr "[]" -#define kNeJsonNullObj "{}" -#define kNeJsonNullKey "null" -#define kNeJsonNullValue kNeJsonNullKey - -namespace Kernel { -/// ================================================================================ -/// @brief JSON object representation. -/// ================================================================================ -template <typename CharKind = Char> -class JsonObject final { - public: - explicit JsonObject() { - KBasicString<CharKind> key = KString(kNeJsonMaxLen); - key += kNeJsonNullValue; - - this->AsKey() = key; - this->AsValue() = key; - } - - 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<CharKind> fKey; - KBasicString<CharKind> fValue; - - public: - /// @brief returns the key of the json - /// @return the key as string view. - KBasicString<CharKind>& AsKey() { return fKey; } - - /// @brief returns the value of the json. - /// @return the key as string view. - KBasicString<CharKind>& AsValue() { return fValue; } - - STATIC JsonObject<CharKind> kNull; -}; - -/// ================================================================================ -/// @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<Char>{0, 0}; - - start_val = '['; - end_val = ']'; - - probe_value = true; - } - - SizeT len = rt_string_len(full_array); - - SizeT key_len = 0; - SizeT value_len = 0; - - JsonObject<Char> type(kNeJsonMaxLen, kNeJsonMaxLen); - - for (SizeT i = 1; i < len; ++i) { - if (full_array[i] == '\r' || full_array[i] == '\n') continue; - - if (probe_value) { - if (full_array[i] == end_val || full_array[i] == ',') { - probe_value = false; - - ++value_len; - } else { - if (full_array[i] == '\'') { - type.AsValue().Data()[value_len] = 0; - break; - } - - type.AsValue().Data()[value_len] = full_array[i]; - - ++value_len; - } - } else { - if (start_val == '[') continue; - - if (full_array[i] == ':') { - type.AsKey().Data()[key_len] = 0; - ++key_len; - - ++i; - - while (full_array[i] == ' ' || full_array[i] == '\t') ++i; - - probe_value = true; - } else { - type.AsKey().Data()[key_len] = full_array[i]; - - ++key_len; - } - } - } - - type.AsValue().Data()[value_len] = 0; - - return type; - } -}; - -/// ================================================================================ -/// @brief AsciiJsonStream type definition. -/// ================================================================================ -using AsciiJsonStream = Stream<AsciiJsonStreamReader, JsonObject<Char>>; -} // namespace Kernel |
