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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
//! Runtime preferences derived from parsed CLI flags.
//!
//! These accessors translate the raw policy flags carried by
//! [`Cli`](super::command::Cli) into the preference values the runner and
//! presentation layers consume. They live beside the command schema rather
//! than inside it so that [`super::command`] keeps a dependency surface narrow
//! enough for `build.rs` to compile on its own.
use super::command::Cli;
use super::{AccessibilityPolicy, EmojiPolicy, ProgressPolicy};
use crate::theme::ThemePreference;
impl Cli {
/// Return the effective theme preference for emoji policy resolution.
///
/// # Examples
///
/// ```
/// use netsuke::cli::{Cli, EmojiPolicy};
/// use netsuke::theme::ThemePreference;
///
/// let cli = Cli {
/// emoji: EmojiPolicy::Always,
/// ..Cli::default()
/// };
///
/// assert_eq!(cli.theme_preference(), Some(ThemePreference::Unicode));
/// ```
#[must_use]
pub const fn theme_preference(&self) -> Option<ThemePreference> {
match self.emoji {
EmojiPolicy::Auto => None,
EmojiPolicy::Always => Some(ThemePreference::Unicode),
EmojiPolicy::Never => Some(ThemePreference::Ascii),
}
}
/// Return an explicit accessible-output override, if configured.
///
/// # Examples
///
/// ```
/// use netsuke::cli::{AccessibilityPolicy, Cli};
///
/// let cli = Cli {
/// accessibility: AccessibilityPolicy::On,
/// ..Cli::default()
/// };
///
/// assert_eq!(cli.accessibility_override(), Some(true));
/// ```
#[must_use]
pub const fn accessibility_override(&self) -> Option<bool> {
match self.accessibility {
AccessibilityPolicy::Auto => None,
AccessibilityPolicy::On => Some(true),
AccessibilityPolicy::Off => Some(false),
}
}
/// Return whether interactive input is disabled.
///
/// # Examples
///
/// ```
/// use netsuke::cli::Cli;
///
/// assert!(Cli::default().no_input());
/// ```
#[must_use]
pub const fn no_input(&self) -> bool {
self.interaction.no_input
}
/// Return whether progress summaries should be enabled.
///
/// # Examples
///
/// ```
/// use netsuke::cli::{Cli, ProgressPolicy};
///
/// let cli = Cli {
/// progress: ProgressPolicy::Never,
/// ..Cli::default()
/// };
///
/// assert!(!cli.progress_enabled());
/// ```
#[must_use]
pub const fn progress_enabled(&self) -> bool {
!matches!(self.progress, ProgressPolicy::Never)
}
}