micro-tower 0.1.0

micro-tower is a framework to generate and manage micro services.
Documentation
use std::convert::Infallible;

use micro_tower::prelude::*;
use micro_tower::ServiceBuilder;
use tower::load::CompleteOnResponse;
use tower::load::PendingRequests;

#[micro_tower::codegen::service]
async fn service_moc(request: usize, num: usize) -> usize {
    request + *num
}

#[tokio::test]
async fn call_pool() {
    let mut pool = ServiceBuilder::new()
        .pooled(4, ())
        .service_fn(|_| async move {
            let service = service_moc::builder().num(42).build();
            let service = PendingRequests::new(service, CompleteOnResponse::default());
            Ok::<_, Infallible>(service)
        });

    pool.ready().await.unwrap().call(22).await.unwrap();
}

#[tokio::test]
async fn multi_call_pool() {
    let mut pool = ServiceBuilder::new()
        .pooled(4, ())
        .service_fn(|_| async move {
            let service = service_moc::builder().num(42).build();
            let service = PendingRequests::new(service, CompleteOnResponse::default());
            Ok::<_, Infallible>(service)
        });

    for _ in 0..128 {
        let rep = pool.ready().await.unwrap().call(22).await.unwrap();
        assert_eq!(rep, 64);
    }
}