use super::{AccessibilityPolicy, ColourPolicy, EmojiPolicy, ProgressPolicy};
#[derive(Debug, Clone, Copy)]
pub(crate) struct PolicyDefinition<T> {
pub(crate) spelling: &'static str,
pub(crate) variant: T,
pub(crate) description: &'static str,
}
pub(crate) fn definition_for<T: Copy + Eq>(
variant: T,
definitions: &[PolicyDefinition<T>],
) -> Option<PolicyDefinition<T>> {
definitions
.iter()
.copied()
.find(|definition| definition.variant == variant && !definition.description.is_empty())
}
pub(crate) fn parse_policy<T: Copy>(raw: &str, definitions: &[PolicyDefinition<T>]) -> Option<T> {
definitions
.iter()
.find(|definition| definition.spelling.eq_ignore_ascii_case(raw))
.map(|definition| definition.variant)
}
pub(crate) const COLOUR_POLICY_DEFINITIONS: [PolicyDefinition<ColourPolicy>; 3] = [
PolicyDefinition {
spelling: "auto",
variant: ColourPolicy::Auto,
description: "Follow the host environment",
},
PolicyDefinition {
spelling: "always",
variant: ColourPolicy::Always,
description: "Force colour output on when available",
},
PolicyDefinition {
spelling: "never",
variant: ColourPolicy::Never,
description: "Force colour output off",
},
];
pub(crate) const PROGRESS_POLICY_DEFINITIONS: [PolicyDefinition<ProgressPolicy>; 3] = [
PolicyDefinition {
spelling: "auto",
variant: ProgressPolicy::Auto,
description: "Follow Netsuke's default progress behaviour",
},
PolicyDefinition {
spelling: "always",
variant: ProgressPolicy::Always,
description: "Force progress rendering on",
},
PolicyDefinition {
spelling: "never",
variant: ProgressPolicy::Never,
description: "Disable progress rendering",
},
];
pub(crate) const EMOJI_POLICY_DEFINITIONS: [PolicyDefinition<EmojiPolicy>; 3] = [
PolicyDefinition {
spelling: "auto",
variant: EmojiPolicy::Auto,
description: "Follow the host environment and accessibility mode",
},
PolicyDefinition {
spelling: "always",
variant: EmojiPolicy::Always,
description: "Force emoji glyphs on",
},
PolicyDefinition {
spelling: "never",
variant: EmojiPolicy::Never,
description: "Disable emoji glyphs",
},
];
pub(crate) const ACCESSIBILITY_POLICY_DEFINITIONS: [PolicyDefinition<AccessibilityPolicy>; 3] = [
PolicyDefinition {
spelling: "auto",
variant: AccessibilityPolicy::Auto,
description: "Follow terminal and environment detection",
},
PolicyDefinition {
spelling: "on",
variant: AccessibilityPolicy::On,
description: "Force accessible output on",
},
PolicyDefinition {
spelling: "off",
variant: AccessibilityPolicy::Off,
description: "Force accessible output off",
},
];