Crate scuffle_signal

Source
Expand description

A crate designed to provide a more user friendly interface to tokio::signal.

§Why do we need this?

The tokio::signal module provides a way for us to wait for a signal to be received in a non-blocking way. This crate extends that with a more helpful interface allowing the ability to listen to multiple signals concurrently.

§Example

use scuffle_signal::SignalHandler;
use tokio::signal::unix::SignalKind;

let mut handler = SignalHandler::new()
    .with_signal(SignalKind::interrupt())
    .with_signal(SignalKind::terminate());

// Wait for a signal to be received
let signal = handler.await;

// Handle the signal
let interrupt = SignalKind::interrupt();
let terminate = SignalKind::terminate();
match signal {
    interrupt => {
        // Handle SIGINT
        println!("received SIGINT");
    },
    terminate => {
        // Handle SIGTERM
        println!("received SIGTERM");
    },
}

§Status

This crate is currently under development and is not yet stable.

Unit tests are not yet fully implemented. Use at your own risk.

§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

Structs§

SignalHandler
A handler for listening to multiple signals, and providing a future for receiving them.
SignalSvc
A Service that listens for signals and cancels the context when a signal is received.
UnixSignalKind
Represents the specific kind of signal to listen for.

Enums§

SignalKind
The type of signal to listen for.

Traits§

SignalConfig
Configuration for the signal service.