소스 검색

LibGUI: Make it easy to construct a GVariant from a JsonValue.

Andreas Kling 6 년 전
부모
커밋
57a589a6e7
2개의 변경된 파일43개의 추가작업 그리고 1개의 파일을 삭제
  1. 38 1
      LibGUI/GVariant.cpp
  2. 5 0
      LibGUI/GVariant.h

+ 38 - 1
LibGUI/GVariant.cpp

@@ -1,3 +1,4 @@
+#include <AK/JsonValue.h>
 #include <LibGUI/GVariant.h>
 
 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();
 }

+ 5 - 0
LibGUI/GVariant.h

@@ -4,6 +4,10 @@
 #include <LibGUI/GIcon.h>
 #include <SharedGraphics/GraphicsBitmap.h>
 
+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&);