HTTP component

Swift MIT License Actions Status Codacy Badge Contributing Twitter

Installation

Swift

Download and install Swift

Swift Package

mkdir MyApp
cd MyApp
swift package init --type executable // Creates an executable app named "MyApp"

Package.swift

// swift-tools-version:5.3

import PackageDescription

let package = Package(
    name: "MyApp",
    dependencies: [
        .package(name: "chaqmoq-http", url: "https://github.com/chaqmoq/http.git", .branch("master"))
    ],
    targets: [
        .target(name: "MyApp", dependencies: [
            .product(name: "HTTP", package: "chaqmoq-http"),
        ]),
        .testTarget(name: "MyAppTests", dependencies: [
            .target(name: "MyApp")
        ])
    ]
)

Build

swift build -c release

Usage

main.swift

import HTTP

let server = Server()
server.onStart = { _ in
    print("Server has started")
}
server.onStop = {
    print("Server has stopped")
}
server.onError = { error, _ in
    print("Error: \(error)")
}
server.onReceive = { request, _ in
    // Return String, Response, EventLoopFuture<String>, EventLoopFuture<Response>, etc
}
try server.start()

onReceive

// String
server.onReceive = { request, _ in
    "Hello World"
}

// Response
server.onReceive = { request, _ in
    Response("Hello World")
}

// EventLoopFuture<String>
server.onReceive = { request, eventLoop in
    // Some async operation that returns EventLoopFuture<String>
    let promise = eventLoop.makePromise(of: String.self)
    eventLoop.execute {
        promise.succeed("Hello World")
    }

    return promise.futureResult
}

// EventLoopFuture<Response>
server.onReceive = { request, eventLoop in
    // Some async operation that returns EventLoopFuture<Response>
    let promise = eventLoop.makePromise(of: Response.self)
    eventLoop.execute {
        promise.succeed(Response("Hello World"))
    }

    return promise.futureResult
}

Run

swift run

Tests

swift test --enable-test-discovery --sanitize=thread