Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[swift5] Add Identifiable conformance to supported models #20179

Merged
merged 1 commit into from
Nov 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions bin/configs/swift5-objcCompatible.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ templateDir: modules/openapi-generator/src/main/resources/swift5
generateAliasAsModel: true
additionalProperties:
podAuthors: ""
identifiableModels: false
podSummary: PetstoreClient
objcCompatible: true
projectName: PetstoreClient
Expand Down
1 change: 1 addition & 0 deletions docs/generators/swift5.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|generateModelAdditionalProperties|Generate model additional properties (default: true)| |true|
|hashableModels|Make hashable models (default: true)| |true|
|hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |true|
|identifiableModels|Make models conform to Identifiable when an id is present (default: true)| |true|
|legacyDiscriminatorBehavior|Set to false for generators with better support for discriminators. (Python, Java, Go, PowerShell, C# have this enabled by default).|<dl><dt>**true**</dt><dd>The mapping in the discriminator includes descendent schemas that allOf inherit from self and the discriminator mapping schemas in the OAS document.</dd><dt>**false**</dt><dd>The mapping in the discriminator includes any descendent schemas that allOf inherit from self, any oneOf schemas, any anyOf schemas, any x-discriminator-values, and the discriminator mapping schemas in the OAS document AND Codegen validates that oneOf and anyOf schemas contain the required discriminator and throws an error if the discriminator is missing.</dd></dl>|true|
|library|Library template (sub-template) to use|<dl><dt>**urlsession**</dt><dd>[DEFAULT] HTTP client: URLSession</dd><dt>**alamofire**</dt><dd>HTTP client: Alamofire</dd><dt>**vapor**</dt><dd>HTTP client: Vapor</dd></dl>|urlsession|
|mapFileBinaryToData|[WARNING] This option will be removed and enabled by default in the future once we've enhanced the code to work with `Data` in all the different situations. Map File and Binary to Data (default: false)| |false|
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig
public static final String USE_BACKTICK_ESCAPES = "useBacktickEscapes";
public static final String GENERATE_MODEL_ADDITIONAL_PROPERTIES = "generateModelAdditionalProperties";
public static final String HASHABLE_MODELS = "hashableModels";
public static final String IDENTIFIABLE_MODELS = "identifiableModels";
public static final String USE_JSON_ENCODABLE = "useJsonEncodable";
public static final String MAP_FILE_BINARY_TO_DATA = "mapFileBinaryToData";
public static final String USE_CUSTOM_DATE_WITHOUT_TIME = "useCustomDateWithoutTime";
Expand All @@ -95,6 +96,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig
@Setter protected boolean useBacktickEscapes = false;
@Setter protected boolean generateModelAdditionalProperties = true;
@Setter protected boolean hashableModels = true;
@Setter protected boolean identifiableModels = true;
@Setter protected boolean useJsonEncodable = true;
@Getter @Setter
protected boolean mapFileBinaryToData = false;
Expand Down Expand Up @@ -303,6 +305,10 @@ public Swift5ClientCodegen() {
"Make hashable models (default: true)")
.defaultValue(Boolean.TRUE.toString()));

cliOptions.add(new CliOption(IDENTIFIABLE_MODELS,
"Make models conform to Identifiable when an id is present (default: true)")
.defaultValue(Boolean.TRUE.toString()));

cliOptions.add(new CliOption(USE_JSON_ENCODABLE,
"Make models conform to JSONEncodable protocol (default: true)")
.defaultValue(Boolean.TRUE.toString()));
Expand Down Expand Up @@ -507,6 +513,11 @@ public void processOpts() {
}
additionalProperties.put(HASHABLE_MODELS, hashableModels);

if (additionalProperties.containsKey(IDENTIFIABLE_MODELS)) {
setIdentifiableModels(convertPropertyToBooleanAndWriteBack(IDENTIFIABLE_MODELS));
}
additionalProperties.put(IDENTIFIABLE_MODELS, identifiableModels);

if (additionalProperties.containsKey(USE_JSON_ENCODABLE)) {
setUseJsonEncodable(convertPropertyToBooleanAndWriteBack(USE_JSON_ENCODABLE));
}
Expand Down Expand Up @@ -940,6 +951,15 @@ public CodegenModel fromModel(String name, Schema model) {
if (hashableModels) {
codegenModel.vendorExtensions.put("x-swift-hashable", true);
}
if (identifiableModels && !codegenModel.vendorExtensions.containsKey("x-swift-identifiable")) {
for (CodegenProperty cp : codegenModel.getVars()) {
if (!cp.getBaseName().equals("id")) continue;
if (cp.isString || cp.isUuid || cp.isInteger || cp.isLong) {
codegenModel.vendorExtensions.put("x-swift-identifiable", true);
break;
}
}
}
return codegenModel;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,7 @@ extension {{projectName}}API {
{{> modelObject}}{{/isEnum}}{{/isArray}}{{/vendorExtensions.x-is-one-of-interface}}{{/model}}{{/models}}
{{#swiftUseApiNamespace}}
}
{{/swiftUseApiNamespace}}
{{/swiftUseApiNamespace}}{{#models}}{{#model}}{{#vendorExtensions.x-swift-identifiable}}
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension {{#swiftUseApiNamespace}}{{projectName}}API.{{/swiftUseApiNamespace}}{{{classname}}}: Identifiable {}
{{/vendorExtensions.x-swift-identifiable}}{{/model}}{{/models}}
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ public class Swift5OptionsProvider implements OptionsProvider {
public static final String USE_BACKTICKS_ESCAPES_VALUE = "false";
public static final String GENERATE_MODEL_ADDITIONAL_PROPERTIES_VALUE = "true";
public static final String HASHABLE_MODELS_VALUE = "true";
public static final String IDENTIFIABLE_MODELS_VALUE = "true";
public static final String USE_JSON_ENCODABLE_VALUE = "true";
public static final String ALLOW_UNICODE_IDENTIFIERS_VALUE = "false";
public static final String PREPEND_FORM_OR_BODY_PARAMETERS_VALUE = "true";
Expand Down Expand Up @@ -94,6 +95,7 @@ public Map<String, String> createOptions() {
.put(Swift5ClientCodegen.SWIFT_PACKAGE_PATH, SWIFT_PACKAGE_PATH_VALUE)
.put(Swift5ClientCodegen.GENERATE_MODEL_ADDITIONAL_PROPERTIES, GENERATE_MODEL_ADDITIONAL_PROPERTIES_VALUE)
.put(Swift5ClientCodegen.HASHABLE_MODELS, HASHABLE_MODELS_VALUE)
.put(Swift5ClientCodegen.IDENTIFIABLE_MODELS, IDENTIFIABLE_MODELS_VALUE)
.put(Swift5ClientCodegen.USE_JSON_ENCODABLE, USE_JSON_ENCODABLE_VALUE)
.put(Swift5ClientCodegen.MAP_FILE_BINARY_TO_DATA, "false")
.put(Swift5ClientCodegen.USE_CUSTOM_DATE_WITHOUT_TIME, "false")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ protected void verifyOptions() {
verify(clientCodegen).setResponseAs(Swift5OptionsProvider.RESPONSE_AS_VALUE.split(","));
verify(clientCodegen).setNonPublicApi(Boolean.parseBoolean(Swift5OptionsProvider.NON_PUBLIC_API_REQUIRED_VALUE));
verify(clientCodegen).setObjcCompatible(Boolean.parseBoolean(Swift5OptionsProvider.OBJC_COMPATIBLE_VALUE));
verify(clientCodegen).setIdentifiableModels(Boolean.parseBoolean(Swift5OptionsProvider.IDENTIFIABLE_MODELS_VALUE));
verify(clientCodegen).setPrependFormOrBodyParameters(Boolean.valueOf(Swift5OptionsProvider.PREPEND_FORM_OR_BODY_PARAMETERS_VALUE));
verify(clientCodegen).setReadonlyProperties(Boolean.parseBoolean(Swift5OptionsProvider.READONLY_PROPERTIES_VALUE));
verify(clientCodegen).setGenerateModelAdditionalProperties(Boolean.parseBoolean(Swift5OptionsProvider.GENERATE_MODEL_ADDITIONAL_PROPERTIES_VALUE));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@ public struct Category: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Category: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,6 @@ public struct Order: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Order: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,6 @@ public struct Pet: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Pet: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@ public struct Tag: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Tag: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,6 @@ public struct User: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension User: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@ public struct Category: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Category: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,6 @@ public struct Order: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Order: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,6 @@ public struct Pet: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Pet: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@ public struct Tag: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Tag: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,6 @@ public struct User: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension User: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@ public struct Category: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Category: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,6 @@ public struct Order: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Order: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,6 @@ public struct Pet: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Pet: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@ public struct Tag: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Tag: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,6 @@ public struct User: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension User: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@ public struct Category: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Category: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,6 @@ public struct Order: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Order: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,6 @@ public struct Pet: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Pet: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@ public struct Tag: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Tag: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,6 @@ public struct User: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension User: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@ public struct Category: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Category: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,6 @@ public struct Order: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Order: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,6 @@ public struct Pet: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Pet: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@ public struct Tag: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Tag: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,6 @@ public struct User: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension User: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@ internal struct Category: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Category: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,6 @@ internal struct Order: Codable, JSONEncodable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Order: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,6 @@ internal struct Pet: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Pet: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@ internal struct Tag: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Tag: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,6 @@ internal struct User: Codable, JSONEncodable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension User: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@ public struct Category: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Category: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,6 @@ public struct Order: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Order: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,6 @@ public struct Pet: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Pet: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@ public struct Tag: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Tag: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,6 @@ public struct User: Codable, JSONEncodable, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension User: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,6 @@ public final class Category: Codable, JSONEncodable, Hashable {
}

}

@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension PetstoreClientAPI.Category: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -82,3 +82,6 @@ public final class Order: Codable, JSONEncodable, Hashable {
}

}

@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension PetstoreClientAPI.Order: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -85,3 +85,6 @@ public final class Pet: Codable, JSONEncodable, Hashable {
}

}

@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension PetstoreClientAPI.Pet: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,6 @@ public final class Tag: Codable, JSONEncodable, Hashable {
}

}

@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension PetstoreClientAPI.Tag: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -89,3 +89,6 @@ public final class User: Codable, JSONEncodable, Hashable {
}

}

@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension PetstoreClientAPI.User: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,6 @@ public final class Category: Content, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Category: Identifiable {}
Original file line number Diff line number Diff line change
Expand Up @@ -77,3 +77,6 @@ public final class Order: Content, Hashable {
}
}


@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
extension Order: Identifiable {}
Loading
Loading