use std::fmt::Display;
pub enum HelpType {
None,
Set,
Get,
List,
Info,
Update,
}
impl HelpType {
fn print_help(f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
writeln!(f, "π Usage: cargo kconfig <subcommand> {{...}}")?;
writeln!(f, " cargo kconfig <subcommand> --help")?;
writeln!(f, "")?;
writeln!(f, "Cargo Kconfig supports the following subcommands:")?;
writeln!(f, "")?;
writeln!(f, "config-set Sets cargo-kconfig configuration values")?;
writeln!(f, "config-get Gets cargo-kconfig configuration values")?;
writeln!(f, "ls | list Shows the menu items for a given level")?;
writeln!(f, "update Updates a configuration item to a new value")?;
Ok(())
}
fn print_config_set_help(f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
writeln!(f, "π Usage: cargo kconfig config-set input <KCONFIG_PATH>")?;
writeln!(
f,
" cargo kconfig config-set output <DOTCONFIG_PATH>"
)?;
writeln!(f, "")?;
writeln!(
f,
"KCONFIG_PATH - The path of an (alternative) Kconfig configuration file to use"
)?;
writeln!(
f,
"DOTCONFIG_PATH - The path of an (alternative) .config output file to use"
)?;
Ok(())
}
fn print_config_get_help(f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
writeln!(f, "π Usage: cargo kconfig config-get list")?;
writeln!(f, " cargo kconfig config-get input")?;
writeln!(f, " cargo kconfig config-get output")?;
Ok(())
}
fn print_list_help(f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
writeln!(f, "π Usage: cargo kconfig list {{...NAME}}")?;
writeln!(f, " cargo kconfig ls {{...NAME}}")?;
writeln!(f, "")?;
writeln!(f, "NAME - The name of a configuration menu")?;
Ok(())
}
fn print_info_help(f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
writeln!(f, "π Usage: cargo kconfig info {{NAME}}")?;
writeln!(f, "")?;
writeln!(f, "NAME - The name of a configuration item")?;
Ok(())
}
fn print_update_help(f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
writeln!(f, "π Usage: cargo kconfig update {{NAME}}")?;
writeln!(f, "")?;
writeln!(f, "NAME - The name of a configuration item")?;
Ok(())
}
}
impl Display for HelpType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
HelpType::None => Self::print_help(f),
HelpType::Set => Self::print_config_set_help(f),
HelpType::Get => Self::print_config_get_help(f),
HelpType::List => Self::print_list_help(f),
HelpType::Info => Self::print_info_help(f),
HelpType::Update => Self::print_update_help(f),
}
}
}