# Mias

`MiasChannel` is a library for creating channels that can be used to send and receive messages between tasks.

Allowing for easy bi-directional communication between tasks. (Normal channel)
And allowing for oneshot responses to be sent back to the sender. (Responder channel)

`MiasChannel` at the moment only supports tokio. By wrapping the tokio channels in a more user friendly API for bi-directional communication.
It has a goal of supporting more channels in the future easily by using features to enable different channel implementations.

## Responder Channel

The responder channel is a channel that allows for a request to be sent to a receiver and for a response to be sent back to the sender.
This is useful for when you want to send a request to a task and get a response back.
The responder channel is implemented using a normal channel and oneshot channels. 

Is built on top of the normal channel and oneshot channels. In the future i want to replace the oneshot channels with a more efficient implementation.

### Responder Channel Example:
```rust
use mias_channel::responder_channel;

#[tokio::main]
async fn main() {
    let (tx, mut rx) = responder_channel::<i64, f64>(10);

    tokio::task::spawn(async move {
        while let Some((req, tx)) = rx.recv().await {
            tx.send(req as f64).unwrap();
        }
    });

    let res = tx.send(10).await;
}