Files
weaseldb/tests/nlohmann_reference_parser.hpp
2025-09-12 11:21:00 -04:00

44 lines
1.5 KiB
C++

#pragma once
#include "commit_request.hpp"
#include <nlohmann/json.hpp>
#include <string>
#include <vector>
/**
* @brief Reference implementation of CommitRequest parser using nlohmann/json.
*
* This parser serves as a reference implementation for testing and validation.
* It implements the same parsing logic as JsonCommitRequestParser but uses
* the well-tested nlohmann/json library for simplicity and correctness.
*/
class NlohmannReferenceParser {
public:
enum class ParseResult { Success, ParseError, ValidationError };
/**
* @brief Parse a JSON string into a CommitRequest.
* @param request The request object to populate
* @param json_str The JSON string to parse
* @return ParseResult indicating success or failure type
*/
ParseResult parse(CommitRequest &request, const std::string &json_str);
/**
* @brief Get the last error message if parsing failed.
* @return Error message string, empty if no error
*/
const std::string &get_error() const { return error_message_; }
private:
std::string error_message_;
bool parse_preconditions(CommitRequest &request,
const nlohmann::json &preconditions_array);
bool parse_operations(CommitRequest &request,
const nlohmann::json &operations_array);
std::string decode_base64(const std::string &base64_str);
Precondition::Type parse_precondition_type(const std::string &type_str);
Operation::Type parse_operation_type(const std::string &type_str);
};