Skip to main content

clawless_core/context/
interactivity.rs

1/// Whether a user is present who can answer the application
2///
3/// The code that builds the [`Context`] sets this value. The default is [`NonInteractive`], so
4/// a context reports a user only when that code found one.
5///
6/// # Examples
7///
8/// ```
9/// use clawless_core::context::Interactivity;
10///
11/// let interactivity = Interactivity::default();
12/// assert_eq!(interactivity, Interactivity::NonInteractive);
13/// ```
14///
15/// [`Context`]: super::Context
16/// [`NonInteractive`]: Interactivity::NonInteractive
17#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default)]
18pub enum Interactivity {
19    /// A user is present and can answer
20    Interactive,
21    /// No user can answer
22    #[default]
23    NonInteractive,
24}
25
26#[cfg(test)]
27mod tests {
28    // An assertion in a test panics by design. A `# Panics` section on every test
29    // would repeat that and give the reader no information.
30    #![allow(clippy::missing_panics_doc)]
31
32    use super::*;
33
34    #[test]
35    fn default_is_non_interactive() {
36        let interactivity = Interactivity::default();
37
38        assert_eq!(interactivity, Interactivity::NonInteractive);
39    }
40
41    #[test]
42    fn trait_send() {
43        fn assert_send<T: Send>() {}
44        assert_send::<Interactivity>();
45    }
46
47    #[test]
48    fn trait_sync() {
49        fn assert_sync<T: Sync>() {}
50        assert_sync::<Interactivity>();
51    }
52
53    #[test]
54    fn trait_unpin() {
55        fn assert_unpin<T: Unpin>() {}
56        assert_unpin::<Interactivity>();
57    }
58}