dipper_macros 0.1.1

Code generation for the dipper dependency injection framework
Documentation
# dipper

An out-of-the-box modular dependency injection web application framework.

[![Crates.io](https://img.shields.io/crates/v/dipper)](https://crates.io/crates/dipper)
[![Documentation](https://shields.io/docsrs/dipper)](https://docs.rs/dipper)
[![License](https://img.shields.io/crates/l/dipper)](https://github.com/andeya/dipper?tab=MIT-1-ov-file)

## Install

Run the following Cargo command in your project directory:

```sh
cargo add dipper
```

Or add the following line to your Cargo.toml:

```toml
dipper = "0.1.0"
```

## Example

```rust
#![allow(missing_docs)]

use dipper::mode::ENV_EDOP_MODE;
use dipper::prelude::*;
use std::env;
use std::sync::Arc;

#[tokio::main]
async fn main() {
    env::set_var(ENV_EDOP_MODE, "test");
    new_app![Calculate].with_component_parameters::<Calculate>(CalculateParameters { state: 1 }).run().await;
}

pub trait Module: Interface {
    fn add(&self, left: i64, right: i64) -> i64;
}

#[derive(Clone)]
#[dipper(Module)]
pub struct Calculate {
    state: i64,
}

impl Interface for Calculate {
    fn manifest(&self) -> Manifest {
        Manifest::default().with_name("Calculate".to_owned()).with_summary("Calculate. For example, addition.".to_owned())
    }

    fn route(self: Arc<Self>, blank_router: Router) -> Router {
        blank_router
            .path("calculate")
            .push(Router::with_path("add1").get(self.add1()))
            .push(Router::with_path("add2").get(self.add2()))
            .push(Router::with_path("add3").get(Self::add3()))
    }
}

impl Module for Calculate {
    fn add(&self, left: i64, right: i64) -> i64 {
        ({ self.state + left + right }).instrument(info_span!("add")).into_inner()
    }
}

#[dipper]
impl Calculate {
    /// doc line 1
    /// doc line 2
    #[dipper(handler)]
    fn add1(&self, left: QueryParam<i64>, right: QueryParam<i64>) -> String {
        self.add(*left, *right).to_string()
    }
    /// doc line 3
    /// doc line 4
    #[dipper(endpoint)]
    pub(crate) fn add2(self: ::std::sync::Arc<Self>, left: QueryParam<i64>, right: QueryParam<i64>) -> String {
        self.add(*left, *right).to_string()
    }
    /// doc line 5
    /// doc line 6
    #[dipper(endpoint(responses((status_code = 400, description = "Wrong request parameters."))))]
    pub fn add3(left: QueryParam<i64>, right: QueryParam<i64>) -> String {
        (*left + *right).to_string()
    }
}
```

Browse `http://localhost:8888/swagger-ui` and open the OpenAPI online test.