Skip to content

Commit 783119b

Browse files
KahncodeDW-Samuel
andauthoredMar 20, 2024··
[cpp-ue4] Handled nullable by setting the required tag, effectively making nullables optionals (even if they may be required in the spec). This is because there is no such concept as a value being nullable in C++, and this generator deals with values, not pointers. (#18168)
Co-authored-by: Samuel Kahn <[email protected]>
1 parent 93b76dd commit 783119b

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed
 

‎modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppUE4ClientCodegen.java

+32
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@
2020
import io.swagger.v3.oas.models.media.Schema;
2121
import org.openapitools.codegen.CodegenConstants;
2222
import org.openapitools.codegen.CodegenType;
23+
import org.openapitools.codegen.CodegenModel;
24+
import org.openapitools.codegen.CodegenParameter;
25+
import org.openapitools.codegen.CodegenProperty;
26+
import org.openapitools.codegen.CodegenResponse;
2327
import org.openapitools.codegen.SupportingFile;
2428
import org.openapitools.codegen.meta.GeneratorMetadata;
2529
import org.openapitools.codegen.meta.Stability;
@@ -246,6 +250,34 @@ public void setOptionalProjectFileFlag(boolean flag) {
246250
this.optionalProjectFileFlag = flag;
247251
}
248252

253+
// override to post-process any model properties
254+
@Override
255+
@SuppressWarnings("unused")
256+
public void postProcessModelProperty(CodegenModel model, CodegenProperty property) {
257+
super.postProcessModelProperty(model, property);
258+
// Nullable will be handled as optional
259+
property.required = !property.notRequiredOrIsNullable();
260+
}
261+
262+
// override to post-process any response
263+
@Override
264+
@SuppressWarnings("unused")
265+
public void postProcessResponseWithProperty(CodegenResponse response, CodegenProperty property) {
266+
super.postProcessResponseWithProperty(response, property);
267+
// Nullable will be handled as optional
268+
property.required = !property.notRequiredOrIsNullable();
269+
}
270+
271+
// override to post-process any parameters
272+
@Override
273+
@SuppressWarnings("unused")
274+
public void postProcessParameter(CodegenParameter parameter) {
275+
super.postProcessParameter(parameter);
276+
// Nullable will be handled as optional
277+
parameter.required = !parameter.notRequiredOrIsNullable();
278+
}
279+
280+
249281
/**
250282
* Configures the type of generator.
251283
*

‎modules/openapi-generator/src/main/resources/cpp-ue4/helpers-header.mustache

+6-3
Original file line numberDiff line numberDiff line change
@@ -448,18 +448,21 @@ inline bool TryGetJsonValue(const TSharedPtr<FJsonObject>& JsonObject, const FSt
448448
template<typename T>
449449
inline bool TryGetJsonValue(const TSharedPtr<FJsonObject>& JsonObject, const FString& Key, TOptional<T>& OptionalValue)
450450
{
451-
if(JsonObject->HasField(Key))
451+
const TSharedPtr<FJsonValue> JsonValue = JsonObject->TryGetField(Key);
452+
if (JsonValue.IsValid() && !JsonValue->IsNull())
452453
{
453454
T Value;
454-
if (TryGetJsonValue(JsonObject, Key, Value))
455+
if (TryGetJsonValue(JsonValue, Value))
455456
{
456457
OptionalValue = Value;
457458
return true;
458459
}
459460
else
460461
return false;
461462
}
462-
return true; // Absence of optional value is not a parsing error
463+
// Absence of optional value is not a parsing error.
464+
// Nullable is handled like optional.
465+
return true;
463466
}
464467

465468
{{#cppNamespaceDeclarations}}

0 commit comments

Comments
 (0)
Please sign in to comment.