Skip to content

Commit 7b4f245

Browse files
committed
refactor(WasmStringStream): rapidjson to glaze
1 parent ebf267a commit 7b4f245

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

include/itkWasmStringStream.h

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,21 @@
1919
#define itkWasmStringStream_h
2020

2121
#include "itkWasmDataObject.h"
22-
#include "rapidjson/document.h"
2322
#include <string_view>
2423

2524
#include "WebAssemblyInterfaceExport.h"
2625

26+
#include "glaze/glaze.hpp"
27+
2728
namespace itk
2829
{
30+
31+
struct StringStreamJSON
32+
{
33+
std::string data;
34+
size_t size;
35+
};
36+
2937
/**
3038
*\class WasmStringStream
3139
* \brief JSON representation for a std::stringstream
@@ -74,15 +82,17 @@ class WebAssemblyInterface_EXPORT WasmStringStream : public WasmDataObject
7482
void SetJSON(const char * jsonChar) override
7583
{
7684
std::string json(jsonChar);
77-
rapidjson::Document document;
78-
if (document.Parse(json.c_str()).HasParseError())
79-
{
80-
throw std::runtime_error("Could not parse JSON");
81-
}
82-
const rapidjson::Value & dataJson = document["data"];
83-
const std::string dataString( dataJson.GetString() );
85+
std::string deserialized;
86+
auto deserializedAttempt = glz::read_json<StringStreamJSON>(json);
87+
if (!deserializedAttempt)
88+
{
89+
const std::string descriptiveError = glz::format_error(deserializedAttempt, json);
90+
throw std::runtime_error("Failed to deserialize StringStreamJSON: " + descriptiveError);
91+
}
92+
auto stringStream = deserializedAttempt.value();
93+
const std::string dataString = stringStream.data;
8494
const char * dataPtr = reinterpret_cast< char * >( std::strtoull(dataString.substr(35).c_str(), nullptr, 10) );
85-
size_t size = document["size"].GetInt();
95+
size_t size = stringStream.size;
8696
const std::string_view string(dataPtr, size);
8797
m_StringStream.str(std::string{string});
8898

0 commit comments

Comments
 (0)