based on simple "questions" and "answers" which can be implemented as simple functions. From the perspective of the client
(which sends "questions") the protocol is simply a set of async functions on a struct. From the perspective of the server
(which sends "answers") the protocol is a trait which it implements on any struct of its choice.
## Using Eagle
The way that `eagle` is designed to be used is inside a shared dependency between your "server" and your "client". Both of these should be in a workspace. Create a `shared` crate which both components should depend on. Inside this crate, you can
define your protocol as an enum:
```rs
use eagle::Protocol;
#[derive(Protocol)]
pub enum TestProtocol {
Addition((i32, i32), i32),
SomeKindOfQuestion(String, i32)
}
```
In your server, you will be able to implement this protocol for any struct (and in the future register it for communication):