diff --git a/config/clients.config.json b/config/clients.config.json index 7752d56352b..7cec5312021 100644 --- a/config/clients.config.json +++ b/config/clients.config.json @@ -347,6 +347,7 @@ "clients": [ "abtesting", "analytics", + "composition", "ingestion", "insights", "monitoring", diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaSwiftGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaSwiftGenerator.java index d017fb14dd6..1dc0a4b6592 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaSwiftGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaSwiftGenerator.java @@ -136,8 +136,8 @@ public static String formatIdentifier(String text) { return INSTANCE.isReservedWord(text) ? INSTANCE.escapeReservedWord(text) : text; } - public static Boolean isReservedModelName(String name) { - return reservedModelNames.contains(name.toLowerCase()); + public static Boolean isReservedModelName(String name, String client) { + return client.equalsIgnoreCase("composition") || reservedModelNames.contains(name.toLowerCase()); } public static String prefixReservedModelName(String name, String client) { @@ -146,7 +146,7 @@ public static String prefixReservedModelName(String name, String client) { } var camelizedName = camelize(name); - if (isReservedModelName(camelizedName)) { + if (isReservedModelName(camelizedName, client)) { return getClientName(client) + Helpers.capitalize(camelizedName); } @@ -476,7 +476,7 @@ public String toEnumVarName(String value, String datatype) { public String toModelName(String name) { var sanitizedName = this.sanitizeName(name); var camelizedName = camelize(sanitizedName); - if (isReservedModelName(camelizedName)) { + if (isReservedModelName(camelizedName, getClientName(CLIENT))) { return prefixReservedModelName(camelizedName, CLIENT); } @@ -486,7 +486,7 @@ public String toModelName(String name) { @Override public String toParamName(String name) { var trimmedName = camelize(name.replaceFirst(getClientName(CLIENT), ""), LOWERCASE_FIRST_LETTER); - if (isReservedModelName(trimmedName)) { + if (isReservedModelName(trimmedName, getClientName(CLIENT))) { return trimmedName; } diff --git a/generators/src/main/java/com/algolia/codegen/cts/lambda/SwiftPrefixLambda.java b/generators/src/main/java/com/algolia/codegen/cts/lambda/SwiftPrefixLambda.java new file mode 100644 index 00000000000..df614dcf00e --- /dev/null +++ b/generators/src/main/java/com/algolia/codegen/cts/lambda/SwiftPrefixLambda.java @@ -0,0 +1,21 @@ +package com.algolia.codegen.cts.lambda; + +import com.algolia.codegen.AlgoliaSwiftGenerator; +import com.samskivert.mustache.Mustache; +import com.samskivert.mustache.Template; +import java.io.IOException; +import java.io.Writer; + +public class SwiftPrefixLambda implements Mustache.Lambda { + + private final String client; + + public SwiftPrefixLambda(String client) { + this.client = client; + } + + @Override + public void execute(Template.Fragment frag, Writer out) throws IOException { + out.write(AlgoliaSwiftGenerator.prefixReservedModelName(frag.execute(), client)); + } +} diff --git a/generators/src/main/java/com/algolia/codegen/cts/manager/SwiftCTSManager.java b/generators/src/main/java/com/algolia/codegen/cts/manager/SwiftCTSManager.java index 753a3b5cda5..f7c3007ecfd 100644 --- a/generators/src/main/java/com/algolia/codegen/cts/manager/SwiftCTSManager.java +++ b/generators/src/main/java/com/algolia/codegen/cts/manager/SwiftCTSManager.java @@ -1,6 +1,7 @@ package com.algolia.codegen.cts.manager; import com.algolia.codegen.AlgoliaSwiftGenerator; +import com.algolia.codegen.cts.lambda.SwiftPrefixLambda; import com.algolia.codegen.exceptions.GeneratorException; import com.algolia.codegen.utils.Helpers; import com.samskivert.mustache.Mustache.Lambda; @@ -57,5 +58,6 @@ public void addSnippetsSupportingFiles(List supportingFiles, Str @Override public void addMustacheLambdas(Map lambdas) { lambdas.put("identifier", (fragment, writer) -> writer.write(AlgoliaSwiftGenerator.formatIdentifier(fragment.execute()))); + lambdas.put("prefix", new SwiftPrefixLambda(client)); } } diff --git a/templates/swift/snippets/method.mustache b/templates/swift/snippets/method.mustache index 2c22ffb8c56..8be9b154f1c 100644 --- a/templates/swift/snippets/method.mustache +++ b/templates/swift/snippets/method.mustache @@ -17,7 +17,7 @@ final class {{client}}Snippet { {{> snippets/init}} // Call the API - {{#hasResponse}}let response{{#isGeneric}}: {{{returnType}}}{{/isGeneric}} = {{/hasResponse}}try {{#isAsyncMethod}}await {{/isAsyncMethod}}client.{{method}}({{#hasParams}}{{#parametersWithDataType}}{{> tests/generateParams }}{{^-last}}, {{/-last}}{{/parametersWithDataType}}{{/hasParams}}{{#hasRequestOptions}}, requestOptions: RequestOptions({{#requestOptions.headers}} + {{#hasResponse}}let response{{#isGeneric}}: {{#lambda.prefix}}{{{returnType}}}{{/lambda.prefix}}<{{#lambda.prefix}}Hit{{/lambda.prefix}}>{{/isGeneric}} = {{/hasResponse}}try {{#isAsyncMethod}}await {{/isAsyncMethod}}client.{{method}}({{#hasParams}}{{#parametersWithDataType}}{{> tests/generateParams }}{{^-last}}, {{/-last}}{{/parametersWithDataType}}{{/hasParams}}{{#hasRequestOptions}}, requestOptions: RequestOptions({{#requestOptions.headers}} headers: [{{#parametersWithDataType}}"{{key}}": {{> tests/paramValue }}{{^-last}}, {{/-last}}{{/parametersWithDataType}}]{{/requestOptions.headers}} {{#requestOptions.headers}}{{#requestOptions.queryParameters}},{{/requestOptions.queryParameters}}{{/requestOptions.headers}}{{#requestOptions.queryParameters}} queryParameters: [{{#parametersWithDataType}}"{{key}}": {{> tests/paramValue }}{{^-last}}, {{/-last}}{{/parametersWithDataType}}]{{/requestOptions.queryParameters}} diff --git a/templates/swift/tests/client/method.mustache b/templates/swift/tests/client/method.mustache index 490cd58536e..b93c98a2bef 100644 --- a/templates/swift/tests/client/method.mustache +++ b/templates/swift/tests/client/method.mustache @@ -1,5 +1,5 @@ -{{#hasResponse}}let response{{#isGeneric}}: Response<{{{returnType}}}>{{/isGeneric}} = {{> tests/method}}{{/hasResponse}} -{{^hasResponse}}let _{{#isGeneric}}: Response<{{{returnType}}}>{{/isGeneric}} = {{> tests/method}}{{/hasResponse}} +{{#hasResponse}}let response{{#isGeneric}}: Response<{{#lambda.prefix}}{{{returnType}}}{{/lambda.prefix}}<{{#lambda.prefix}}Hit{{/lambda.prefix}}>>{{/isGeneric}} = {{> tests/method}}{{/hasResponse}} +{{^hasResponse}}let _{{#isGeneric}}: Response<{{#lambda.prefix}}{{{returnType}}}{{/lambda.prefix}}<{{#lambda.prefix}}Hit{{/lambda.prefix}}>>{{/isGeneric}} = {{> tests/method}}{{/hasResponse}} {{^isHelper}} {{^isBenchmark}} let responseBodyData = try XCTUnwrap(response.bodyData) diff --git a/templates/swift/tests/e2e/e2e.mustache b/templates/swift/tests/e2e/e2e.mustache index a40ec002903..4a8112dbc9e 100644 --- a/templates/swift/tests/e2e/e2e.mustache +++ b/templates/swift/tests/e2e/e2e.mustache @@ -61,7 +61,7 @@ final class {{client}}RequestsTestsE2E: XCTestCase { } {{#response}} - let response{{#isGeneric}}: Response<{{{returnType}}}>{{/isGeneric}} = {{> tests/method}} + let response{{#isGeneric}}: Response<{{#lambda.prefix}}{{{returnType}}}{{/lambda.prefix}}<{{#lambda.prefix}}Hit{{/lambda.prefix}}>>{{/isGeneric}} = {{> tests/method}} {{#body}} let responseBody = try XCTUnwrap(response.body) let responseBodyData = try CodableHelper.jsonEncoder.encode(responseBody) diff --git a/templates/swift/tests/requests/requests.mustache b/templates/swift/tests/requests/requests.mustache index 17b0d2ba77f..10c5d2c30b0 100644 --- a/templates/swift/tests/requests/requests.mustache +++ b/templates/swift/tests/requests/requests.mustache @@ -21,7 +21,7 @@ final class {{client}}RequestsTests: XCTestCase { let transporter: Transporter = Transporter(configuration: configuration, requestBuilder: EchoRequestBuilder()) let client: {{client}} = {{client}}(configuration: configuration, transporter: transporter) - let response{{#isGeneric}}: Response<{{{returnType}}}>{{/isGeneric}} = {{> tests/method}} + let response{{#isGeneric}}: Response<{{#lambda.prefix}}{{{returnType}}}{{/lambda.prefix}}<{{#lambda.prefix}}Hit{{/lambda.prefix}}>>{{/isGeneric}} = {{> tests/method}} let responseBodyData = try XCTUnwrap(response.bodyData) let echoResponse = try CodableHelper.jsonDecoder.decode(EchoResponse.self, from: responseBodyData)