aboutsummaryrefslogtreecommitdiff
path: root/mingling
diff options
context:
space:
mode:
Diffstat (limited to 'mingling')
-rw-r--r--mingling/src/parser/picker.rs1
-rw-r--r--mingling/src/parser/picker/builtin.rs13
2 files changed, 14 insertions, 0 deletions
diff --git a/mingling/src/parser/picker.rs b/mingling/src/parser/picker.rs
index 725d4e6..b0cdb70 100644
--- a/mingling/src/parser/picker.rs
+++ b/mingling/src/parser/picker.rs
@@ -14,6 +14,7 @@ pub mod path;
///
/// The `Picker` struct holds parsed arguments and provides a fluent interface
/// to extract values associated with specific flags.
+#[derive(Default)]
pub struct Picker {
/// The parsed command-line arguments.
pub args: Argument,
diff --git a/mingling/src/parser/picker/builtin.rs b/mingling/src/parser/picker/builtin.rs
index 9fbbfd1..e7a178d 100644
--- a/mingling/src/parser/picker/builtin.rs
+++ b/mingling/src/parser/picker/builtin.rs
@@ -60,6 +60,7 @@ impl Pickable for bool {
}
}
+/// Special: parses a size string (e.g. "10MB") into a `usize` representing the number of bytes.
impl Pickable for usize {
type Output = usize;
@@ -73,6 +74,7 @@ impl Pickable for usize {
}
}
+/// Special: parses a comma-separated list of size strings (e.g. "10MB,20KB") into a `Vec<usize>`.
impl Pickable for Vec<usize> {
type Output = Vec<usize>;
@@ -90,6 +92,7 @@ impl Pickable for Vec<usize> {
}
}
+/// Special: dumps the remaining arguments into an `Argument` struct.
impl Pickable for Argument {
type Output = Argument;
@@ -100,3 +103,13 @@ impl Pickable for Argument {
Some(args.dump_remains().into())
}
}
+
+/// Special: parses a single value of type `T` using the `Pickable` implementation for `T`, and wraps it in an `Option`.
+impl<T: Pickable<Output = T> + Default> Pickable for Option<T> {
+ type Output = Option<T>;
+
+ fn pick(args: &mut Argument, flag: mingling_core::Flag) -> Option<Self::Output> {
+ let r = T::pick(args, flag);
+ Some(r)
+ }
+}