mirror of
https://github.com/edera-dev/sprout.git
synced 2025-12-19 15:40:16 +00:00
implement new argument parser with --help support
This commit is contained in:
@@ -1,3 +1,7 @@
|
||||
use crate::options::parser::{OptionDescription, OptionForm, OptionsRepresentable};
|
||||
use anyhow::{Context, Result, bail};
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
/// The Sprout options parser.
|
||||
pub mod parser;
|
||||
|
||||
@@ -22,3 +26,59 @@ impl Default for SproutOptions {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// The options parser mechanism for Sprout.
|
||||
impl OptionsRepresentable for SproutOptions {
|
||||
/// Produce the [SproutOptions] structure.
|
||||
type Output = Self;
|
||||
|
||||
/// All the Sprout options that are defined.
|
||||
fn options() -> &'static [(&'static str, OptionDescription<'static>)] {
|
||||
&[
|
||||
(
|
||||
"config",
|
||||
OptionDescription {
|
||||
description: "Path to Sprout configuration file",
|
||||
form: OptionForm::Value,
|
||||
},
|
||||
),
|
||||
(
|
||||
"boot",
|
||||
OptionDescription {
|
||||
description: "Entry to boot, bypassing the menu",
|
||||
form: OptionForm::Value,
|
||||
},
|
||||
),
|
||||
(
|
||||
"help",
|
||||
OptionDescription {
|
||||
description: "Display Sprout Help",
|
||||
form: OptionForm::Help,
|
||||
},
|
||||
),
|
||||
]
|
||||
}
|
||||
|
||||
/// Produces [SproutOptions] from the parsed raw `options` map.
|
||||
fn produce(options: BTreeMap<String, Option<String>>) -> Result<Self> {
|
||||
// Use the default value of sprout options and have the raw options be parsed into it.
|
||||
let mut result = Self::default();
|
||||
|
||||
for (key, value) in options {
|
||||
match key.as_str() {
|
||||
"config" => {
|
||||
// The configuration file to load.
|
||||
result.config = value.context("--config option requires a value")?;
|
||||
}
|
||||
|
||||
"boot" => {
|
||||
// The entry to boot.
|
||||
result.boot = Some(value.context("--boot option requires a value")?);
|
||||
}
|
||||
|
||||
_ => bail!("unknown option: --{key}"),
|
||||
}
|
||||
}
|
||||
Ok(result)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user