Struct shutdown::Shutdown

source ·
pub struct Shutdown { /* private fields */ }

Implementations§

source§

impl Shutdown

source

pub fn new() -> Result<Self, Error>

Create a new shutdown signal. In most cases the signal will be triggered when CTRL-C is pressed and the process receives a SIGINT or SIGTERM signal. If needed you can also call signal to send a shutdown signal programmatically.

Examples
use shutdown::Shutdown;

let root = Shutdown::new().unwrap();
source

pub fn branch(&self) -> Self

Create a new branch (child) that can be signalled independent of the root (parent). When the root (or parent to be more precise) is signalled, the new branch (and any child branches) will also be signalled.

Examples
use shutdown::Shutdown;

let root = Shutdown::new().unwrap();
let branch = root.branch();

// Signal a specific branch
branch.signal();
source

pub fn subscribe(&self) -> Self

Create a new subscriber (sibling) that listens to an existing root (or previously created branch) for any shutdown signals.

Examples
use shutdown::Shutdown;

let root = Shutdown::new().unwrap();
let subscriber = root.subscribe();
source

pub fn is_signalled(&self) -> bool

Returns true if a shutdown signal has been received.

Examples
use shutdown::Shutdown;

let root = Shutdown::new().unwrap();

while !root.is_signalled() {
    // Do stuff...
}
source

pub fn signal(&self)

Manually signal the root or a branch. This causes all connected subscribers and any child branches to be signalled as well.

Examples
use shutdown::Shutdown;

let root = Shutdown::new().unwrap();
let branch = root.branch();

// Trigger a signal from code
root.signal();
source

pub async fn signalled(&self)

Block until a shutdown signal is received. This can, for example, be used in a select to block to wait for a long running task while still being able to respond to a shutdown signal.

Examples
use shutdown::Shutdown;
use tokio::time::{sleep, Duration};

#[tokio::main]
async fn main() {
    let mut root = Shutdown::new().unwrap();

    tokio::select! {
        _ = root.signalled() => (),
        _ = sleep(Duration::from_secs(300)) => (), // Long runnnig task
    }
}

Trait Implementations§

source§

impl Clone for Shutdown

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Shutdown

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.