///|
async fn prompt_preferred_field(
label : String,
current : String?,
builtin_default : String,
) -> String? raise @core.CliError {
let current_display = preferred_display_value(current, builtin_default)
println("\{label} [\{current_display}] (press Enter to keep):")
guard read_line_from_stdin() is Some(line) else {
raise @core.cli_error("failed to read input from stdin")
}
let value = line.trim().to_owned()
guard !value.is_empty() else { current }
Some(value)
}
///|
fn preferred_display_value(
current : String?,
builtin_default : String,
) -> String {
current.unwrap_or(" (effective: \{builtin_default})")
}
///|
async fn PreferredConfig::interactive_prompt(
self : PreferredConfig,
) -> PreferredConfig raise @core.CliError {
let username = prompt_preferred_field(
"default username",
self.username,
"prompt on new/init",
)
let license = prompt_preferred_field(
"default license",
self.license,
@core.DEFAULT_LICENSE,
)
let host = prompt_preferred_field(
"default host",
self.host,
@core.DEFAULT_HOST,
)
let preferred_target = prompt_preferred_field(
"default target",
self.preferred_target,
@core.DEFAULT_TARGET,
)
{ username, license, host, preferred_target, }
}
///|
async fn configure_preferred_defaults() -> Unit raise @core.CliError {
let (preferred_file, preferred) = load_current_preferences()
println("configure preferred defaults")
println("leave input empty to keep existing preference")
let updated_preferred = preferred.interactive_prompt()
updated_preferred.save(preferred_file)
println("updated preferences in \{preferred_file}")
}
///|
async fn show_preferred_defaults() -> Unit raise @core.CliError {
let (preferred_file, preferred) = load_current_preferences()
let username = preferred_display_value(
preferred.username,
"prompt on new/init",
)
let license = preferred_display_value(
preferred.license,
@core.DEFAULT_LICENSE,
)
let host = preferred_display_value(preferred.host, @core.DEFAULT_HOST)
let preferred_target = preferred_display_value(
preferred.preferred_target,
@core.DEFAULT_TARGET,
)
println(
(
$|current preferences
$|file: \{preferred_file}
$|username: \{username}
$|license: \{license}
$|host: \{host}
$|target: \{preferred_target}
),
)
}