LCOV - code coverage report
Current view: top level - muse/framework/global/serialization - json.h Coverage Total Hit
Test: filtered_coverage.info Lines: 100.0 % 2 2
Test Date: 2026-11-05 04:07:02

            Line data    Source code
       1              : /*
       2              :  * SPDX-License-Identifier: GPL-3.0-only
       3              :  * MuseScore-CLA-applies
       4              :  *
       5              :  * MuseScore Studio
       6              :  * Music Composition & Notation
       7              :  *
       8              :  * Copyright (C) 2021 MuseScore Limited and others
       9              :  *
      10              :  * This program is free software: you can redistribute it and/or modify
      11              :  * it under the terms of the GNU General Public License version 3 as
      12              :  * published by the Free Software Foundation.
      13              :  *
      14              :  * This program is distributed in the hope that it will be useful,
      15              :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      16              :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      17              :  * GNU General Public License for more details.
      18              :  *
      19              :  * You should have received a copy of the GNU General Public License
      20              :  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
      21              :  */
      22              : #ifndef MUSE_GLOBAL_JSON_H
      23              : #define MUSE_GLOBAL_JSON_H
      24              : 
      25              : #include <memory>
      26              : 
      27              : #include "../types/bytearray.h"
      28              : #include "../types/string.h"
      29              : #include "../types/val.h"
      30              : 
      31              : namespace muse {
      32              : struct JsonData;
      33              : class JsonArray;
      34              : class JsonObject;
      35              : class JsonValue
      36              : {
      37              : public:
      38              :     JsonValue(bool v);
      39              :     JsonValue(int v);
      40              :     JsonValue(double v);
      41              :     JsonValue(const String& v);
      42              :     JsonValue(const std::string& v);
      43              :     JsonValue(const char* v);
      44              :     JsonValue(const JsonArray& v);
      45              :     JsonValue(const JsonObject& v);
      46              :     JsonValue(std::shared_ptr<JsonData> d = nullptr);
      47              : 
      48              :     bool isNull() const;
      49              :     bool isBool() const;
      50              :     bool isNumber() const;
      51              :     bool isString() const;
      52              :     bool isArray() const;
      53              :     bool isObject() const;
      54              : 
      55              :     bool toBool() const;
      56              :     int toInt() const;
      57              :     double toDouble() const;
      58              :     String toString() const;
      59              :     const std::string& toStdString() const;
      60              :     JsonArray toArray() const;
      61              :     JsonObject toObject() const;
      62              : 
      63              :     Val toVal() const;
      64              :     static JsonValue fromVal(const Val& val);
      65              : 
      66              :     void setNull();
      67              :     JsonValue& operator=(bool v);
      68              :     JsonValue& operator=(int v);
      69              :     JsonValue& operator=(double v);
      70              :     JsonValue& operator=(const String& str);
      71              :     JsonValue& operator=(const std::string& str);
      72              :     JsonValue& operator=(const char* str);
      73              :     JsonValue& operator=(const JsonArray& arr);
      74              :     JsonValue& operator=(const JsonObject& obj);
      75              : 
      76              : private:
      77              :     friend class JsonObject;
      78              :     friend class JsonArray;
      79              : 
      80              :     void detach();
      81              :     std::shared_ptr<JsonData> m_data;
      82              : };
      83              : 
      84              : class JsonValueRef
      85              : {
      86              : public:
      87              :     JsonValueRef(const std::string& key, JsonObject* o);
      88              :     JsonValueRef(size_t i, JsonArray* a);
      89              : 
      90              :     JsonValueRef& operator=(bool v);
      91              :     JsonValueRef& operator=(int v);
      92              :     JsonValueRef& operator=(double v);
      93              :     JsonValueRef& operator=(const String& str);
      94              :     JsonValueRef& operator=(const std::string& str);
      95              :     JsonValueRef& operator=(const char* str);
      96              :     JsonValueRef& operator=(const JsonValue& v);
      97              :     JsonValueRef& operator=(const JsonArray& arr);
      98              :     JsonValueRef& operator=(const JsonObject& obj);
      99              : 
     100              : private:
     101              :     std::string m_key;
     102              :     JsonObject* m_object = nullptr;
     103              : 
     104              :     size_t m_idx = 0;
     105              :     JsonArray* m_array = nullptr;
     106              : };
     107              : 
     108              : class JsonArray
     109              : {
     110              : public:
     111              : 
     112              :     JsonArray(std::shared_ptr<JsonData> d = nullptr);
     113              :     JsonArray(std::initializer_list<JsonValue> args);
     114              : 
     115              :     size_t size() const;
     116              :     void resize(size_t i);
     117              : 
     118              :     bool empty() const;
     119              : 
     120              :     JsonValue at(size_t i) const;
     121              : 
     122              :     JsonArray& set(size_t i, bool v);
     123              :     JsonArray& set(size_t i, int v);
     124              :     JsonArray& set(size_t i, double v);
     125              :     JsonArray& set(size_t i, const String& str);
     126              :     JsonArray& set(size_t i, const std::string& str);
     127              :     JsonArray& set(size_t i, const char* str);
     128              :     JsonArray& set(size_t i, const JsonValue& v);
     129              :     JsonArray& set(size_t i, const JsonArray& v);
     130              :     JsonArray& set(size_t i, const JsonObject& v);
     131              : 
     132              :     JsonArray& append(bool v);
     133              :     JsonArray& append(int v);
     134              :     JsonArray& append(double v);
     135              :     JsonArray& append(const String& str);
     136              :     JsonArray& append(const std::string& str);
     137              :     JsonArray& append(const char* str);
     138              :     JsonArray& append(const JsonValue& v);
     139              :     JsonArray& append(const JsonArray& v);
     140              :     JsonArray& append(const JsonObject& v);
     141              : 
     142           16 :     JsonArray& operator <<(const JsonValue& v) { append(v); return *this; }
     143              :     JsonArray& operator <<(const JsonArray& v) { append(v); return *this; }
     144          636 :     JsonArray& operator <<(const JsonObject& v) { append(v); return *this; }
     145              : 
     146              :     JsonValue operator [](size_t i) const;
     147              :     JsonValueRef operator [](size_t i);
     148              : 
     149              : private:
     150              :     friend class JsonValue;
     151              :     friend class JsonObject;
     152              :     friend class JsonDocument;
     153              : 
     154              :     void detach();
     155              :     std::shared_ptr<JsonData> m_data;
     156              : };
     157              : 
     158              : class JsonObject
     159              : {
     160              : public:
     161              :     JsonObject(std::shared_ptr<JsonData> d = nullptr);
     162              : 
     163              :     bool isValid() const;
     164              : 
     165              :     bool empty() const;
     166              :     size_t size() const;
     167              :     std::vector<std::string> keys() const;
     168              :     bool contains(const std::string& key) const;
     169              :     JsonValue value(const std::string& key, JsonValue def = JsonValue()) const;
     170              : 
     171              :     JsonObject& set(const std::string& key, bool v);
     172              :     JsonObject& set(const std::string& key, int v);
     173              :     JsonObject& set(const std::string& key, double v);
     174              :     JsonObject& set(const std::string& key, const String& str);
     175              :     JsonObject& set(const std::string& key, const std::string& str);
     176              :     JsonObject& set(const std::string& key, const char* str);
     177              :     JsonObject& set(const std::string& key, const JsonValue& v);
     178              :     JsonObject& set(const std::string& key, const JsonArray& v);
     179              :     JsonObject& set(const std::string& key, const JsonObject& v);
     180              : 
     181              :     JsonValue operator [](const std::string& key) const;
     182              :     JsonValueRef operator [](const std::string& key);
     183              : 
     184              : private:
     185              :     friend class JsonValue;
     186              :     friend class JsonArray;
     187              :     friend class JsonDocument;
     188              : 
     189              :     void detach();
     190              :     std::shared_ptr<JsonData> m_data;
     191              : };
     192              : 
     193              : class JsonDocument
     194              : {
     195              : public:
     196              :     JsonDocument(std::shared_ptr<JsonData> d = nullptr);
     197              :     JsonDocument(JsonObject o);
     198              :     JsonDocument(JsonArray a);
     199              : 
     200              :     enum class Format {
     201              :         Indented,
     202              :         Compact
     203              :     };
     204              : 
     205              :     bool isObject() const;
     206              :     bool isArray() const;
     207              :     JsonObject rootObject() const;
     208              :     JsonArray rootArray() const;
     209              : 
     210              :     ByteArray toJson(Format format = Format::Indented) const;
     211              :     static JsonDocument fromJson(const ByteArray& ba, std::string* err = nullptr);
     212              : 
     213              : private:
     214              :     std::shared_ptr<JsonData> m_data;
     215              : };
     216              : }
     217              : 
     218              : #endif // MUSE_GLOBAL_JSON_H
        

Generated by: LCOV version 2.0-1