Skip to content

Commit

Permalink
refactor(WasmStringStream): rapidjson to glaze
Browse files Browse the repository at this point in the history
  • Loading branch information
thewtex committed Jul 8, 2024
1 parent 7da9aee commit 8434277
Showing 1 changed file with 19 additions and 9 deletions.
28 changes: 19 additions & 9 deletions include/itkWasmStringStream.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,21 @@
#define itkWasmStringStream_h

#include "itkWasmDataObject.h"
#include "rapidjson/document.h"
#include <string_view>

#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
Expand Down Expand Up @@ -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<StringStreamJSON>(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});

Expand Down

0 comments on commit 8434277

Please sign in to comment.