I have installed Swift on Ubuntu ARM inside Docker and my package.Swift file looks like this:
// swift-tools-version:5.9.0
import PackageDescription
let package = Package(
name: "Swift-Test",
dependencies: [
.package(url: "https://github.com/apple/swift-nio.git", from: "2.0.0"),
.package(url: "https://github.com/apple/swift-nio-http2.git", from: "1.0.0"),
],
targets: [
.executableTarget(
name: "Swift-Test",
dependencies: [
.product(name: "NIO", package: "swift-nio"),
.product(name: "NIOHTTP2", package: "swift-nio-http2"),
],
path: "."
),
]
)
And I am trying to learn and play around with building a HTTP server, so my main file looks like:
import Foundation
import NIO
import NIOHTTP2
let group = MultiThreadedEventLoopGroup(numberOfThreads: System.coreCount)
do {
let bootstrap = try ServerBootstrap(group: group)
.serverChannelOption(ChannelOptions.socket(SocketOptionLevel(SOL_SOCKET), SO_REUSEADDR), value: 1)
.childChannelInitializer { channel in
let http2Handlers: [ChannelHandler] = [
NIOHTTP2Handler(mode: .server),
HelloWorldHandler() // Your custom handler for responding with "Hello, World!"
]
return channel.pipeline.addHandlers(http2Handlers)
}
.childChannelOption(ChannelOptions.socket(IPPROTO_TCP, TCP_NODELAY), value: 1)
.childChannelOption(ChannelOptions.socket(SocketOptionLevel(SOL_SOCKET), SO_REUSEADDR), value: 1)
let host = "127.0.0.1"
let port = 8080
let serverChannel = try bootstrap.bind(host: host, port: port).wait()
print("Server started and listening on \(serverChannel.localAddress!)")
try serverChannel.closeFuture.wait()
} catch {
print("Server error: \(error)")
}
// Custom handler to respond with "Hello, World!"
final class HelloWorldHandler: ChannelInboundHandler {
typealias InboundIn = HTTP2Frame.FramePayload
typealias OutboundOut = HTTP2Frame.FramePayload
func channelRead(context: ChannelHandlerContext, data: NIOAny) {
// Handle HTTP/2 requests and respond with "Hello, World!" as needed.
// You can inspect the HTTP/2 frames here.
}
}
However, when I run the following commands:
swift package clean
swift package resolve
swift build
I get a few warnings but, then if I run swift main.swift
I get this error: main.swift:2:8: error: no such module 'NIO' import NIO
I can see everything for NIO and NIOHTTP2 building but, my main file cannot import it correctly and I don't know why.
I am also using a flat directory, there are no folders, just my package file and a mian.swift
and the .build
.
I am new to Swift. Any ideas why I cannot use my NIO import?