From 3994a7971888fe636c59fc49e2b9b6a12b66c581 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Mon, 7 Nov 2022 16:30:55 -0500 Subject: [PATCH] AK+LibIPC: Add a convenience encoder/decoder for JsonValue This requires that JsonValue is implicitly default-constructible. --- AK/JsonValue.h | 3 ++- Userland/Libraries/LibIPC/Decoder.cpp | 9 +++++++++ Userland/Libraries/LibIPC/Decoder.h | 1 + Userland/Libraries/LibIPC/Encoder.cpp | 8 ++++++++ Userland/Libraries/LibIPC/Encoder.h | 1 + 5 files changed, 21 insertions(+), 1 deletion(-) diff --git a/AK/JsonValue.h b/AK/JsonValue.h index c52d0bb471..3d0f7e3c4a 100644 --- a/AK/JsonValue.h +++ b/AK/JsonValue.h @@ -35,7 +35,8 @@ public: static ErrorOr from_string(StringView); - explicit JsonValue(Type = Type::Null); + JsonValue() = default; + explicit JsonValue(Type); ~JsonValue() { clear(); } JsonValue(JsonValue const&); diff --git a/Userland/Libraries/LibIPC/Decoder.cpp b/Userland/Libraries/LibIPC/Decoder.cpp index 731a5fb669..8e2f25b4e6 100644 --- a/Userland/Libraries/LibIPC/Decoder.cpp +++ b/Userland/Libraries/LibIPC/Decoder.cpp @@ -4,6 +4,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include #include #include @@ -128,6 +129,14 @@ ErrorOr Decoder::decode(ByteBuffer& value) return m_stream.try_handle_any_error(); } +ErrorOr Decoder::decode(JsonValue& value) +{ + String string; + TRY(decode(string)); + value = TRY(JsonValue::from_string(string)); + return {}; +} + ErrorOr Decoder::decode(URL& value) { String string; diff --git a/Userland/Libraries/LibIPC/Decoder.h b/Userland/Libraries/LibIPC/Decoder.h index b938b21063..06115bbbef 100644 --- a/Userland/Libraries/LibIPC/Decoder.h +++ b/Userland/Libraries/LibIPC/Decoder.h @@ -49,6 +49,7 @@ public: ErrorOr decode(double&); ErrorOr decode(String&); ErrorOr decode(ByteBuffer&); + ErrorOr decode(JsonValue&); ErrorOr decode(URL&); ErrorOr decode(Dictionary&); ErrorOr decode(File&); diff --git a/Userland/Libraries/LibIPC/Encoder.cpp b/Userland/Libraries/LibIPC/Encoder.cpp index 64e67b3c2b..132cc8adaa 100644 --- a/Userland/Libraries/LibIPC/Encoder.cpp +++ b/Userland/Libraries/LibIPC/Encoder.cpp @@ -7,6 +7,8 @@ #include #include +#include +#include #include #include #include @@ -159,6 +161,12 @@ Encoder& Encoder::operator<<(ByteBuffer const& value) return *this; } +Encoder& Encoder::operator<<(JsonValue const& value) +{ + *this << value.serialized(); + return *this; +} + Encoder& Encoder::operator<<(URL const& value) { return *this << value.to_string(); diff --git a/Userland/Libraries/LibIPC/Encoder.h b/Userland/Libraries/LibIPC/Encoder.h index c5bbc72bea..5da7b9ac7c 100644 --- a/Userland/Libraries/LibIPC/Encoder.h +++ b/Userland/Libraries/LibIPC/Encoder.h @@ -45,6 +45,7 @@ public: Encoder& operator<<(StringView); Encoder& operator<<(String const&); Encoder& operator<<(ByteBuffer const&); + Encoder& operator<<(JsonValue const&); Encoder& operator<<(URL const&); Encoder& operator<<(Dictionary const&); Encoder& operator<<(File const&);