Fastly Compute@Edge Quickstart for Swift
This is an example Fastly Compute@Edge app using Andrew Barba’s Swift Compute Runtime SDK.
It’s designed to demonistrate some simple functionality:
- Routing
- Accessing request object (method, url, headers)
- Writing repsponse (JSON and text)
- Setting response status (200 vs. 404)
See the SDK Reference for more info.
Synopsis
The following is the code for this demo.
import Compute
struct Response: Codable {
let version: Int
let message: String
}
@main
struct ComputeApp {
static func main() async throws {
try await onIncomingRequest { req, res in
let logger = try Logger(name: "QuickstartLog")
switch (req.method, req.url.path) {
case (.post, "/quickstart"):
if let accept = req.headers.get("Accept") {
if accept.caseInsensitiveCompare("text/plain") == .orderedSame {
try logger.write("swift quickstart responded with 200")
try await res.status(200).send("Hello, Swift World!")
return
}
}
let content = Response(version: 1, message: "Hello, Swift World!")
try logger.write("swift quickstart responded with 200")
try await res.status(200).send(content)
default:
try logger.write("swift quickstart responded with 404")
try await res.status(404).send()
}
}
}
}
Prerequisites
Usage
$ fastly compute init
$ /Library/Developer/Toolchains/swift-wasm-5.6.0-RELEASE.xctoolchain/usr/bin/swift build --triple wasm32-unknown-wasi --product FastlyComputeQuickstart -c release
$ fastly compute pack --wasm-binary=./.build/release/FastlyComputeQuickstart.wasm
$ fastly compute deploy