Swiftpack.co - ChimeHQ/JSONRPC as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by ChimeHQ.
ChimeHQ/JSONRPC 0.9.0
Swift library for JSON-RPC
⭐️ 24
🕓 27 weeks ago
iOS macOS watchOS tvOS
.package(url: "https://github.com/ChimeHQ/JSONRPC.git", from: "0.9.0")

Build Status Platforms Documentation

JSONRPC

A simple Swift library for JSON-RPC

Features:

  • type-safety
  • flexible data transport support
  • concurrency support

Integration

dependencies: [
    .package(url: "https://github.com/ChimeHQ/JSONRPC", from: "0.9.0")
]

Usage

The core type you'll use is JSONRPCSession. It requires you set up a DataChannel object that handles reading and writing raw data.

let channel = DataChannel(...)
let session = JSONRPCSession(channel: channel)

let params = "hello" // any Encodable
let response: Decodable = try await session.sendRequest(params, method: "my_method")

Task {
    for await (request, handler, data) in session.requestSequence {
        // inspect request, possibly re-decode with more specific type,
        // and reply using the handler
    }
}

Task {
    for await (notification, data) in session.notificationSequence {
        // inspect notification
    }
}

DataChannel

The closures on the DataChannel allow different transport mechanisms to be used. The JSONRPC package provides a few basic variants:

  • Predefined messages channel
    • A channel that delivers a static set of messages
    • Usage: let channel = await DataChannel.predefinedMessagesChannel(with: messages)
  • Stdio channel
    • Using stdout + stdin as message transport.
    • Note: When using this transport, make sure no non-protocol messages are sent to stdout, eg using print
    • Usage: let channel = DataChannel.stdioPipe()
  • Actor channel
    • Using swift actors to pass messages.
    • Can eg be useful for testing, where both client and server are implemented in swift and running in the same process.
    • Usage: let (clientChannel, serverChannel) = DataChannel.withDataActor()
  • WebSocket channel
    • Uses URLSessionWebSocketTask as a message transport.
    • Usage: let channel = DataChannel.webSocket(url: socketURL, terminationHandler: { print("socket closed" })

Contributing and Collaboration

I'd love to hear from you! Get in touch via an issue or pull request.

I prefer collaboration, and would love to find ways to work together if you have a similar project.

I prefer indentation with tabs for improved accessibility. But, I'd rather you use the system you want and make a PR than hesitate because of whitespace.

By participating in this project you agree to abide by the Contributor Code of Conduct.

GitHub

link
Stars: 24
Last commit: 13 weeks ago
Advertisement: IndiePitcher.com - Cold Email Software for Startups

Release Notes

v0.9.0
26 weeks ago

What's Changed

New Contributors

Full Changelog: https://github.com/ChimeHQ/JSONRPC/compare/0.8.1...0.9.0

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics