Skip to content

Commit bbc8103

Browse files
committed
Swift: Add MVP set of action examples for SQS
This commit adds action examples for SQS in Swift.
1 parent b6e9c0d commit bbc8103

File tree

16 files changed

+977
-0
lines changed

16 files changed

+977
-0
lines changed

.doc_gen/metadata/sqs_metadata.yaml

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,18 @@ sqs_Hello:
5858
- description: Initialize an &SQS; client and list queues.
5959
snippet_tags:
6060
- javascript.v3.sqs.hello
61+
Swift:
62+
versions:
63+
- sdk_version: 1
64+
github: swift/example_code/sqs
65+
sdkguide:
66+
excerpts:
67+
- description: The <code>Package.swift</code> file.
68+
snippet_tags:
69+
- swift.sqs.basics.package
70+
- description: The Swift source code, <code>entry.swift</code>.
71+
snippet_tags:
72+
- swift.sqs.basics
6173
services:
6274
sqs: {ListQueues}
6375
sqs_CreateQueue:
@@ -163,6 +175,15 @@ sqs_CreateQueue:
163175
snippet_tags:
164176
- cpp.example_code.sqs.CreateQueue.config
165177
- cpp.example_code.sqs.CreateQueue
178+
Swift:
179+
versions:
180+
- sdk_version: 1
181+
github: swift/example_code/sqs
182+
sdkguide:
183+
excerpts:
184+
- description:
185+
snippet_tags:
186+
- swift.sqs.CreateQueue
166187
services:
167188
sqs: {CreateQueue}
168189
sqs_GetQueueUrl:
@@ -414,6 +435,15 @@ sqs_DeleteQueue:
414435
snippet_tags:
415436
- cpp.example_code.sqs.DeleteQueue.config
416437
- cpp.example_code.sqs.DeleteQueue
438+
Swift:
439+
versions:
440+
- sdk_version: 1
441+
github: swift/example_code/sqs
442+
sdkguide:
443+
excerpts:
444+
- description:
445+
snippet_tags:
446+
- swift.sqs.DeleteQueue
417447
services:
418448
sqs: {DeleteQueue}
419449
sqs_SendMessage:
@@ -649,6 +679,15 @@ sqs_ReceiveMessage:
649679
snippet_tags:
650680
- cpp.example_code.sqs.ReceiveMessage.config
651681
- cpp.example_code.sqs.ReceiveMessage
682+
Swift:
683+
versions:
684+
- sdk_version: 1
685+
github: swift/example_code/sqs
686+
sdkguide:
687+
excerpts:
688+
- description:
689+
snippet_tags:
690+
- swift.sqs.ReceiveMessage
652691
services:
653692
sqs: {ReceiveMessage}
654693
sqs_DeleteMessage:
@@ -765,6 +804,15 @@ sqs_DeleteMessageBatch:
765804
- description:
766805
snippet_tags:
767806
- sqs.JavaScript.messages.receiveMessageV3
807+
Swift:
808+
versions:
809+
- sdk_version: 1
810+
github: swift/example_code/sqs
811+
sdkguide:
812+
excerpts:
813+
- description:
814+
snippet_tags:
815+
- swift.sqs.DeleteMessageBatch
768816
services:
769817
sqs: {DeleteMessageBatch}
770818
sqs_Scenario_SendReceiveBatch:
@@ -836,6 +884,15 @@ sqs_GetQueueAttributes:
836884
- description:
837885
snippet_tags:
838886
- javascript.v3.sqs.actions.GetQueueAttributes
887+
Swift:
888+
versions:
889+
- sdk_version: 1
890+
github: swift/example_code/sqs
891+
sdkguide:
892+
excerpts:
893+
- description:
894+
snippet_tags:
895+
- swift.sqs.GetQueueAttributes
839896
services:
840897
sqs: {GetQueueAttributes}
841898
sqs_ChangeMessageVisibility:
@@ -931,6 +988,15 @@ sqs_SetQueueAttributes:
931988
- description: Configure a dead-letter queue.
932989
snippet_tags:
933990
- sqs.JavaScript.deadLetter.setQueueAttributesV3
991+
Swift:
992+
versions:
993+
- sdk_version: 1
994+
github: swift/example_code/sqs
995+
sdkguide:
996+
excerpts:
997+
- description:
998+
snippet_tags:
999+
- swift.sqs.SetQueueAttributes
9341000
services:
9351001
sqs: {SetQueueAttributes}
9361002
sqs_Scenario_TopicsAndQueues:
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// swift-tools-version: 5.9
2+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
// SPDX-License-Identifier: Apache-2.0
4+
//
5+
// The swift-tools-version declares the minimum version of Swift required to
6+
// build this package.
7+
8+
import PackageDescription
9+
10+
let package = Package(
11+
name: "createqueue",
12+
// Let Xcode know the minimum Apple platforms supported.
13+
platforms: [
14+
.macOS(.v13),
15+
.iOS(.v15)
16+
],
17+
dependencies: [
18+
// Dependencies declare other packages that this package depends on.
19+
.package(
20+
url: "https://github.com/awslabs/aws-sdk-swift",
21+
from: "1.0.0"),
22+
.package(
23+
url: "https://github.com/apple/swift-argument-parser.git",
24+
branch: "main"
25+
)
26+
],
27+
targets: [
28+
// Targets are the basic building blocks of a package, defining a module or a test suite.
29+
// Targets can depend on other targets in this package and products
30+
// from dependencies.
31+
.executableTarget(
32+
name: "createqueue",
33+
dependencies: [
34+
.product(name: "AWSSQS", package: "aws-sdk-swift"),
35+
.product(name: "ArgumentParser", package: "swift-argument-parser")
36+
],
37+
path: "Sources")
38+
39+
]
40+
)
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
//
4+
// An example demonstrating how to set up and use an Amazon Simple Queue
5+
// Service client to create an available Amazon SQS queue.
6+
7+
import ArgumentParser
8+
import AWSClientRuntime
9+
import AWSSQS
10+
import Foundation
11+
12+
struct ExampleCommand: ParsableCommand {
13+
@Argument(help: "The name of the Amazon SQS queue to create")
14+
var queueName: String
15+
@Option(help: "Name of the Amazon Region to use (default: us-east-1)")
16+
var region = "us-east-1"
17+
18+
static var configuration = CommandConfiguration(
19+
commandName: "createqueue",
20+
abstract: """
21+
This example shows how to create a new Amazon SQS queue.
22+
""",
23+
discussion: """
24+
"""
25+
)
26+
27+
/// Called by ``main()`` to run the bulk of the example.
28+
func runAsync() async throws {
29+
// snippet-start:[swift.sqs.CreateQueue]
30+
let config = try await SQSClient.SQSClientConfiguration(region: region)
31+
let sqsClient = SQSClient(config: config)
32+
33+
let output = try await sqsClient.createQueue(
34+
input: CreateQueueInput(
35+
queueName: queueName
36+
)
37+
)
38+
39+
guard let queueUrl = output.queueUrl else {
40+
print("No queue URL returned.")
41+
return
42+
}
43+
// snippet-end:[swift.sqs.CreateQueue]
44+
print("Created queue named \(queueName) with URL \(queueUrl).")
45+
}
46+
}
47+
48+
/// The program's asynchronous entry point.
49+
@main
50+
struct Main {
51+
static func main() async {
52+
let args = Array(CommandLine.arguments.dropFirst())
53+
54+
do {
55+
let command = try ExampleCommand.parse(args)
56+
try await command.runAsync()
57+
} catch {
58+
ExampleCommand.exit(withError: error)
59+
}
60+
}
61+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// swift-tools-version: 5.9
2+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
// SPDX-License-Identifier: Apache-2.0
4+
//
5+
// The swift-tools-version declares the minimum version of Swift required to
6+
// build this package.
7+
8+
import PackageDescription
9+
10+
let package = Package(
11+
name: "deletemessages",
12+
// Let Xcode know the minimum Apple platforms supported.
13+
platforms: [
14+
.macOS(.v13),
15+
.iOS(.v15)
16+
],
17+
dependencies: [
18+
// Dependencies declare other packages that this package depends on.
19+
.package(
20+
url: "https://github.com/awslabs/aws-sdk-swift",
21+
from: "1.0.0"),
22+
.package(
23+
url: "https://github.com/apple/swift-argument-parser.git",
24+
branch: "main"
25+
)
26+
],
27+
targets: [
28+
// Targets are the basic building blocks of a package, defining a module or a test suite.
29+
// Targets can depend on other targets in this package and products
30+
// from dependencies.
31+
.executableTarget(
32+
name: "deletemessages",
33+
dependencies: [
34+
.product(name: "AWSSQS", package: "aws-sdk-swift"),
35+
.product(name: "ArgumentParser", package: "swift-argument-parser")
36+
],
37+
path: "Sources")
38+
39+
]
40+
)
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
//
4+
// An example demonstrating how to set up and use an Amazon Simple Queue
5+
// Service client to delete messages from an Amazon SQS queue.
6+
7+
import ArgumentParser
8+
import AWSClientRuntime
9+
import AWSSQS
10+
import Foundation
11+
12+
struct ExampleCommand: ParsableCommand {
13+
@Option(help: "The URL of the Amazon SQS queue from which to delete messages")
14+
var queue: String
15+
@Argument(help: "Receipt handle(s) of the message(s) to delete")
16+
var handles: [String]
17+
@Option(help: "Name of the Amazon Region to use (default: us-east-1)")
18+
var region = "us-east-1"
19+
20+
static var configuration = CommandConfiguration(
21+
commandName: "deletemessages",
22+
abstract: """
23+
This example shows how to delete a batch of messages from an Amazon SQS queue.
24+
""",
25+
discussion: """
26+
"""
27+
)
28+
29+
/// Called by ``main()`` to run the bulk of the example.
30+
func runAsync() async throws {
31+
// snippet-start:[swift.sqs.DeleteMessageBatch]
32+
let config = try await SQSClient.SQSClientConfiguration(region: region)
33+
let sqsClient = SQSClient(config: config)
34+
35+
// Create the list of message entries.
36+
37+
var entries: [SQSClientTypes.DeleteMessageBatchRequestEntry] = []
38+
var messageNumber = 1
39+
40+
for handle in handles {
41+
let entry = SQSClientTypes.DeleteMessageBatchRequestEntry(
42+
id: "\(messageNumber)",
43+
receiptHandle: handle
44+
)
45+
entries.append(entry)
46+
messageNumber += 1
47+
}
48+
49+
// Delete the messages.
50+
51+
let output = try await sqsClient.deleteMessageBatch(
52+
input: DeleteMessageBatchInput(
53+
entries: entries,
54+
queueUrl: queue
55+
)
56+
)
57+
58+
// Get the lists of failed and successful deletions from the output.
59+
60+
guard let failedEntries = output.failed else {
61+
print("Failed deletion list is missing!")
62+
return
63+
}
64+
guard let successfulEntries = output.successful else {
65+
print("Successful deletion list is missing!")
66+
return
67+
}
68+
69+
// Display a list of the failed deletions along with their
70+
// corresponding explanation messages.
71+
72+
if failedEntries.count != 0 {
73+
print("Failed deletions:")
74+
75+
for entry in failedEntries {
76+
print("Message #\(entry.id ?? "<unknown>") failed: \(entry.message ?? "<unknown>")")
77+
}
78+
} else {
79+
print("No failed deletions.")
80+
}
81+
82+
// Output a list of the message numbers that were successfully deleted.
83+
84+
if successfulEntries.count != 0 {
85+
var successes = ""
86+
87+
for entry in successfulEntries {
88+
if successes.count == 0 {
89+
successes = entry.id ?? "<unknown>"
90+
} else {
91+
successes = "\(successes), \(entry.id ?? "<unknown>")"
92+
}
93+
}
94+
print("Succeeded: ", successes)
95+
} else {
96+
print("No successful deletions.")
97+
}
98+
99+
// snippet-end:[swift.sqs.DeleteMessageBatch]
100+
}
101+
}
102+
103+
/// The program's asynchronous entry point.
104+
@main
105+
struct Main {
106+
static func main() async {
107+
let args = Array(CommandLine.arguments.dropFirst())
108+
109+
do {
110+
let command = try ExampleCommand.parse(args)
111+
try await command.runAsync()
112+
} catch {
113+
ExampleCommand.exit(withError: error)
114+
}
115+
}
116+
}

0 commit comments

Comments
 (0)