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
//! Task timeout types.

use serde::{Deserialize, Serialize};
use time::Duration;

/// A timeout policy for a given task.
#[derive(Debug, Default, Clone, Copy, Serialize, Deserialize)]
pub enum TimeoutPolicy {
    /// Never time out.
    #[default]
    Never,
    /// The timeout duration applies from the
    /// task target.
    FromTarget {
        /// The timeout duration.
        timeout: Duration,
    },
}

impl TimeoutPolicy {
    /// Set a timeout duration that applies after
    /// the task target.
    #[must_use]
    pub fn from_target(timeout: Duration) -> Self {
        Self::FromTarget { timeout }
    }
}

impl From<Duration> for TimeoutPolicy {
    fn from(timeout: Duration) -> Self {
        Self::FromTarget { timeout }
    }
}