Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

orbstack/SwiftJSONRPC

Repository files navigation

SwiftJSONRPC

Usage

Defining a Service

import SwiftJSONRPC
class UserService: RPCService {
 func vote(rating: Int) async throws -> Int {
 return try await invoke("vote", params: ["rating": rating])
 }
 func create(name: String) async throws -> User {
 return try await invoke("create", params: ["name": name])
 }
 // And other JSON-RPC methods
}

You can define as many services as you want depending on your requirements.

Making a Request

// Init JSON-RPC client
let url = URL(string: "http://example.com/rpc")!
let client = RPCClient(url: url)
// Init JSON-RPC service
let service = MyService(client: client)
// Perform request
try await service.vote(rating: 5)

Result Decoding

SwiftJSONRPC uses Swift's Decodable protocol to decode response objects.

struct User: Decodable {
 let id: String
 let name: String
}
class UserService: RPCService {
 func getCurrentUser() async throws -> User {
 return try await invoke("getCurrentUser")
 }
}
let user = try await userService.getCurrentUser()
print("Current user ID = \(user.id), name = \(user.name)")

If you need to modify JSONDecoder's behaviour, use RPCClient.coder.resultDecoder for that.

client.coder.resultDecoder.dateDecodingStrategy = .iso8601

Params Encoding

SwiftJSONRPC uses Swift's Encodable protocol to encode request params.

struct Message: Encodable {
 let text: String
}
class MessageService: RPCService {
 func send(message: Message) async throws {
 return try await invoke("sendMessage", params: message)
 }
}
let message = Message(text: "Hello World")
try await messageService.send(message: message)

If you need to modify JSONEncoder's behaviour, use RPCClient.coder.paramsEncoder for that.

client.coder.paramsEncoder.dateDecodingStrategy = .iso8601

Installation

CocoaPods

SwiftJSONRPC is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod "SwiftJSONRPC"

Carthage

github "kolyasev/SwiftJSONRPC"

Swift Package Manager

dependencies: [
 .package(url: "https://github.com/kolyasev/SwiftJSONRPC.git", .upToNextMajor(from: "0.9.0"))
]

ToDo

  • Add support for notification request object without an "id" member.

Author

Denis Kolyasev, kolyasev@gmail.com

License

SwiftJSONRPC is available under the MIT license. See the LICENSE file for more info.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Swift 97.4%
  • Ruby 1.5%
  • Objective-C 1.1%

AltStyle によって変換されたページ (->オリジナル) /