From 843427703dc7bae031f017b71e21b3f01db0ce53 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Sun, 7 Jul 2024 22:34:30 -0400 Subject: [PATCH] refactor(WasmStringStream): rapidjson to glaze --- include/itkWasmStringStream.h | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/include/itkWasmStringStream.h b/include/itkWasmStringStream.h index 9489f642f..396f9fe46 100644 --- a/include/itkWasmStringStream.h +++ b/include/itkWasmStringStream.h @@ -19,13 +19,21 @@ #define itkWasmStringStream_h #include "itkWasmDataObject.h" -#include "rapidjson/document.h" #include #include "WebAssemblyInterfaceExport.h" +#include "glaze/glaze.hpp" + namespace itk { + +struct StringStreamJSON +{ + std::string data; + size_t size; +}; + /** *\class WasmStringStream * \brief JSON representation for a std::stringstream @@ -74,15 +82,17 @@ class WebAssemblyInterface_EXPORT WasmStringStream : public WasmDataObject void SetJSON(const char * jsonChar) override { std::string json(jsonChar); - rapidjson::Document document; - if (document.Parse(json.c_str()).HasParseError()) - { - throw std::runtime_error("Could not parse JSON"); - } - const rapidjson::Value & dataJson = document["data"]; - const std::string dataString( dataJson.GetString() ); + std::string deserialized; + auto deserializedAttempt = glz::read_json(json); + if (!deserializedAttempt) + { + const std::string descriptiveError = glz::format_error(deserializedAttempt, json); + throw std::runtime_error("Failed to deserialize StringStreamJSON: " + descriptiveError); + } + auto stringStream = deserializedAttempt.value(); + const std::string dataString = stringStream.data; const char * dataPtr = reinterpret_cast< char * >( std::strtoull(dataString.substr(35).c_str(), nullptr, 10) ); - size_t size = document["size"].GetInt(); + size_t size = stringStream.size; const std::string_view string(dataPtr, size); m_StringStream.str(std::string{string});