amount.go raw
1 package cfgutil
2
3 import (
4 "github.com/p9c/p9/pkg/amt"
5 "strconv"
6 "strings"
7 )
8
9 // AmountFlag embeds a util.Amount and implements the flags.Marshaler and Unmarshaler interfaces so it can be used as a
10 // config struct field.
11 type AmountFlag struct {
12 amt.Amount
13 }
14
15 // NewAmountFlag creates an AmountFlag with a default util.Amount.
16 func NewAmountFlag(defaultValue amt.Amount) *AmountFlag {
17 return &AmountFlag{defaultValue}
18 }
19
20 // MarshalFlag satisifes the flags.Marshaler interface.
21 func (a *AmountFlag) MarshalFlag() (string, error) {
22 return a.Amount.String(), nil
23 }
24
25 // UnmarshalFlag satisifes the flags.Unmarshaler interface.
26 func (a *AmountFlag) UnmarshalFlag(value string) (e error) {
27 value = strings.TrimSuffix(value, " DUO")
28 valueF64, e := strconv.ParseFloat(value, 64)
29 if e != nil {
30 E.Ln(e)
31 return e
32 }
33 amount, e := amt.NewAmount(valueF64)
34 if e != nil {
35 E.Ln(e)
36 return e
37 }
38 a.Amount = amount
39 return nil
40 }
41