From 57a589a6e7c3cc2f585662fadb6634459dff217a Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 29 Jun 2019 12:06:26 +0200 Subject: [PATCH] LibGUI: Make it easy to construct a GVariant from a JsonValue. --- LibGUI/GVariant.cpp | 39 ++++++++++++++++++++++++++++++++++++++- LibGUI/GVariant.h | 5 +++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/LibGUI/GVariant.cpp b/LibGUI/GVariant.cpp index 3dfc3d274f..25f2d05667 100644 --- a/LibGUI/GVariant.cpp +++ b/LibGUI/GVariant.cpp @@ -1,3 +1,4 @@ +#include #include const char* to_string(GVariant::Type type) @@ -77,6 +78,42 @@ GVariant::GVariant(const String& value) AK::ref_if_not_null(m_value.as_string); } +GVariant::GVariant(const JsonValue& value) +{ + if (value.is_null()) { + m_value.as_string = nullptr; + return; + } + + if (value.is_int()) { + m_type = Type::Int; + m_value.as_int = value.as_int(); + return; + } + + if (value.is_uint()) { + ASSERT(value.as_uint() < INT32_MAX); + m_type = Type::Int; + m_value.as_int = value.as_uint(); + return; + } + + if (value.is_string()) { + m_type = Type::String; + m_value.as_string = value.as_string().impl(); + m_value.as_string->ref(); + return; + } + + if (value.is_bool()) { + m_type = Type::Bool; + m_value.as_bool = value.as_bool(); + return; + } + + ASSERT_NOT_REACHED(); +} + GVariant::GVariant(const GraphicsBitmap& value) : m_type(Type::Bitmap) { @@ -209,7 +246,7 @@ bool GVariant::operator==(const GVariant& other) const case Type::Rect: return as_rect() == other.as_rect(); case Type::Invalid: - break; + return true; } ASSERT_NOT_REACHED(); } diff --git a/LibGUI/GVariant.h b/LibGUI/GVariant.h index d99c35b006..c7dc60d2de 100644 --- a/LibGUI/GVariant.h +++ b/LibGUI/GVariant.h @@ -4,6 +4,10 @@ #include #include +namespace AK { +class JsonValue; +} + class GVariant { public: GVariant(); @@ -17,6 +21,7 @@ public: GVariant(const Point&); GVariant(const Size&); GVariant(const Rect&); + GVariant(const AK::JsonValue&); GVariant(Color); GVariant(const GVariant&);