Files
openapi-generator/samples/server/petstore/cpp-httplib-server/feature-test/models/PaymentMethod.h
vasireddyrajesh b96334ffad Add standalone C++ server using cpp-httplib for OpenAPI-based APIs (#21724)
Supports:
All OpenAPI 3.x data types: primitives, arrays, enums, nullable/optional fields, nested objects
All parameter types: path, query, header, cookie, and combinations
Schema composition: allOf (inheritance), oneOf (discriminated unions), anyOf (flexible unions)
Security schemes: API key and bearer token authentication
Discriminator-based polymorphic deserialization and error handling

Provides:
Error handling for invalid JSON, type mismatches, missing/unknown discriminator, and parameter validation
Build system integration (CMake) for easy compilation and linking with required dependencies
Clear build and run instructions for local development and testing
Enables comprehensive, real-world validation of generated C++ server code against OpenAPI specifications
2026-02-12 19:41:05 +08:00

49 lines
1.3 KiB
C++

/**
* This file is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
#pragma once
// System headers
#include <nlohmann/json.hpp>
#include <variant>
#include <string>
#include "BankAccount.h"
#include "CreditCard.h"
namespace models {
// oneOf schema - type alias for std::variant
using PaymentMethod = std::variant<
CreditCard,
BankAccount>;
// JSON serialization functions (inline for header-only)
inline void from_json(const nlohmann::json& j, PaymentMethod& obj) {
if (!j.contains("paymentType")) {
throw nlohmann::json::type_error::create(302, "Discriminator property 'paymentType' not found in JSON", &j);
}
std::string discriminatorValue = j["paymentType"].get<std::string>();
if (discriminatorValue == "credit_card") {
obj = j.get<CreditCard>();
return;
}
if (discriminatorValue == "bank_account") {
obj = j.get<BankAccount>();
return;
}
throw nlohmann::json::type_error::create(302, "Unknown discriminator value: " + discriminatorValue, &j);
}
inline void to_json(nlohmann::json& j, const PaymentMethod& obj)
{
std::visit([&j](const auto& val) { j = nlohmann::json(val); }, obj);
}
} // namespace models