Crate scuffle_signal

Source
Expand description

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

See the changelog for a full release history.

§Feature flags

  • bootstrap — Enables scuffle-bootstrap support
  • docs — Enables changelog and documentation of feature flags

§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");
    },
}

§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

Modules§

changelog
Changelogs generated by scuffle_changelog

Traits§

SignalConfigbootstrap
Configuration for the signal service.

Structs§

SignalSvcbootstrap
A [Service] that listens for signals and cancels the context when a signal is received.

Enums§

SignalKind
The type of signal to listen for.

Structs§

SignalHandler
A handler for listening to multiple signals, and providing a future for receiving them.
UnixSignalKindUnix
Represents the specific kind of signal to listen for.