eagle (0.1.0)
Installation
[registry]
default = "gitea"
[registries.gitea]
index = "sparse+ " # Sparse index
# index = " " # Git
[net]
git-fetch-with-cli = true
cargo add eagle@0.1.0
About this package
Eagle
Disclaimer
Eagle is still in development and not currently usable. The current state is barely a proof of concept.
What is Eagle?
Eagle is a library designed to make "full-stack" applications with Rust. It allows you to define a communication protocl 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:
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):
use shared::TestProtocolServer;
pub struct Server;
impl TestProtocolServer for Server {
fn addition(&mut self, a: i32, b: i32) -> i32 {
a + b
}
fn some_kind_of_question(&mut self, question: String) -> i32 {
42
}
}
In your client, you can use an instance of the client struct to query the server:
use shared::TestProtocolClient;
#[tokio::main]
async fn main() {
let client = TestProtocolClient::new();
assert_eq!(client.addition(2, 2).await, 4);
}
License
Eagle is licensed under the AGPL (GNU Affero General Public License). To learn more, read LICENSE.md
Dependencies
ID | Version |
---|---|
proc-macro2 | ^1.0.85 |
quote | ^1.0.36 |
syn | ^2.0.66 |
tokio | ^1.38.0 |