Interlink Async framework
Interlink runs on the Tokio async runtime and structures portions of your app using "Services" which can be communicated with using "Links" which allow sending messages to Services that can then be handled
🚩 This project is in its very early infantcy so breaking changes are expected and at this stage its not entirely feature complete or tested
Adding the following cargo dependency to include interlink in your project
toml
[dependencies]
interlink = "0.1.0-alpha"
In order to get a link to a service and for the service to run you will first need to start the service
```rust use interlink::prelude::*;
/// Define your backing structure for the service you can use
/// the service derive macro here or implement the trait to
/// get access to the started
and stopping
hooks
struct Example;
// You must be within the tokio runtime to use interlink
async fn main() { // Create the service let service = Example {}; // Start the service to get a link to the service let link = service.start(); }
```
To communicate with services and between services you use messages below is an example of how to create and send messages.
```rust use interlink::prelude::*;
// Define your backing structure for the service
struct Example;
// The message struct with a string response type
struct TextMessage { value: String, }
/// Implement a handler for the message type
impl Handler
/// Basic response type which just responds with the value
type Response = Mr<TextMessage>
fn handle(
&mut self,
msg: TextMessage,
ctx: &mut ServiceContext<Self>
) -> Self::Response {
println!("Got message: {}", &msg.value);
Mr(msg.value)
}
}
// You must be within the tokio runtime to use interlink
async fn main() { // Create the service let service = Example {}; // Start the service to get a link to the service let link = service.start();
// Send the text message to the service and await the response
let res: String = link.send(TextMessage {
value: "Example".to_string(),
})
.await
.unwrap();
assert_eq!(&res, "Example");
// You can also send without waiting for a response
link.do_send(TextMessage {
value: "Example".to_string(),
})
.unwrap();
}
```