Change Logs - toy-rpc Book

# Change Log

## 0.8.4

- Unified all connection related error (read/write) to `Error::IoError(_)`

## 0.8.3

- Reverting back to 2018 edition

## 0.8.2

- Fixed a bug where attribute macros doesn't parse trait path and type path correctly

## 0.8.1

- Updated dependencies and corresponding examples
  - `axum` to the latest version
  - WebSocket dependencies like `tungstenite`, etc
  - TLS dependencies like `rustls`, etc.
- Switched from `async-rustls` to `futures-rustls`
- The error message of sending on a closed channel upon ending a client or server becomes a debug message now.

## 0.8.0

- Finalized features

## 0.8.0-beta

- Added AckMode impl
- Added attribute #[topic()] for derive macro #[derive(Topic)]
- Added integration with `axum`

## 0.8.0-alpha

### Breaking Changes

- Communication protocol is changed

### Non-breaking Changes

- Added pubsub support
- Added RPC trait implementation generation for client

## 0.7.4

- Fixed wrong documentation for `Client::with_stream<T>(stream: T)`

## 0.7.3 (yanked)

## 0.7.2

- Relaxed trait bounds on generic type `T` in `Client::with_stream<T>(stream: T)`

## 0.7.1

### Bug fix

- Fixed a bug where large payload is not written entirely with `tokio` runtime

## 0.7.0

### Breaking Changes

- The blocking RPC call on the client side is renamed to `call_blocking`
- The asynchronous RPC call on the client side is renamed to `call`
- The `call` method returns a `Call<Res>` type where `Res` represents the `Ok` type of result. The request is sent by a background task and thus the new `call` method is similar to the old `spawn_task` in terms of usage.

### New Features

- Cancellation. The `Call<Res>` type returned by the `call` method can be canceled by using the `cancel()` method.
- Timeout. A timeout can be set for the next request by calling `client.timeout(duration)`. only one request after setting the timeout is going to run with a timeout. If you want to set timeout for multiple requests, you need to set the timeout for each of them.

## 0.6.1

- Multiple objects of the same types can be registered on the same server again, but you will need to use the `ServerBuilder::register_with_name` method as opposed to the regular `ServerBuilder::register`. More details can be found in `ServerBuilder::register_with_name`'s documentation.

## 0.6.0

### Breaking Changes

- In short, this update makes the crate resemble closer to the usage of `go`'s `net/rpc` package
- Service registration is simplified to `Server::builder().register(foo_service).build()`. The examples will be updated accordingly. Thus
  - `service!()` macro will be deprecated
  - `register` function now takes only one argument, which is the instance of the service
  - on the client side, the service name will just be the name of the struct. for example, to call a RPC method on `struct Foo { }` service, the client simply uses `.async_call("Foo.<method>").await` where `<method>` should be replaced with the RPC method
  - you can still register multiple services on the same server. However, only one object of the same type can be registered on the same server. Multiple servers are needed to have multiple objects of the same type.
- Re-defined the custom `Error` type

### Non-breaking changes

- Fixed bug where client does not interpret error message correctly
- Fixed bug with `accept_websocket` crashes with incorrect protocol

## 0.5.4

- Handlers are now stored as a `fn` pointer as opposed to a trait object.

## 0.5.3

- The `#[export_impl]` macro now generates client stub functions by generating a new trait for `toy_rpc::Client`.

## 0.5.0

Breaking changes

- HTTP integration is now accomplished using WebSocket with `async_tungstenite`, and thus HTTP connections of versions <0.5.0 are not compatible with versions >=0.5.0.
- The custom binary transport protocol now includes a magic byte at the beginning, making versions <0.5.0 NOT compatible with versions >= 0.5.0;
- `toy_rpc::error::Error` changed from struct-like variants to simple enum variants
- Changes to feature flags
  - "logging" feature flag is removed
  - "surf" feature flag is removed
  - "tide" is changed to "http_tide"
  - "actix-web" is changed to "http_actix_web"
  - added "http_warp" feature flag
  - added "async_std_runtime"
  - added "tokio_runtime"

Non-breaking changes

- Removed `Stream` and `Sink` impl from the custom binary transport protocol `Frame`

## 0.4.5

- Added `Sink` implementation for the custom binary transport protocol `Frame`

## 0.4.4

- Modified traits `CodecRead`, `CodecWrite`, `ServerCodec`, `ClientCodec` to no longer return number of bytes written
- The number of bytes written for header and body will be logged separately

## 0.4.3

- Removed previously unused NoneError
- Unified `call`, `async_call` and `spawn_task` for socket client and HTTP client. The `call_http`, `async_call_http`, and `spawn_task_http` methods are kept for compatibility.

## 0.4.2

- Temporary fix of `spawn_task()` and `spawn_task_http()` with `Arc<Mutex<_>>` until lifetime with async task is figured out. As a result, `Client` no longer needs to be declared `mut`.

## 0.4.1

- Updated documentation

## 0.4.0

- Added `actix-web` feature flag to support integration with `actix-web`

## 0.3.1

- Added `serde_rmp` features flag
- Updated and corrected examples in the documentation

## 0.3.0

- Added `serde_cbor` feature flag
- Changed `bincode` feature flag to `serde_bincode`