This is an automated email from the ASF dual-hosted git repository. dgrove pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/openwhisk-runtime-swift.git
The following commit(s) were added to refs/heads/master by this push: new 027bb83 Support array result include sequence action (#150) 027bb83 is described below commit 027bb83e926d9d7d8780606a2f9bd4723267a6a5 Author: ningyougang <415622...@qq.com> AuthorDate: Mon Aug 15 21:43:18 2022 +0800 Support array result include sequence action (#150) --- README.md | 27 ++++++++++- core/swift51Action/Dockerfile | 8 ++-- core/swift51Action/main.swift | 5 ++- core/swift51Action/swiftbuild.py.launcher.swift | 4 +- core/swift53Action/Dockerfile | 8 ++-- core/swift53Action/main.swift | 5 ++- core/swift53Action/swiftbuild.py.launcher.swift | 4 +- core/swift54Action/Dockerfile | 8 ++-- core/swift54Action/main.swift | 5 ++- core/swift54Action/swiftbuild.py.launcher.swift | 4 +- examples/swift-main-single/main.swift | 7 +-- .../swift-main-zip/HelloSwift4/Sources/main.swift | 4 +- tests/dat/actions/HelloSwift5/Sources/main.swift | 5 ++- tests/dat/actions/SwiftyRequest/Sources/main.swift | 4 +- .../dat/actions/SwiftyRequest5/Sources/main.swift | 4 +- tests/dat/actions/sdk/swift4/createRule.swift | 11 ++--- tests/dat/actions/sdk/swift4/createTrigger.swift | 7 +-- tests/dat/actions/sdk/swift4/hello.swift | 5 ++- tests/dat/actions/sdk/swift4/invoke.swift | 5 ++- .../dat/actions/sdk/swift4/invokeNonBlocking.swift | 5 ++- tests/dat/actions/sdk/swift4/trigger.swift | 7 +-- tests/dat/actions/sdk/swift5/createRule.swift | 11 ++--- tests/dat/actions/sdk/swift5/createTrigger.swift | 7 +-- tests/dat/actions/sdk/swift5/hello.swift | 5 ++- tests/dat/actions/sdk/swift5/invoke.swift | 5 ++- .../dat/actions/sdk/swift5/invokeNonBlocking.swift | 5 ++- tests/dat/actions/sdk/swift5/trigger.swift | 7 +-- .../Swift51ActionContainerTests.scala | 5 ++- .../Swift53ActionContainerTests.scala | 5 ++- .../Swift54ActionContainerTests.scala | 5 ++- .../SwiftActionContainerTests.scala | 52 ++++++++++++++++++---- .../SwiftCodableActionContainerTests.scala | 2 +- 32 files changed, 165 insertions(+), 86 deletions(-) diff --git a/README.md b/README.md index 1942676..b46e800 100644 --- a/README.md +++ b/README.md @@ -33,8 +33,9 @@ The traditional support for the dictionary still works: ```swift import Foundation -func main(args: [String:Any]) -> [String:Any] { - if let name = args["name"] as? String { +func main(args: Any) -> Any { + let dict = args as! [String:Any] + if let name = dict["name"] as? String { return [ "greeting" : "Hello \(name)!" ] } else { return [ "greeting" : "Hello stranger!" ] @@ -42,6 +43,28 @@ func main(args: [String:Any]) -> [String:Any] { } ``` +For the return result, not only support `dictionary`, but also support `array` + +So a very simple `hello array` function woule be: + +```swift +func main(args: Any) -> Any { + var arr = ["a", "b"] + return arr +} +``` + +And support array result for sequence action as well, the first action's array result can be used as next action's input parameter. + +So the function can be: + +```swift + func main(args: Any) -> Any { + return args + } +``` +When invokes above action, we can pass an array object as the input parameter. + ## Swift 5.x support Some examples of using Codable In and Out diff --git a/core/swift51Action/Dockerfile b/core/swift51Action/Dockerfile index 99c742c..8175a05 100644 --- a/core/swift51Action/Dockerfile +++ b/core/swift51Action/Dockerfile @@ -16,7 +16,7 @@ # # build go proxy from source -FROM golang:1.16 AS builder_source +FROM golang:1.18 AS builder_source ARG GO_PROXY_GITHUB_USER=apache ARG GO_PROXY_GITHUB_BRANCH=master RUN git clone --branch ${GO_PROXY_GITHUB_BRANCH} \ @@ -25,13 +25,13 @@ RUN git clone --branch ${GO_PROXY_GITHUB_BRANCH} \ mv proxy /bin/proxy # or build it from a release -FROM golang:1.16 AS builder_release -ARG GO_PROXY_RELEASE_VERSION=1.16@1.19.0 +FROM golang:1.18 AS builder_release +ARG GO_PROXY_RELEASE_VERSION=1.18@1.20.0 RUN curl -sL \ https://github.com/apache/openwhisk-runtime-go/archive/{$GO_PROXY_RELEASE_VERSION}.tar.gz\ | tar xzf -\ && cd openwhisk-runtime-go-*/main\ - && GO111MODULE=on go build -o /bin/proxy + && GO111MODULE=on CGO_ENABLED=0 go build -o /bin/proxy FROM swift:5.1.5 diff --git a/core/swift51Action/main.swift b/core/swift51Action/main.swift index 75071a3..2c6b1de 100644 --- a/core/swift51Action/main.swift +++ b/core/swift51Action/main.swift @@ -15,8 +15,9 @@ * limitations under the License. */ -func main(args: [String:Any]) -> [String:Any] { - if let name = args["name"] as? String { +func main(args: Any) -> Any { + let newArgs = args as! [String:Any] + if let name = newArgs["name"] as? String { return [ "greeting" : "Hello \(name)!" ] } else { return [ "greeting" : "Hello stranger!" ] diff --git a/core/swift51Action/swiftbuild.py.launcher.swift b/core/swift51Action/swiftbuild.py.launcher.swift index 3405777..5260280 100644 --- a/core/swift51Action/swiftbuild.py.launcher.swift +++ b/core/swift51Action/swiftbuild.py.launcher.swift @@ -43,9 +43,9 @@ func _whisk_print_buffer(jsonString: String){ } // snippet of code "injected" (wrapper code for invoking traditional main) -func _run_main(mainFunction: ([String: Any]) -> [String: Any], json: Data) -> Void { +func _run_main(mainFunction: (Any) -> Any, json: Data) -> Void { do { - let parsed = try JSONSerialization.jsonObject(with: json, options: []) as! [String: Any] + let parsed = try JSONSerialization.jsonObject(with: json, options: []) let result = mainFunction(parsed) if JSONSerialization.isValidJSONObject(result) { do { diff --git a/core/swift53Action/Dockerfile b/core/swift53Action/Dockerfile index 9807280..cc91019 100644 --- a/core/swift53Action/Dockerfile +++ b/core/swift53Action/Dockerfile @@ -16,7 +16,7 @@ # # build go proxy from source -FROM golang:1.16 AS builder_source +FROM golang:1.18 AS builder_source ARG GO_PROXY_GITHUB_USER=apache ARG GO_PROXY_GITHUB_BRANCH=master RUN git clone --branch ${GO_PROXY_GITHUB_BRANCH} \ @@ -25,13 +25,13 @@ RUN git clone --branch ${GO_PROXY_GITHUB_BRANCH} \ mv proxy /bin/proxy # or build it from a release -FROM golang:1.16 AS builder_release -ARG GO_PROXY_RELEASE_VERSION=1.16@1.19.0 +FROM golang:1.18 AS builder_release +ARG GO_PROXY_RELEASE_VERSION=1.18@1.20.0 RUN curl -sL \ https://github.com/apache/openwhisk-runtime-go/archive/{$GO_PROXY_RELEASE_VERSION}.tar.gz\ | tar xzf -\ && cd openwhisk-runtime-go-*/main\ - && GO111MODULE=on go build -o /bin/proxy + && GO111MODULE=on CGO_ENABLED=0 go build -o /bin/proxy FROM swift:5.3 diff --git a/core/swift53Action/main.swift b/core/swift53Action/main.swift index 75071a3..2c6b1de 100644 --- a/core/swift53Action/main.swift +++ b/core/swift53Action/main.swift @@ -15,8 +15,9 @@ * limitations under the License. */ -func main(args: [String:Any]) -> [String:Any] { - if let name = args["name"] as? String { +func main(args: Any) -> Any { + let newArgs = args as! [String:Any] + if let name = newArgs["name"] as? String { return [ "greeting" : "Hello \(name)!" ] } else { return [ "greeting" : "Hello stranger!" ] diff --git a/core/swift53Action/swiftbuild.py.launcher.swift b/core/swift53Action/swiftbuild.py.launcher.swift index 3405777..5260280 100644 --- a/core/swift53Action/swiftbuild.py.launcher.swift +++ b/core/swift53Action/swiftbuild.py.launcher.swift @@ -43,9 +43,9 @@ func _whisk_print_buffer(jsonString: String){ } // snippet of code "injected" (wrapper code for invoking traditional main) -func _run_main(mainFunction: ([String: Any]) -> [String: Any], json: Data) -> Void { +func _run_main(mainFunction: (Any) -> Any, json: Data) -> Void { do { - let parsed = try JSONSerialization.jsonObject(with: json, options: []) as! [String: Any] + let parsed = try JSONSerialization.jsonObject(with: json, options: []) let result = mainFunction(parsed) if JSONSerialization.isValidJSONObject(result) { do { diff --git a/core/swift54Action/Dockerfile b/core/swift54Action/Dockerfile index d330660..f1f4a7f 100644 --- a/core/swift54Action/Dockerfile +++ b/core/swift54Action/Dockerfile @@ -16,7 +16,7 @@ # # build go proxy from source -FROM golang:1.16 AS builder_source +FROM golang:1.18 AS builder_source ARG GO_PROXY_GITHUB_USER=apache ARG GO_PROXY_GITHUB_BRANCH=master RUN git clone --branch ${GO_PROXY_GITHUB_BRANCH} \ @@ -25,13 +25,13 @@ RUN git clone --branch ${GO_PROXY_GITHUB_BRANCH} \ mv proxy /bin/proxy # or build it from a release -FROM golang:1.16 AS builder_release -ARG GO_PROXY_RELEASE_VERSION=1.16@1.19.0 +FROM golang:1.18 AS builder_release +ARG GO_PROXY_RELEASE_VERSION=1.18@1.20.0 RUN curl -sL \ https://github.com/apache/openwhisk-runtime-go/archive/{$GO_PROXY_RELEASE_VERSION}.tar.gz\ | tar xzf -\ && cd openwhisk-runtime-go-*/main\ - && GO111MODULE=on go build -o /bin/proxy + && GO111MODULE=on CGO_ENABLED=0 go build -o /bin/proxy FROM swift:5.4 diff --git a/core/swift54Action/main.swift b/core/swift54Action/main.swift index 75071a3..2c6b1de 100644 --- a/core/swift54Action/main.swift +++ b/core/swift54Action/main.swift @@ -15,8 +15,9 @@ * limitations under the License. */ -func main(args: [String:Any]) -> [String:Any] { - if let name = args["name"] as? String { +func main(args: Any) -> Any { + let newArgs = args as! [String:Any] + if let name = newArgs["name"] as? String { return [ "greeting" : "Hello \(name)!" ] } else { return [ "greeting" : "Hello stranger!" ] diff --git a/core/swift54Action/swiftbuild.py.launcher.swift b/core/swift54Action/swiftbuild.py.launcher.swift index 3405777..5260280 100644 --- a/core/swift54Action/swiftbuild.py.launcher.swift +++ b/core/swift54Action/swiftbuild.py.launcher.swift @@ -43,9 +43,9 @@ func _whisk_print_buffer(jsonString: String){ } // snippet of code "injected" (wrapper code for invoking traditional main) -func _run_main(mainFunction: ([String: Any]) -> [String: Any], json: Data) -> Void { +func _run_main(mainFunction: (Any) -> Any, json: Data) -> Void { do { - let parsed = try JSONSerialization.jsonObject(with: json, options: []) as! [String: Any] + let parsed = try JSONSerialization.jsonObject(with: json, options: []) let result = mainFunction(parsed) if JSONSerialization.isValidJSONObject(result) { do { diff --git a/examples/swift-main-single/main.swift b/examples/swift-main-single/main.swift index 9a7aaf8..2de8dcb 100644 --- a/examples/swift-main-single/main.swift +++ b/examples/swift-main-single/main.swift @@ -15,15 +15,16 @@ * limitations under the License. */ -func main(args: [String:Any]) -> [String:Any] { - if let name = args["name"] as? String { +func main(args: Any) -> Any { + let newArgs = args as! [String:Any] + if let name = newArgs["name"] as? String { return [ "greeting" : "Hello \(name)!" ] } else { return [ "greeting" : "Hello swif4.2!" ] } } -func mainenv(args: [String: Any]) -> [String: Any] { +func mainenv(args: Any) -> Any { let env = ProcessInfo.processInfo.environment var a = "???" var b = "???" diff --git a/examples/swift-main-zip/HelloSwift4/Sources/main.swift b/examples/swift-main-zip/HelloSwift4/Sources/main.swift index 6237c80..7ba5e13 100644 --- a/examples/swift-main-zip/HelloSwift4/Sources/main.swift +++ b/examples/swift-main-zip/HelloSwift4/Sources/main.swift @@ -15,8 +15,8 @@ # limitations under the License. # -func main(args: [String:Any]) -> [String:Any] { - if let name = args["name"] as? String { +func main(args: Any) -> Any { + if let name = newArgs["name"] as? String { return [ "greeting" : "Hello \(name)!" ] } else { return [ "greeting" : "Hello stranger!" ] diff --git a/tests/dat/actions/HelloSwift5/Sources/main.swift b/tests/dat/actions/HelloSwift5/Sources/main.swift index a8bfed4..4d927ec 100644 --- a/tests/dat/actions/HelloSwift5/Sources/main.swift +++ b/tests/dat/actions/HelloSwift5/Sources/main.swift @@ -17,8 +17,9 @@ import Foundation -func main(args: [String:Any]) -> [String:Any] { - if let name = args["name"] as? String { +func main(args: Any) -> Any { + let newArgs = args as! [String:Any] + if let name = newArgs["name"] as? String { return [ "greeting" : "Hello \(name)!" ] } else { return [ "greeting" : "Hello stranger!" ] diff --git a/tests/dat/actions/SwiftyRequest/Sources/main.swift b/tests/dat/actions/SwiftyRequest/Sources/main.swift index 35de61e..e145587 100644 --- a/tests/dat/actions/SwiftyRequest/Sources/main.swift +++ b/tests/dat/actions/SwiftyRequest/Sources/main.swift @@ -19,12 +19,12 @@ import SwiftyRequest import Dispatch import Foundation -func main(args: [String:Any]) -> [String:Any] { +func main(args: Any) -> Any { var resp :[String:Any] = ["error":"Action failed"] let echoURL = "http://httpbin.org/post" // setting body data to {"Data":"string"} - let origJson: [String: Any] = args + let origJson = args as! [String:Any] guard let data = try? JSONSerialization.data(withJSONObject: origJson, options: []) else { return ["error": "Could not encode json"] } diff --git a/tests/dat/actions/SwiftyRequest5/Sources/main.swift b/tests/dat/actions/SwiftyRequest5/Sources/main.swift index 8aac40a..7afe444 100644 --- a/tests/dat/actions/SwiftyRequest5/Sources/main.swift +++ b/tests/dat/actions/SwiftyRequest5/Sources/main.swift @@ -19,12 +19,12 @@ import SwiftyRequest import Dispatch import Foundation -func main(args: [String:Any]) -> [String:Any] { +func main(args: Any) -> Any { var resp :[String:Any] = ["error":"Action failed"] let echoURL = "http://httpbin.org/post" // setting body data to {"Data":"string"} - let origJson: [String: Any] = args + let origJson = args as! [String:Any] guard let data = try? JSONSerialization.data(withJSONObject: origJson, options: []) else { return ["error": "Could not encode json"] } diff --git a/tests/dat/actions/sdk/swift4/createRule.swift b/tests/dat/actions/sdk/swift4/createRule.swift index 6c8895f..f02c31e 100644 --- a/tests/dat/actions/sdk/swift4/createRule.swift +++ b/tests/dat/actions/sdk/swift4/createRule.swift @@ -15,18 +15,19 @@ * limitations under the License. */ -func main(args: [String:Any]) -> [String:Any] { - if let baseUrl = args["baseUrl"] as? String { +func main(args: Any) -> Any { + let newArgs = args as! [String:Any] + if let baseUrl = newArgs["baseUrl"] as? String { //Overriding WHISK API HOST using baseUrl, only applicable in testing with self sign ssl certs" Whisk.baseUrl = baseUrl } - guard let triggerName = args["triggerName"] as? String else { + guard let triggerName = newArgs["triggerName"] as? String else { return ["error": "You must specify a triggerName parameter!"] } - guard let actionName = args["actionName"] as? String else { + guard let actionName = newArgs["actionName"] as? String else { return ["error": "You must specify a actionName parameter!"] } - guard let ruleName = args["ruleName"] as? String else { + guard let ruleName = newArgs["ruleName"] as? String else { return ["error": "You must specify a ruleName parameter!"] } print("Rule Name: \(ruleName), Trigger Name: \(triggerName), actionName: \(actionName)") diff --git a/tests/dat/actions/sdk/swift4/createTrigger.swift b/tests/dat/actions/sdk/swift4/createTrigger.swift index 097497e..93075ba 100644 --- a/tests/dat/actions/sdk/swift4/createTrigger.swift +++ b/tests/dat/actions/sdk/swift4/createTrigger.swift @@ -15,12 +15,13 @@ * limitations under the License. */ -func main(args: [String:Any]) -> [String:Any] { - if let baseUrl = args["baseUrl"] as? String { +func main(args: Any) -> Any { + let newArgs = args as! [String:Any] + if let baseUrl = newArgs["baseUrl"] as? String { //Overriding WHISK API HOST using baseUrl, only applicable in testing with self sign ssl certs" Whisk.baseUrl = baseUrl } - guard let triggerName = args["triggerName"] as? String else { + guard let triggerName = newArgs["triggerName"] as? String else { return ["error": "You must specify a triggerName parameter!"] } print("Trigger Name: \(triggerName)") diff --git a/tests/dat/actions/sdk/swift4/hello.swift b/tests/dat/actions/sdk/swift4/hello.swift index 75071a3..2c6b1de 100644 --- a/tests/dat/actions/sdk/swift4/hello.swift +++ b/tests/dat/actions/sdk/swift4/hello.swift @@ -15,8 +15,9 @@ * limitations under the License. */ -func main(args: [String:Any]) -> [String:Any] { - if let name = args["name"] as? String { +func main(args: Any) -> Any { + let newArgs = args as! [String:Any] + if let name = newArgs["name"] as? String { return [ "greeting" : "Hello \(name)!" ] } else { return [ "greeting" : "Hello stranger!" ] diff --git a/tests/dat/actions/sdk/swift4/invoke.swift b/tests/dat/actions/sdk/swift4/invoke.swift index 5afca75..222f1ab 100644 --- a/tests/dat/actions/sdk/swift4/invoke.swift +++ b/tests/dat/actions/sdk/swift4/invoke.swift @@ -26,8 +26,9 @@ struct Activation: Decodable { let activationId: String } -func main(args: [String:Any]) -> [String:Any] { - if let baseUrl = args["baseUrl"] as? String { +func main(args: Any) -> Any { + let newArgs = args as! [String:Any] + if let baseUrl = newArgs["baseUrl"] as? String { //Overriding WHISK API HOST using baseUrl, only applicable in testing with self sign ssl certs" Whisk.baseUrl = baseUrl } diff --git a/tests/dat/actions/sdk/swift4/invokeNonBlocking.swift b/tests/dat/actions/sdk/swift4/invokeNonBlocking.swift index b81c308..68f3b39 100644 --- a/tests/dat/actions/sdk/swift4/invokeNonBlocking.swift +++ b/tests/dat/actions/sdk/swift4/invokeNonBlocking.swift @@ -19,8 +19,9 @@ struct Activation: Decodable { let activationId: String } -func main(args: [String:Any]) -> [String:Any] { - if let baseUrl = args["baseUrl"] as? String { +func main(args: Any) -> Any { + let newArgs = args as! [String:Any] + if let baseUrl = newArgs["baseUrl"] as? String { //Overriding WHISK API HOST using baseUrl, only applicable in testing with self sign ssl certs" Whisk.baseUrl = baseUrl } diff --git a/tests/dat/actions/sdk/swift4/trigger.swift b/tests/dat/actions/sdk/swift4/trigger.swift index a7307f3..4d9649a 100644 --- a/tests/dat/actions/sdk/swift4/trigger.swift +++ b/tests/dat/actions/sdk/swift4/trigger.swift @@ -15,12 +15,13 @@ * limitations under the License. */ -func main(args: [String:Any]) -> [String:Any] { - if let baseUrl = args["baseUrl"] as? String { +func main(args: Any) -> Any { + let newArgs = args as! [String:Any] + if let baseUrl = newArgs["baseUrl"] as? String { //Overriding WHISK API HOST using baseUrl, only applicable in testing with self sign ssl certs" Whisk.baseUrl = baseUrl } - if let triggerName = args["triggerName"] as? String { + if let triggerName = newArgs ["triggerName"] as? String { print("Trigger Name: \(triggerName)") return Whisk.trigger(eventNamed: triggerName, withParameters: [:]) } else { diff --git a/tests/dat/actions/sdk/swift5/createRule.swift b/tests/dat/actions/sdk/swift5/createRule.swift index 7f7a88b..b2751e0 100644 --- a/tests/dat/actions/sdk/swift5/createRule.swift +++ b/tests/dat/actions/sdk/swift5/createRule.swift @@ -17,18 +17,19 @@ import Foundation -func main(args: [String:Any]) -> [String:Any] { - if let baseUrl = args["baseUrl"] as? String { +func main(args: Any) -> Any { + let newArgs = args as! [String:Any] + if let baseUrl = newArgs["baseUrl"] as? String { //Overriding WHISK API HOST using baseUrl, only applicable in testing with self sign ssl certs" Whisk.baseUrl = baseUrl } - guard let triggerName = args["triggerName"] as? String else { + guard let triggerName = newArgs["triggerName"] as? String else { return ["error": "You must specify a triggerName parameter!"] } - guard let actionName = args["actionName"] as? String else { + guard let actionName = newArgs["actionName"] as? String else { return ["error": "You must specify a actionName parameter!"] } - guard let ruleName = args["ruleName"] as? String else { + guard let ruleName = newArgs["ruleName"] as? String else { return ["error": "You must specify a ruleName parameter!"] } print("Rule Name: \(ruleName), Trigger Name: \(triggerName), actionName: \(actionName)") diff --git a/tests/dat/actions/sdk/swift5/createTrigger.swift b/tests/dat/actions/sdk/swift5/createTrigger.swift index bd3e497..fc24508 100644 --- a/tests/dat/actions/sdk/swift5/createTrigger.swift +++ b/tests/dat/actions/sdk/swift5/createTrigger.swift @@ -17,12 +17,13 @@ import Foundation -func main(args: [String:Any]) -> [String:Any] { - if let baseUrl = args["baseUrl"] as? String { +func main(args: Any) -> Any { + let newArgs = args as! [String:Any] + if let baseUrl = newArgs["baseUrl"] as? String { //Overriding WHISK API HOST using baseUrl, only applicable in testing with self sign ssl certs" Whisk.baseUrl = baseUrl } - guard let triggerName = args["triggerName"] as? String else { + guard let triggerName = newArgs["triggerName"] as? String else { return ["error": "You must specify a triggerName parameter!"] } print("Trigger Name: \(triggerName)") diff --git a/tests/dat/actions/sdk/swift5/hello.swift b/tests/dat/actions/sdk/swift5/hello.swift index a8bfed4..4d927ec 100644 --- a/tests/dat/actions/sdk/swift5/hello.swift +++ b/tests/dat/actions/sdk/swift5/hello.swift @@ -17,8 +17,9 @@ import Foundation -func main(args: [String:Any]) -> [String:Any] { - if let name = args["name"] as? String { +func main(args: Any) -> Any { + let newArgs = args as! [String:Any] + if let name = newArgs["name"] as? String { return [ "greeting" : "Hello \(name)!" ] } else { return [ "greeting" : "Hello stranger!" ] diff --git a/tests/dat/actions/sdk/swift5/invoke.swift b/tests/dat/actions/sdk/swift5/invoke.swift index ba03066..3992a00 100644 --- a/tests/dat/actions/sdk/swift5/invoke.swift +++ b/tests/dat/actions/sdk/swift5/invoke.swift @@ -28,8 +28,9 @@ struct Activation: Decodable { let activationId: String } -func main(args: [String:Any]) -> [String:Any] { - if let baseUrl = args["baseUrl"] as? String { +func main(args: Any) -> Any { + let newArgs = args as! [String:Any] + if let baseUrl = newArgs["baseUrl"] as? String { //Overriding WHISK API HOST using baseUrl, only applicable in testing with self sign ssl certs" Whisk.baseUrl = baseUrl } diff --git a/tests/dat/actions/sdk/swift5/invokeNonBlocking.swift b/tests/dat/actions/sdk/swift5/invokeNonBlocking.swift index 043e0b4..cb3507e 100644 --- a/tests/dat/actions/sdk/swift5/invokeNonBlocking.swift +++ b/tests/dat/actions/sdk/swift5/invokeNonBlocking.swift @@ -21,8 +21,9 @@ struct Activation: Decodable { let activationId: String } -func main(args: [String:Any]) -> [String:Any] { - if let baseUrl = args["baseUrl"] as? String { +func main(args: Any) -> Any { + let newArgs = args as! [String:Any] + if let baseUrl = newArgs["baseUrl"] as? String { //Overriding WHISK API HOST using baseUrl, only applicable in testing with self sign ssl certs" Whisk.baseUrl = baseUrl } diff --git a/tests/dat/actions/sdk/swift5/trigger.swift b/tests/dat/actions/sdk/swift5/trigger.swift index 0481e23..2459247 100644 --- a/tests/dat/actions/sdk/swift5/trigger.swift +++ b/tests/dat/actions/sdk/swift5/trigger.swift @@ -17,12 +17,13 @@ import Foundation -func main(args: [String:Any]) -> [String:Any] { - if let baseUrl = args["baseUrl"] as? String { +func main(args: Any) -> Any { + let newArgs = args as! [String:Any] + if let baseUrl = newArgs["baseUrl"] as? String { //Overriding WHISK API HOST using baseUrl, only applicable in testing with self sign ssl certs" Whisk.baseUrl = baseUrl } - if let triggerName = args["triggerName"] as? String { + if let triggerName = newArgs["triggerName"] as? String { print("Trigger Name: \(triggerName)") return Whisk.trigger(eventNamed: triggerName, withParameters: [:]) } else { diff --git a/tests/src/test/scala/runtime/actionContainers/Swift51ActionContainerTests.scala b/tests/src/test/scala/runtime/actionContainers/Swift51ActionContainerTests.scala index 183f867..af58421 100644 --- a/tests/src/test/scala/runtime/actionContainers/Swift51ActionContainerTests.scala +++ b/tests/src/test/scala/runtime/actionContainers/Swift51ActionContainerTests.scala @@ -37,9 +37,10 @@ class Swift51ActionContainerTests extends SwiftActionContainerTests { | #if canImport(FoundationNetworking) | import FoundationNetworking | #endif - | func main(args:[String: Any]) -> [String:Any] { + | func main(args: Any) -> Any { | var resp :[String:Any] = ["error":"getUrl failed"] - | guard let urlStr = args["getUrl"] as? String else { + | let newArgs = args as! [String:Any] + | guard let urlStr = newArgs["getUrl"] as? String else { | return ["error":"getUrl not found in action input"] | } | guard let url = URL(string: urlStr) else { diff --git a/tests/src/test/scala/runtime/actionContainers/Swift53ActionContainerTests.scala b/tests/src/test/scala/runtime/actionContainers/Swift53ActionContainerTests.scala index 0814f9a..3acf7ac 100644 --- a/tests/src/test/scala/runtime/actionContainers/Swift53ActionContainerTests.scala +++ b/tests/src/test/scala/runtime/actionContainers/Swift53ActionContainerTests.scala @@ -37,9 +37,10 @@ class Swift53ActionContainerTests extends SwiftActionContainerTests { | #if canImport(FoundationNetworking) | import FoundationNetworking | #endif - | func main(args:[String: Any]) -> [String:Any] { + | func main(args: Any) -> Any { | var resp :[String:Any] = ["error":"getUrl failed"] - | guard let urlStr = args["getUrl"] as? String else { + | let newArgs = args as! [String:Any] + | guard let urlStr = newArgs["getUrl"] as? String else { | return ["error":"getUrl not found in action input"] | } | guard let url = URL(string: urlStr) else { diff --git a/tests/src/test/scala/runtime/actionContainers/Swift54ActionContainerTests.scala b/tests/src/test/scala/runtime/actionContainers/Swift54ActionContainerTests.scala index 4ae7358..e4487e1 100644 --- a/tests/src/test/scala/runtime/actionContainers/Swift54ActionContainerTests.scala +++ b/tests/src/test/scala/runtime/actionContainers/Swift54ActionContainerTests.scala @@ -37,9 +37,10 @@ class Swift54ActionContainerTests extends SwiftActionContainerTests { | #if canImport(FoundationNetworking) | import FoundationNetworking | #endif - | func main(args:[String: Any]) -> [String:Any] { + | func main(args: Any) -> Any { | var resp :[String:Any] = ["error":"getUrl failed"] - | guard let urlStr = args["getUrl"] as? String else { + | let newArgs = args as! [String:Any] + | guard let urlStr = newArgs["getUrl"] as? String else { | return ["error":"getUrl not found in action input"] | } | guard let url = URL(string: urlStr) else { diff --git a/tests/src/test/scala/runtime/actionContainers/SwiftActionContainerTests.scala b/tests/src/test/scala/runtime/actionContainers/SwiftActionContainerTests.scala index 147baa7..421be38 100644 --- a/tests/src/test/scala/runtime/actionContainers/SwiftActionContainerTests.scala +++ b/tests/src/test/scala/runtime/actionContainers/SwiftActionContainerTests.scala @@ -50,7 +50,7 @@ abstract class SwiftActionContainerTests extends BasicActionRunnerTests with Wsk override val testInitCannotBeCalledMoreThanOnce = { TestConfig(""" - | func main(args: [String: Any]) -> [String: Any] { + | func main(args: Any) -> Any { | return args | } """.stripMargin) @@ -59,7 +59,7 @@ abstract class SwiftActionContainerTests extends BasicActionRunnerTests with Wsk override val testEntryPointOtherThanMain = { TestConfig( """ - | func niam(args: [String: Any]) -> [String: Any] { + | func niam(args: Any) -> Any { | return args | } """.stripMargin, @@ -78,7 +78,7 @@ abstract class SwiftActionContainerTests extends BasicActionRunnerTests with Wsk | } | } | - | func main(args: [String: Any]) -> [String: Any] { + | func main(args: Any) -> Any { | print("hello stdout") | var standardError = FileHandle.standardError | print("hello stderr", to: &standardError) @@ -89,8 +89,9 @@ abstract class SwiftActionContainerTests extends BasicActionRunnerTests with Wsk override val testUnicode = { TestConfig(""" - | func main(args: [String: Any]) -> [String: Any] { - | if let str = args["delimiter"] as? String { + | func main(args: Any) -> Any { + | let newArgs = args as! [String:Any] + | if let str = newArgs["delimiter"] as? String { | let msg = "\(str) ☃ \(str)" | print(msg) | return [ "winter" : msg ] @@ -104,7 +105,7 @@ abstract class SwiftActionContainerTests extends BasicActionRunnerTests with Wsk override val testEnv = { TestConfig( """ - | func main(args: [String: Any]) -> [String: Any] { + | func main(args: Any) -> Any { | let env = ProcessInfo.processInfo.environment | var a = "???" | var b = "???" @@ -142,7 +143,7 @@ abstract class SwiftActionContainerTests extends BasicActionRunnerTests with Wsk override val testLargeInput = { TestConfig(""" - | func main(args: [String: Any]) -> [String: Any] { + | func main(args: Any) -> Any { | return args | } """.stripMargin) @@ -151,7 +152,7 @@ abstract class SwiftActionContainerTests extends BasicActionRunnerTests with Wsk it should "support application errors" in { val (out, err) = withActionContainer() { c => val code = """ - | func main(args: [String: Any]) -> [String: Any] { + | func main(args: Any) -> Any { | return [ "error": "sorry" ] | } """.stripMargin @@ -220,6 +221,41 @@ abstract class SwiftActionContainerTests extends BasicActionRunnerTests with Wsk }) } + it should "support return array result" in { + val (out, err) = withActionContainer() { c => + val code = """ + | func main(args: Any) -> Any { + | var arr = ["a", "b"] + | return arr + | } + """.stripMargin + + val (initCode, _) = c.init(initPayload(code)) + initCode should be(200) + + val (runCode, runRes) = c.runForJsArray(runPayload(JsObject())) + runCode should be(200) + runRes shouldBe Some(JsArray(JsString("a"), JsString("b"))) + } + } + + it should "support array as input param" in { + val (out, err) = withActionContainer() { c => + val code = """ + | func main(args: Any) -> Any { + | return args + | } + """.stripMargin + + val (initCode, _) = c.init(initPayload(code)) + initCode should be(200) + + val (runCode, runRes) = c.runForJsArray(runPayload(JsArray(JsString("a"), JsString("b")))) + runCode should be(200) + runRes shouldBe Some(JsArray(JsString("a"), JsString("b"))) + } + } + // Helpers specific to swift actions override def withActionContainer(env: Map[String, String] = Map.empty)(code: ActionContainer => Unit) = { withContainer(swiftContainerImageName, env)(code) diff --git a/tests/src/test/scala/runtime/actionContainers/SwiftCodableActionContainerTests.scala b/tests/src/test/scala/runtime/actionContainers/SwiftCodableActionContainerTests.scala index e455d99..0b3a55c 100644 --- a/tests/src/test/scala/runtime/actionContainers/SwiftCodableActionContainerTests.scala +++ b/tests/src/test/scala/runtime/actionContainers/SwiftCodableActionContainerTests.scala @@ -198,7 +198,7 @@ abstract class SwiftCodableActionContainerTests extends BasicActionRunnerTests w """.stripMargin } else { """ - | func main(args: [String: Any]) -> [String: Any] { + | func main(args: Any) -> Any { | return args | } """.stripMargin