Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
a40b159
feat(cpp-boost-beast): OAS 3.1 schema validation support
bold84 Aug 22, 2026
27d6781
fix(cpp-boost-beast): preserve normalized OAS 3.1 constraints
bold84 Aug 23, 2026
9fa6b80
fix(cpp-boost-beast): advertise not schema support
bold84 Aug 23, 2026
a6d4582
fix(cpp-boost-beast): address OAS 3.1 review findings
bold84 Aug 23, 2026
f72c9b9
test(cpp-boost-beast): parallelize runtime compile
bold84 Aug 23, 2026
3e51ad4
fix(cpp-boost-beast): preserve normalized schema structure
bold84 Aug 23, 2026
20eb042
fix(core): avoid recursive inline schema name collisions
bold84 Aug 23, 2026
641743f
fix(cpp-boost-beast): compile complex OAS 3.1 clients
bold84 Aug 23, 2026
8478eff
fix(cpp-boost-beast): preserve nullable SSE semantics
bold84 Aug 23, 2026
a5562cb
fix(cpp-boost-beast): validate nullable enum values
bold84 Aug 23, 2026
50081e2
fix(cpp-boost-beast): honor compileWithValidation=false
bold84 Aug 23, 2026
0da3584
fix(cpp-boost-beast): harden multipart and null decoding
bold84 Aug 23, 2026
79ba65e
fix(cpp-boost-beast): address review regressions
bold84 Aug 23, 2026
f7fcdc0
test(cpp-boost-beast): cover false boolean decoding
bold84 Aug 23, 2026
428f28c
fix(cpp-boost-beast): tolerate response null drift
bold84 Aug 23, 2026
ea9855b
fix(cpp-boost-beast): preserve normalized reference identity
bold84 Aug 23, 2026
fb45d39
fix(cpp-boost-beast): preserve HTTP error response bodies
bold84 Aug 24, 2026
c2e0f09
fix(cpp-boost-beast): resolve OAS 3.1 review findings
bold84 Aug 24, 2026
9354d37
fix(cpp-boost-beast): handle null defaults on model branches
bold84 Aug 24, 2026
f03ec4e
fix(cpp-boost-beast): handle composed defaults and nullable SSE
bold84 Aug 24, 2026
506deee
fix(cpp-boost-beast): support Windows shared libraries
bold84 Aug 24, 2026
076b80d
Merge remote-tracking branch 'origin/master' into pr/cpp-boost-beast-…
bold84 Aug 24, 2026
4de2514
chore(cpp-boost-beast): refresh 7.26 sample
bold84 Aug 24, 2026
f79a4d6
fix(cpp-boost-beast): address OAS 3.1 review feedback
bold84 Aug 25, 2026
e325aa3
fix(cpp-boost-beast): bound OAS schema scanner recursion
bold84 Aug 25, 2026
30fcf6d
fix(cpp-boost-beast): address remaining OAS 3.1 review feedback
bold84 Aug 25, 2026
eaea61e
fix(cpp-boost-beast): intersect nullability across allOf
bold84 Aug 25, 2026
463ec68
fix(cpp-boost-beast): honor enum null constraints
bold84 Aug 25, 2026
376bb69
ci: rerun transient CircleCI checkout
bold84 Aug 25, 2026
c7e70c7
ci: retry transient checkout failures
bold84 Aug 25, 2026
b1c3227
fix(ci): checkout pull requests over HTTPS
bold84 Aug 25, 2026
615b2e7
fix(ci): restrict pull ref fallback
bold84 Aug 25, 2026
4fca581
refactor(cpp-boost-beast): split OAS 3.1 generator components
bold84 Aug 25, 2026
3962624
fix(cpp-boost-beast): address OAS 3.1 review feedback
bold84 Aug 25, 2026
0c52d70
chore(cpp-boost-beast): regenerate sample client
bold84 Aug 25, 2026
2ac97bb
fix(cpp-boost-beast): preserve nested recursive constraints
bold84 Aug 25, 2026
abad3df
docs(cpp-boost-beast): refresh generator options
bold84 Aug 25, 2026
7b468d5
Merge remote-tracking branch 'origin/master' into pr/cpp-boost-beast-…
bold84 Aug 25, 2026
f627565
chore(cpp-boost-beast): refresh generated artifacts
bold84 Aug 25, 2026
93e80ff
fix(cpp-boost-beast): preserve allOf null const constraints
bold84 Aug 25, 2026
5ac11ee
fix(cpp-boost-beast): honor recovered type-array nulls
bold84 Aug 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 20 additions & 3 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,26 @@ commands: # a reusable command with parameters
libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 \
libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates \
fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget libgbm1
# The following `checkout` command checks out your code to your working directory. In 1.0 we did this implicitly. In 2.0 you can choose where in the course of a job your code should be checked out.
- checkout
# Avoid intermittent SSH checkout failures from CircleCI workers.
- run:
name: Checkout source over HTTPS with retry
command: |
if [ -n "${CIRCLE_PULL_REQUEST:-}" ]; then
ref="refs/pull/${CIRCLE_PULL_REQUEST##*/}/head"
elif [[ "${CIRCLE_BRANCH:-}" =~ ^pull/[0-9]+$ ]]; then
ref="refs/${CIRCLE_BRANCH}/head"
else
ref="$CIRCLE_SHA1"
fi
git init .
git remote add origin https://github.com/OpenAPITools/openapi-generator.git
for i in $(seq 1 5); do
if git fetch --depth=1 origin "$ref" && git checkout --detach FETCH_HEAD; then
exit 0
fi
sleep 5
done
exit 1
# Prepare for artifact and test results collection equivalent to how it was done on 1.0.
# In many cases you can simplify this from what is generated here.
# 'See docs on artifact collection here https://circleci.com/docs/2.0/artifacts/'
Expand Down Expand Up @@ -189,7 +207,6 @@ jobs:
DOCKER_GENERATOR_IMAGE_NAME: openapitools/openapi-generator
DOCKER_CODEGEN_CLI_IMAGE_NAME: openapitools/openapi-generator-cli
steps:
- checkout
- command_build_and_test:
nodeNo: "3"
workflows:
Expand Down
51 changes: 32 additions & 19 deletions docs/generators/cpp-boost-beast-client.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,17 @@ These options may be applied as additional-properties (cli) or configOptions (pl
| Option | Description | Values | Default |
| ------ | ----------- | ------ | ------- |
|apiPackage|C++ namespace for apis (convention: name.space.api).| |org.openapitools.client.api|
|compileWithValidation|Emit schema-validation IR and kValidateOnDecode=true in generated ValidationTypes.h (default). Set to false to omit the IR for high-throughput clients. Representation diagnostics (non-finite destinations, integer range, required properties) remain active.| |true|
|exportMacro|C++ export macro placed before public classes and functions. When non-empty, ApiExport.h is generated for Windows DLL export/import handling.| ||
|formatAssertionPolicy|Format handling in composition branch matching. Only 'annotation' is supported: format metadata never affects match counts.|<dl><dt>**annotation**</dt><dd>Formats are annotations and do not affect validation</dd></dl>|annotation|
|inferConditionalSseOperations|Infer conditional SSE for dual JSON/SSE operations only when the request selector and event model are unambiguous. Enabled by default.| |true|
|modelPackage|C++ namespace for models (convention: name.space.model).| |org.openapitools.client.model|
|packageName|C++ package and library name.| |CppBoostBeastOpenAPIClient|
|sseEventTypeMappings|Comma-separated operationId=Model mappings for the JSON schema of each SSE event data payload.| |null|
|sseOperationIds|Comma-separated operationIds whose JSON request body conditionally selects text/event-stream (default request property: stream).| |null|
|sseRequestPropertyMappings|Comma-separated operationId=property mappings for the boolean request property that selects SSE.| |null|
|sseSchemaMode|SSE schema interpretation mode for text/event-stream responses. 'representation' (default): the response schema describes the media representation; callbacks receive an owning SseEvent with raw data, event, id, and retry metadata. 'jsonEventData': decode each complete event data payload against the response schema and pass both the typed value and SseEvent metadata to the callback. Use x-sse-event-data-schema for per-operation typed decoding.|<dl><dt>**representation**</dt><dd>Schema describes the media representation; callback receives SseEvent</dd><dt>**jsonEventData**</dt><dd>Schema describes each JSON event data payload</dd></dl>|representation|
|tolerateNonNullableNulls|Treat explicit JSON null values as absent for generated model properties whose schemas do not allow null. Enabled by default to tolerate non-conforming server responses while preserving required-key presence checks; set to false for strict schema decoding. Non-null values remain fully validated.| |true|

## IMPORT MAPPING

Expand All @@ -32,8 +41,12 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|int32_t|#include &lt;cstdint&gt;|
|int64_t|#include &lt;cstdint&gt;|
|std::map|#include &lt;map&gt;|
|std::monostate|#include &lt;variant&gt;|
|std::nullptr_t|#include &lt;cstddef&gt;|
|std::optional|#include &lt;optional&gt;|
|std::shared_ptr|#include &lt;memory&gt;|
|std::string|#include &lt;string&gt;|
|std::variant|#include &lt;variant&gt;|
|std::vector|#include &lt;vector&gt;|


Expand All @@ -51,9 +64,9 @@ These options may be applied as additional-properties (cli) or configOptions (pl
<li>double</li>
<li>float</li>
<li>int</li>
<li>int32_t</li>
<li>int64_t</li>
<li>long</li>
<li>std::int32_t</li>
<li>std::int64_t</li>
</ul>

## RESERVED WORDS
Expand Down Expand Up @@ -168,14 +181,14 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|Int64|✓|OAS2,OAS3
|Float|✓|OAS2,OAS3
|Double|✓|OAS2,OAS3
|Decimal||ToolingExtension
|Decimal||ToolingExtension
|String|✓|OAS2,OAS3
|Byte||OAS2,OAS3
|Binary||OAS2,OAS3
|Byte||OAS2,OAS3
|Binary||OAS2,OAS3
|Boolean|✓|OAS2,OAS3
|Date||OAS2,OAS3
|DateTime||OAS2,OAS3
|Password||OAS2,OAS3
|Date||OAS2,OAS3
|DateTime||OAS2,OAS3
|Password||OAS2,OAS3
|File|✓|OAS2
|Uuid|✗|
|Array|✓|OAS2,OAS3
Expand Down Expand Up @@ -217,11 +230,11 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|ExternalDocumentation|✓|OAS2,OAS3
|Examples|✓|OAS2,OAS3
|XMLStructureDefinitions|✗|OAS2,OAS3
|MultiServer||OAS3
|MultiServer||OAS3
|ParameterizedServer|✗|OAS3
|ParameterStyling||OAS3
|Callbacks||OAS3
|LinkObjects||OAS3
|ParameterStyling||OAS3
|Callbacks||OAS3
|LinkObjects||OAS3

### Parameter Feature
| Name | Supported | Defined By |
Expand All @@ -232,19 +245,19 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|Body|✓|OAS2
|FormUnencoded|✓|OAS2
|FormMultipart|✓|OAS2
|Cookie||OAS3
|Cookie||OAS3

### Schema Support Feature
| Name | Supported | Defined By |
| ---- | --------- | ---------- |
|Simple|✓|OAS2,OAS3
|Composite|✓|OAS2,OAS3
|Polymorphism||OAS2,OAS3
|Union||OAS3
|allOf||OAS2,OAS3
|anyOf||OAS3
|oneOf||OAS3
|not||OAS3
|Polymorphism||OAS2,OAS3
|Union||OAS3
|allOf||OAS2,OAS3
|anyOf||OAS3
|oneOf||OAS3
|not||OAS3

### Security Feature
| Name | Supported | Defined By |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1173,6 +1173,13 @@ private String addSchemas(String name, Schema schema) {
name = inlineSchemaNameMapping.get(name);
}

// Recursive flattening can add a nested schema after its parent's name
// was chosen. Re-check here so the parent cannot overwrite that child.
if (openAPI.getComponents().getSchemas().containsKey(name)
|| uniqueNames.contains(name)) {
name = uniqueName(name);
}

addGenerated(name, schema);
openAPI.getComponents().addSchemas(name, schema);
if (!name.equals(schema.getTitle()) && !inlineSchemaNameMappingValues.contains(name)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@ public void preprocessOpenAPI(OpenAPI openAPI) {
if (!scheme.isEmpty()) {
this.additionalProperties.put("scheme", scheme);
}
if (!serverList.isEmpty()) {
if (serverList != null && !serverList.isEmpty()) {
for (Server server : serverList) {
CodegenServer s = new CodegenServer();
s.description = server.getDescription();
Expand Down
Loading
Loading