4 releases

new 0.1.0 Feb 10, 2025
0.0.3 Feb 9, 2025
0.0.2 Dec 8, 2024
0.0.1 Dec 1, 2024
0.0.0 Nov 28, 2024

#206 in Configuration

49 downloads per month
Used in 4 crates

MIT/Apache

52KB
830 lines

scuffle-bootstrap

[!WARNING]
This crate is under active development and may not be stable.

crates.io docs.rs


A utility crate for creating binaries.

Refer to Global, Service, and main for more information.

Usage

use std::sync::Arc;

/// Our global state
struct Global;

// Required by the signal service
impl scuffle_signal::SignalConfig for Global {}

impl scuffle_bootstrap::global::GlobalWithoutConfig for Global {
    async fn init() -> anyhow::Result<Arc<Self>> {
        Ok(Arc::new(Self))
    }
}

/// Our own custom service
struct MySvc;

impl scuffle_bootstrap::service::Service<Global> for MySvc {
    async fn run(self, global: Arc<Global>, ctx: scuffle_context::Context) -> anyhow::Result<()> {
        println!("running");

        // Do some work here

        // Wait for the context to be cacelled by the signal service
        ctx.done().await;
        Ok(())
    }
}

// This generates the main function which runs all the services
scuffle_bootstrap::main! {
    Global {
        scuffle_signal::SignalSvc,
        MySvc,
    }
}

License

This project is licensed under the MIT or Apache-2.0 license. You can choose between one of them if you use this work.

SPDX-License-Identifier: MIT OR Apache-2.0

Dependencies

~4–11MB
~108K SLoC