A simple Swift library for JSON-RPC
Features:
dependencies: [
.package(url: "https://github.com/ChimeHQ/JSONRPC", from: "0.9.0")
]
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
}
}
The closures on the DataChannel
allow different transport mechanisms to be used. The JSONRPC
package provides a few basic variants:
let channel = await DataChannel.predefinedMessagesChannel(with: messages)
stdout
, eg using print
let channel = DataChannel.stdioPipe()
let (clientChannel, serverChannel) = DataChannel.withDataActor()
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.
link |
Stars: 21 |
Last commit: 7 weeks ago |
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