mirror of
https://github.com/OpenAPITools/openapi-generator.git
synced 2025-05-12 20:50:55 +00:00
[swift5] Add Identifiable conformance to supported models (#20179)
This commit is contained in:
parent
a7cacce30e
commit
af89ed8043
@ -5,6 +5,7 @@ templateDir: modules/openapi-generator/src/main/resources/swift5
|
||||
generateAliasAsModel: true
|
||||
additionalProperties:
|
||||
podAuthors: ""
|
||||
identifiableModels: false
|
||||
podSummary: PetstoreClient
|
||||
objcCompatible: true
|
||||
projectName: PetstoreClient
|
||||
|
@ -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|
|
||||
|
@ -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";
|
||||
@ -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;
|
||||
@ -303,6 +305,10 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig
|
||||
"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()));
|
||||
@ -507,6 +513,11 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig
|
||||
}
|
||||
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));
|
||||
}
|
||||
@ -940,6 +951,15 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -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}}
|
@ -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";
|
||||
@ -94,6 +95,7 @@ public class Swift5OptionsProvider implements OptionsProvider {
|
||||
.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")
|
||||
|
@ -45,6 +45,7 @@ public class Swift5OptionsTest extends AbstractOptionsTest {
|
||||
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));
|
||||
|
@ -34,3 +34,6 @@ public struct Category: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Category: Identifiable {}
|
||||
|
@ -56,3 +56,6 @@ public struct Order: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Order: Identifiable {}
|
||||
|
@ -59,3 +59,6 @@ public struct Pet: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Pet: Identifiable {}
|
||||
|
@ -34,3 +34,6 @@ public struct Tag: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Tag: Identifiable {}
|
||||
|
@ -59,3 +59,6 @@ public struct User: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension User: Identifiable {}
|
||||
|
@ -34,3 +34,6 @@ public struct Category: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Category: Identifiable {}
|
||||
|
@ -56,3 +56,6 @@ public struct Order: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Order: Identifiable {}
|
||||
|
@ -59,3 +59,6 @@ public struct Pet: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Pet: Identifiable {}
|
||||
|
@ -34,3 +34,6 @@ public struct Tag: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Tag: Identifiable {}
|
||||
|
@ -59,3 +59,6 @@ public struct User: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension User: Identifiable {}
|
||||
|
@ -34,3 +34,6 @@ public struct Category: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Category: Identifiable {}
|
||||
|
@ -56,3 +56,6 @@ public struct Order: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Order: Identifiable {}
|
||||
|
@ -59,3 +59,6 @@ public struct Pet: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Pet: Identifiable {}
|
||||
|
@ -34,3 +34,6 @@ public struct Tag: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Tag: Identifiable {}
|
||||
|
@ -59,3 +59,6 @@ public struct User: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension User: Identifiable {}
|
||||
|
@ -34,3 +34,6 @@ public struct Category: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Category: Identifiable {}
|
||||
|
@ -56,3 +56,6 @@ public struct Order: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Order: Identifiable {}
|
||||
|
@ -57,3 +57,6 @@ public struct Pet: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Pet: Identifiable {}
|
||||
|
@ -34,3 +34,6 @@ public struct Tag: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Tag: Identifiable {}
|
||||
|
@ -59,3 +59,6 @@ public struct User: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension User: Identifiable {}
|
||||
|
@ -34,3 +34,6 @@ public struct Category: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Category: Identifiable {}
|
||||
|
@ -56,3 +56,6 @@ public struct Order: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Order: Identifiable {}
|
||||
|
@ -59,3 +59,6 @@ public struct Pet: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Pet: Identifiable {}
|
||||
|
@ -34,3 +34,6 @@ public struct Tag: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Tag: Identifiable {}
|
||||
|
@ -59,3 +59,6 @@ public struct User: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension User: Identifiable {}
|
||||
|
@ -34,3 +34,6 @@ internal struct Category: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Category: Identifiable {}
|
||||
|
@ -57,3 +57,6 @@ internal struct Order: Codable, JSONEncodable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Order: Identifiable {}
|
||||
|
@ -60,3 +60,6 @@ internal struct Pet: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Pet: Identifiable {}
|
||||
|
@ -34,3 +34,6 @@ internal struct Tag: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Tag: Identifiable {}
|
||||
|
@ -59,3 +59,6 @@ internal struct User: Codable, JSONEncodable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension User: Identifiable {}
|
||||
|
@ -34,3 +34,6 @@ public struct Category: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Category: Identifiable {}
|
||||
|
@ -56,3 +56,6 @@ public struct Order: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Order: Identifiable {}
|
||||
|
@ -59,3 +59,6 @@ public struct Pet: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Pet: Identifiable {}
|
||||
|
@ -34,3 +34,6 @@ public struct Tag: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Tag: Identifiable {}
|
||||
|
@ -59,3 +59,6 @@ public struct User: Codable, JSONEncodable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension User: Identifiable {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -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 {}
|
||||
|
@ -47,3 +47,6 @@ public final class Category: Content, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Category: Identifiable {}
|
||||
|
@ -77,3 +77,6 @@ public final class Order: Content, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Order: Identifiable {}
|
||||
|
@ -78,3 +78,6 @@ public final class Pet: Content, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Pet: Identifiable {}
|
||||
|
@ -47,3 +47,6 @@ public final class Tag: Content, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension Tag: Identifiable {}
|
||||
|
@ -84,3 +84,6 @@ public final class User: Content, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)
|
||||
extension User: Identifiable {}
|
||||
|
Loading…
x
Reference in New Issue
Block a user