Go to file
kjuulh b78423377c
All checks were successful
continuous-integration/drone/push Build is passing
docs: add examples
this is to show how we can use closures in the mad component context. It isn't super pretty because of the async closure, so we need to show the slighly complicated syntax

Signed-off-by: kjuulh <contact@kjuulh.io>
2024-08-07 17:09:52 +02:00
crates/mad docs: add examples 2024-08-07 17:09:52 +02:00
.drone.yml feat: add basic 2024-08-06 22:22:46 +02:00
.gitignore feat: add basic 2024-08-06 22:22:46 +02:00
Cargo.lock feat: add small docs 2024-08-07 16:44:12 +02:00
Cargo.toml chore(release): v0.4.0 (#5) 2024-08-07 16:51:15 +02:00
CHANGELOG.md chore(release): v0.4.0 (#5) 2024-08-07 16:51:15 +02:00
cuddle.yaml feat: add basic 2024-08-06 22:22:46 +02:00
README.md docs: add examples 2024-08-07 17:09:52 +02:00

MAD

Mad is a life-cycle manager for long running rust operations.

  • Webservers
  • Queue bindings
  • gRPC servers etc
  • Cron runners

It is supposed to be the main thing the application runs, and everything from it is spawned and managed by it.

struct WaitServer {}

#[async_trait]
impl Component for WaitServer {
    fn name(&self) -> Option<String> {
        Some("NeverEndingRun".into())
    }

    async fn run(&self, cancellation: CancellationToken) -> Result<(), mad::MadError> {
        let millis_wait = rand::thread_rng().gen_range(50..1000);

        // Simulates a server running for some time. Is normally supposed to be futures blocking indefinitely
        tokio::time::sleep(std::time::Duration::from_millis(millis_wait)).await;

        Ok(())
    }
}

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    Mad::builder()
        .add(WaitServer {})
        .add(WaitServer {})
        .add(WaitServer {})
        .run()
        .await?;

    Ok(())
}

Examples

Can be found (here)[crates/mad/examples]

  • basic
  • fn
  • signals
  • error_log