Skip to content

Commit db6e6f2

Browse files
authored
feat(swift): generate composition client (#4801)
1 parent 76d5c07 commit db6e6f2

File tree

8 files changed

+34
-10
lines changed

8 files changed

+34
-10
lines changed

config/clients.config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,7 @@
347347
"clients": [
348348
"abtesting",
349349
"analytics",
350+
"composition",
350351
"ingestion",
351352
"insights",
352353
"monitoring",

generators/src/main/java/com/algolia/codegen/AlgoliaSwiftGenerator.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,8 @@ public static String formatIdentifier(String text) {
136136
return INSTANCE.isReservedWord(text) ? INSTANCE.escapeReservedWord(text) : text;
137137
}
138138

139-
public static Boolean isReservedModelName(String name) {
140-
return reservedModelNames.contains(name.toLowerCase());
139+
public static Boolean isReservedModelName(String name, String client) {
140+
return client.equalsIgnoreCase("composition") || reservedModelNames.contains(name.toLowerCase());
141141
}
142142

143143
public static String prefixReservedModelName(String name, String client) {
@@ -146,7 +146,7 @@ public static String prefixReservedModelName(String name, String client) {
146146
}
147147

148148
var camelizedName = camelize(name);
149-
if (isReservedModelName(camelizedName)) {
149+
if (isReservedModelName(camelizedName, client)) {
150150
return getClientName(client) + Helpers.capitalize(camelizedName);
151151
}
152152

@@ -476,7 +476,7 @@ public String toEnumVarName(String value, String datatype) {
476476
public String toModelName(String name) {
477477
var sanitizedName = this.sanitizeName(name);
478478
var camelizedName = camelize(sanitizedName);
479-
if (isReservedModelName(camelizedName)) {
479+
if (isReservedModelName(camelizedName, getClientName(CLIENT))) {
480480
return prefixReservedModelName(camelizedName, CLIENT);
481481
}
482482

@@ -486,7 +486,7 @@ public String toModelName(String name) {
486486
@Override
487487
public String toParamName(String name) {
488488
var trimmedName = camelize(name.replaceFirst(getClientName(CLIENT), ""), LOWERCASE_FIRST_LETTER);
489-
if (isReservedModelName(trimmedName)) {
489+
if (isReservedModelName(trimmedName, getClientName(CLIENT))) {
490490
return trimmedName;
491491
}
492492

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.algolia.codegen.cts.lambda;
2+
3+
import com.algolia.codegen.AlgoliaSwiftGenerator;
4+
import com.samskivert.mustache.Mustache;
5+
import com.samskivert.mustache.Template;
6+
import java.io.IOException;
7+
import java.io.Writer;
8+
9+
public class SwiftPrefixLambda implements Mustache.Lambda {
10+
11+
private final String client;
12+
13+
public SwiftPrefixLambda(String client) {
14+
this.client = client;
15+
}
16+
17+
@Override
18+
public void execute(Template.Fragment frag, Writer out) throws IOException {
19+
out.write(AlgoliaSwiftGenerator.prefixReservedModelName(frag.execute(), client));
20+
}
21+
}

generators/src/main/java/com/algolia/codegen/cts/manager/SwiftCTSManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.algolia.codegen.cts.manager;
22

33
import com.algolia.codegen.AlgoliaSwiftGenerator;
4+
import com.algolia.codegen.cts.lambda.SwiftPrefixLambda;
45
import com.algolia.codegen.exceptions.GeneratorException;
56
import com.algolia.codegen.utils.Helpers;
67
import com.samskivert.mustache.Mustache.Lambda;
@@ -57,5 +58,6 @@ public void addSnippetsSupportingFiles(List<SupportingFile> supportingFiles, Str
5758
@Override
5859
public void addMustacheLambdas(Map<String, Lambda> lambdas) {
5960
lambdas.put("identifier", (fragment, writer) -> writer.write(AlgoliaSwiftGenerator.formatIdentifier(fragment.execute())));
61+
lambdas.put("prefix", new SwiftPrefixLambda(client));
6062
}
6163
}

templates/swift/snippets/method.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ final class {{client}}Snippet {
1717
{{> snippets/init}}
1818

1919
// Call the API
20-
{{#hasResponse}}let response{{#isGeneric}}: {{{returnType}}}<Hit>{{/isGeneric}} = {{/hasResponse}}try {{#isAsyncMethod}}await {{/isAsyncMethod}}client.{{method}}({{#hasParams}}{{#parametersWithDataType}}{{> tests/generateParams }}{{^-last}}, {{/-last}}{{/parametersWithDataType}}{{/hasParams}}{{#hasRequestOptions}}, requestOptions: RequestOptions({{#requestOptions.headers}}
20+
{{#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}}
2121
headers: [{{#parametersWithDataType}}"{{key}}": {{> tests/paramValue }}{{^-last}}, {{/-last}}{{/parametersWithDataType}}]{{/requestOptions.headers}}
2222
{{#requestOptions.headers}}{{#requestOptions.queryParameters}},{{/requestOptions.queryParameters}}{{/requestOptions.headers}}{{#requestOptions.queryParameters}}
2323
queryParameters: [{{#parametersWithDataType}}"{{key}}": {{> tests/paramValue }}{{^-last}}, {{/-last}}{{/parametersWithDataType}}]{{/requestOptions.queryParameters}}

templates/swift/tests/client/method.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
{{#hasResponse}}let response{{#isGeneric}}: Response<{{{returnType}}}<Hit>>{{/isGeneric}} = {{> tests/method}}{{/hasResponse}}
2-
{{^hasResponse}}let _{{#isGeneric}}: Response<{{{returnType}}}<Hit>>{{/isGeneric}} = {{> tests/method}}{{/hasResponse}}
1+
{{#hasResponse}}let response{{#isGeneric}}: Response<{{#lambda.prefix}}{{{returnType}}}{{/lambda.prefix}}<{{#lambda.prefix}}Hit{{/lambda.prefix}}>>{{/isGeneric}} = {{> tests/method}}{{/hasResponse}}
2+
{{^hasResponse}}let _{{#isGeneric}}: Response<{{#lambda.prefix}}{{{returnType}}}{{/lambda.prefix}}<{{#lambda.prefix}}Hit{{/lambda.prefix}}>>{{/isGeneric}} = {{> tests/method}}{{/hasResponse}}
33
{{^isHelper}}
44
{{^isBenchmark}}
55
let responseBodyData = try XCTUnwrap(response.bodyData)

templates/swift/tests/e2e/e2e.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ final class {{client}}RequestsTestsE2E: XCTestCase {
6161
}
6262

6363
{{#response}}
64-
let response{{#isGeneric}}: Response<{{{returnType}}}<Hit>>{{/isGeneric}} = {{> tests/method}}
64+
let response{{#isGeneric}}: Response<{{#lambda.prefix}}{{{returnType}}}{{/lambda.prefix}}<{{#lambda.prefix}}Hit{{/lambda.prefix}}>>{{/isGeneric}} = {{> tests/method}}
6565
{{#body}}
6666
let responseBody = try XCTUnwrap(response.body)
6767
let responseBodyData = try CodableHelper.jsonEncoder.encode(responseBody)

templates/swift/tests/requests/requests.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ final class {{client}}RequestsTests: XCTestCase {
2121
let transporter: Transporter = Transporter(configuration: configuration, requestBuilder: EchoRequestBuilder())
2222
let client: {{client}} = {{client}}(configuration: configuration, transporter: transporter)
2323

24-
let response{{#isGeneric}}: Response<{{{returnType}}}<Hit>>{{/isGeneric}} = {{> tests/method}}
24+
let response{{#isGeneric}}: Response<{{#lambda.prefix}}{{{returnType}}}{{/lambda.prefix}}<{{#lambda.prefix}}Hit{{/lambda.prefix}}>>{{/isGeneric}} = {{> tests/method}}
2525
let responseBodyData = try XCTUnwrap(response.bodyData)
2626
let echoResponse = try CodableHelper.jsonDecoder.decode(EchoResponse.self, from: responseBodyData)
2727

0 commit comments

Comments
 (0)