diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-05-23 04:07:12 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-05-23 04:07:12 +0200 |
| commit | fc67c4af554189c941c811486a0b2b21aa3f54ea (patch) | |
| tree | ddc7677c3bb1072c9b9fb85618b75c8ee172b377 /dev/kernel/NewKit/Json.h | |
| parent | fbd1f65a2cd30b3b4ed3da236398ddcfc437ac47 (diff) | |
feat!(kernel): Rename NewKit to NeKit.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/NewKit/Json.h')
| -rw-r--r-- | dev/kernel/NewKit/Json.h | 129 |
1 files changed, 0 insertions, 129 deletions
diff --git a/dev/kernel/NewKit/Json.h b/dev/kernel/NewKit/Json.h deleted file mode 100644 index 6af71b72..00000000 --- a/dev/kernel/NewKit/Json.h +++ /dev/null @@ -1,129 +0,0 @@ - -/* ------------------------------------------- - - Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. - -------------------------------------------- */ - -#pragma once - -// last-rev: 02/04/25 - -#include <CompilerKit/CompilerKit.h> -#include <NewKit/Defines.h> -#include <NewKit/KString.h> -#include <NewKit/Stream.h> -#include <NewKit/Utils.h> - -#define kJSONMaxLen (8196) -#define kJSONLen (256) -#define kJSONNullArr "[]" -#define kJSONNullObj "{}" - -namespace Kernel { -/// @brief JavaScript object class -class Json final { - public: - explicit Json() { - auto len = kJSONMaxLen; - KString key = KString(len); - key += kJSONNullObj; - - this->AsKey() = key; - this->AsValue() = key; - } - - explicit Json(SizeT lhsLen, SizeT rhsLen) : fKey(lhsLen), fValue(rhsLen) {} - - ~Json() = default; - - NE_COPY_DEFAULT(Json) - - Bool& IsUndefined() { return fUndefined; } - - private: - Bool fUndefined; // is this instance undefined? - KString fKey; - KString fValue; - - public: - /// @brief returns the key of the json - /// @return the key as string view. - KString& AsKey() { return fKey; } - - /// @brief returns the value of the json. - /// @return the key as string view. - KString& AsValue() { return fValue; } - - static Json kNull; -}; - -/// @brief Json stream reader helper. -struct JsonStreamReader final { - STATIC Json 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 Json::kNull; - - start_val = '['; - end_val = ']'; - - probe_value = true; - } - - SizeT len = rt_string_len(full_array); - - SizeT key_len = 0; - SizeT value_len = 0; - - Json type(kJSONMaxLen, kJSONMaxLen); - - 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; - } -}; - -using JsonStream = Stream<JsonStreamReader, Json>; -} // namespace Kernel |
