diff --git a/config/clients.config.json b/config/clients.config.json index 97a1dc2e736..d313e0c045e 100644 --- a/config/clients.config.json +++ b/config/clients.config.json @@ -329,6 +329,10 @@ "tests": { "extension": "Tests.swift", "outputFolder": "Tests" + }, + "snippets": { + "extension": ".swift", + "outputFolder": "Sources" } } } diff --git a/config/generation.config.mjs b/config/generation.config.mjs index 55677d7d051..a7387071116 100644 --- a/config/generation.config.mjs +++ b/config/generation.config.mjs @@ -141,6 +141,9 @@ export const patterns = [ '!clients/algoliasearch-client-scala/src/main/scala/algoliasearch/config/**', // Swift + '!snippets/swift/**', + 'snippets/swift/Package.swift', + 'snippets/swift/Sources/**', 'clients/algoliasearch-client-swift/**', '!clients/algoliasearch-client-swift/*', 'clients/algoliasearch-client-swift/AlgoliaSearchClient.podspec', 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 05448028ab5..30cb05ef940 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 @@ -32,4 +32,9 @@ public void addDataToBundle(Map bundle) throws GeneratorExceptio .collect(Collectors.toList()) ); } + + @Override + public void addSnippetsSupportingFiles(List supportingFiles) { + supportingFiles.add(new SupportingFile("snippets/Package.mustache", "snippets/swift", "Package.swift")); + } } diff --git a/scripts/formatter.ts b/scripts/formatter.ts index 5916420ca7f..998683a2775 100644 --- a/scripts/formatter.ts +++ b/scripts/formatter.ts @@ -65,7 +65,7 @@ export async function formatter(language: string, cwd: string): Promise { await run('sbt -Dsbt.server.forcestart=true scalafmtAll scalafmtSbt', { cwd, language }); break; case 'swift': - if (cwd.includes('tests') || cwd.includes('snippets')) { + if (cwd.includes('tests')) { await run(`swiftformat Tests`, { cwd, language }); } else { await run(`swiftformat Sources`, { cwd, language }); diff --git a/snippets/swift/.gitignore b/snippets/swift/.gitignore new file mode 100644 index 00000000000..47bd4c185fd --- /dev/null +++ b/snippets/swift/.gitignore @@ -0,0 +1,9 @@ +.DS_Store +/.build +/Packages +xcuserdata/ +DerivedData/ +.swiftpm/configuration/registries.json +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +.netrc +Package.resolved diff --git a/templates/swift/snippets/Package.mustache b/templates/swift/snippets/Package.mustache new file mode 100644 index 00000000000..3c1779a489b --- /dev/null +++ b/templates/swift/snippets/Package.mustache @@ -0,0 +1,34 @@ +// swift-tools-version: 5.9 + +import PackageDescription + +let package = Package( + name: "AlgoliaSearchClientSnippets", + platforms: [ + .iOS(.v13), + .macOS(.v10_15), + .tvOS(.v13), + .watchOS(.v6), + ], + products: [ + .library( + name: "AlgoliaSearchClientSnippets", + targets: ["AlgoliaSearchClientSnippets"]), + ], + dependencies: [ + .package(path: "../../clients/algoliasearch-client-swift"), + .package(url: "https://github.com/Flight-School/AnyCodable", .upToNextMajor(from: "0.6.1")) + ], + targets: [ + .target( + name: "AlgoliaSearchClientSnippets", + dependencies: [ + .product(name: "AnyCodable", package: "AnyCodable"),{{#packageList}} + .product( + name: "{{{.}}}", + package: "algoliasearch-client-swift" + ),{{/packageList}} + ] + ) + ] +) \ No newline at end of file diff --git a/templates/swift/snippets/method.mustache b/templates/swift/snippets/method.mustache new file mode 100644 index 00000000000..018760869cd --- /dev/null +++ b/templates/swift/snippets/method.mustache @@ -0,0 +1,34 @@ +#if canImport(AnyCodable) +import AnyCodable +#endif + +import Core +import {{import}} + +final class {{client}}Snippet { + {{#blocksRequests}} + {{#snippet}} + // Snippet for the {{method}} method. + // + // {{{description}}} + func snippetFor{{#lambda.pascalcase}}{{method}}{{/lambda.pascalcase}}() async throws { + // Initialize the client + let client = try {{client}}(appId: "YOUR_APP_ID", apiKey: "YOUR_API_KEY"{{#hasRegionalHost}}, region: .{{defaultRegion}}{{/hasRegionalHost}}) + + {{#hasRequestOptions}} + let requestOptions = RequestOptions({{#requestOptions.headers.parametersWithDataType}}{{#-first}} + headers: [{{/-first}} + "{{key}}": {{> tests/paramValue }}{{^-last}}, {{/-last}}{{#-last}} + ]{{/-last}}{{/requestOptions.headers.parametersWithDataType}}{{#requestOptions.headers.parametersWithDataType}}{{#requestOptions.queryParameters.parametersWithDataType}},{{/requestOptions.queryParameters.parametersWithDataType}}{{/requestOptions.headers.parametersWithDataType}}{{#requestOptions.queryParameters.parametersWithDataType}}{{#-first}} + queryItems: APIHelper.mapValuesToQueryItems([{{/-first}} + "{{key}}": {{> tests/paramValue }}{{^-last}}, {{/-last}}{{#-last}} + ]){{/-last}}{{/requestOptions.queryParameters.parametersWithDataType}} + ) + {{/hasRequestOptions}} + + // Call the API + let _ = try await client.{{method}}({{#parametersWithDataType}}{{> tests/generateParams}}{{^-last}},{{/-last}}{{/parametersWithDataType}}{{#hasRequestOptions}}, requestOptions: requestOptions{{/hasRequestOptions}}) + } + {{/snippet}} + {{/blocksRequests}} +} \ No newline at end of file diff --git a/templates/swift/tests/Package.mustache b/templates/swift/tests/Package.mustache index 1744d2766de..0df3fdd178b 100644 --- a/templates/swift/tests/Package.mustache +++ b/templates/swift/tests/Package.mustache @@ -1,5 +1,4 @@ // swift-tools-version: 5.9 -// {{{generationBanner}}} import PackageDescription