App

The app macro generates code that link all the other components together.

#[tokio::main]
async fn main() -> Result<(), darpi::Error> {
    let address = format!("127.0.0.1:{}", 3000);
    app!({
        address: address,
        container: {
            factory: make_container(),
            type: Container
        },
        middleware: {
            request: [body_size_limit(128), decompress()],
            response: []
        },
        jobs: {
            request: [],
            response: [first_sync_job, first_sync_job1, first_sync_io_job]
        },
        handlers: [
            {
                route: "/",
                method: Method::GET,
                handler: home
            },
        ]
    })
    .run()
    .await
}

Lets break it down.

address can be either a String or a &'static str

container has a factory function, which is used to create a shaku container and a type (supports arguments too), which is the return type of the factory.

middleware, jobs and handlers we will tackle in the next chapters.