1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//! This crate provides a way of defining an interface for a background service.
//!
//! The main entrypoint of this create is [`cancellable::Cancellable`] trait. It
//! is an [`async-trait`](https://docs.rs/async-trait/latest/async_trait/) that
//! depends on [tokio](https://tokio.rs).
//!
//! # Examples
//!
//! ```
//! use std::{error::Error, net::SocketAddr};
//!
//! use cancellable::{async_trait, Cancellable, CancellationResult};
//! use tokio::net::{TcpListener, TcpStream};
//!
//! struct Listener {
//! tcp_listener: TcpListener,
//! }
//!
//! impl Listener {
//! async fn new() -> Result<Self, Box<dyn Error>> {
//! let tcp_listener = TcpListener::bind("127.0.0.1:5000").await?;
//!
//! Ok(Self { tcp_listener })
//! }
//! }
//!
//! #[async_trait]
//! impl Cancellable for Listener {
//! type Result = (TcpStream, SocketAddr);
//! type Handle = ();
//! type Error = std::io::Error;
//!
//! async fn new_handle(&mut self) -> Self::Handle {}
//!
//! async fn run(&mut self) -> Result<CancellationResult<Self::Result>, Self::Error> {
//! let (addr, stream) = self.tcp_listener.accept().await?;
//!
//! Ok(CancellationResult::item((addr, stream)))
//! }
//! }
//! ```
pub use crateCancellable;
pub use crateCancellableHandle;
pub use crateCancellationResult;
pub use async_trait;
pub use CancellationToken;