Commit b7b2ee34 authored by Daniel Smith's avatar Daniel Smith

add flag helper func

parent 6c6cdac0
...@@ -18,6 +18,8 @@ package resource ...@@ -18,6 +18,8 @@ package resource
import ( import (
"errors" "errors"
"flag"
"fmt"
"math/big" "math/big"
"regexp" "regexp"
"strings" "strings"
...@@ -372,3 +374,33 @@ func (q *Quantity) Copy() *Quantity { ...@@ -372,3 +374,33 @@ func (q *Quantity) Copy() *Quantity {
Format: q.Format, Format: q.Format,
} }
} }
// qFlag is a helper type for the Flag function
type qFlag struct {
dest *Quantity
}
func (qf qFlag) Set(val string) error {
q, err := ParseQuantity(val)
if err != nil {
return err
}
// This copy is OK because q will not be referenced again.
*qf.dest = *q
return nil
}
func (qf qFlag) String() string {
return qf.dest.String()
}
// QuantityFlag is a helper that makes a quantity flag (using standard flag package).
// Will panic if defaultValue is not a valid quantity.
func QuantityFlag(flagName, defaultValue, description string) *Quantity {
q, err := ParseQuantity(defaultValue)
if err != nil {
panic(fmt.Errorf("can't use %v as a quantity: %v", defaultValue, err))
}
flag.Var(qFlag{q}, flagName, description)
return q
}
...@@ -25,6 +25,10 @@ import ( ...@@ -25,6 +25,10 @@ import (
"speter.net/go/exp/math/dec/inf" "speter.net/go/exp/math/dec/inf"
) )
var (
testQuantityFlag = QuantityFlag("quantityFlag", "1M", "dummy flag for testing the quantity flag mechanism")
)
func dec(i int64, exponent int) *inf.Dec { func dec(i int64, exponent int) *inf.Dec {
// See the below test-- scale is the negative of an exponent. // See the below test-- scale is the negative of an exponent.
return inf.NewDec(i, inf.Scale(-exponent)) return inf.NewDec(i, inf.Scale(-exponent))
...@@ -425,3 +429,11 @@ func TestCopy(t *testing.T) { ...@@ -425,3 +429,11 @@ func TestCopy(t *testing.T) {
t.Errorf("Copy didn't") t.Errorf("Copy didn't")
} }
} }
func TestQFlagSet(t *testing.T) {
qf := qFlag{&Quantity{}}
qf.Set("1Ki")
if e, a := "1Ki", qf.String(); e != a {
t.Errorf("Unexpected result %v != %v", e, a)
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment