crush-cli 0.1.1

Command-line interface for the Crush compression library
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use crush_core::cancel::{AtomicCancellationToken, CancellationToken};
use std::sync::Arc;

/// Setup Ctrl+C signal handler
///
/// Returns a cancellation token that will be set when Ctrl+C is pressed.
/// This token can be passed to compression operations for graceful cancellation.
pub fn setup_handler() -> Result<Arc<dyn CancellationToken>, ctrlc::Error> {
    let token: Arc<dyn CancellationToken> = Arc::new(AtomicCancellationToken::new());
    let handler_token = token.clone();

    ctrlc::set_handler(move || {
        handler_token.cancel();
    })?;

    Ok(token)
}