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}