From 38b31c65f8d4b85df739905d063f431cfa8b43dc Mon Sep 17 00:00:00 2001
From: Matt Bell <mappum@gmail.com>
Date: Mon, 10 Nov 2014 16:59:07 -0800
Subject: [PATCH] commands: Added Option helper constructors

---
 commands/option.go | 34 +++++++++++++++++++++++++++++++++-
 1 file changed, 33 insertions(+), 1 deletion(-)

diff --git a/commands/option.go b/commands/option.go
index f068ec228..8f11ace49 100644
--- a/commands/option.go
+++ b/commands/option.go
@@ -18,11 +18,43 @@ type Option struct {
 	Type        reflect.Kind // value must be this type
 	Description string       // a short string to describe this option
 
-	// TODO: add more features(?):
+	// MAYBE_TODO: add more features(?):
 	//Default interface{} // the default value (ignored if `Required` is true)
 	//Required bool       // whether or not the option must be provided
 }
 
+// constructor helper functions
+func NewOption(kind reflect.Kind, names ...string) Option {
+	if len(names) < 2 {
+		panic("Options require at least two string values (name and description)")
+	}
+
+	desc := names[len(names)-1]
+	names = names[:len(names)-2]
+
+	return Option{
+		Names:       names,
+		Type:        kind,
+		Description: desc,
+	}
+}
+
+func BoolOption(names ...string) Option {
+	return NewOption(Bool, names...)
+}
+func IntOption(names ...string) Option {
+	return NewOption(Int, names...)
+}
+func UintOption(names ...string) Option {
+	return NewOption(Uint, names...)
+}
+func FloatOption(names ...string) Option {
+	return NewOption(Float, names...)
+}
+func StringOption(names ...string) Option {
+	return NewOption(String, names...)
+}
+
 // Flag names
 const (
 	EncShort = "enc"
-- 
GitLab