github.com/sleungcy/cli@v7.1.0+incompatible/command/flag/megabytes.go (about) 1 package flag 2 3 import ( 4 "strings" 5 6 "code.cloudfoundry.org/cli/types" 7 8 "code.cloudfoundry.org/bytefmt" 9 flags "github.com/jessevdk/go-flags" 10 ) 11 12 const ( 13 AllowedUnits = "mg" 14 ) 15 16 type Megabytes struct { 17 types.NullUint64 18 } 19 20 func (m *Megabytes) UnmarshalFlag(val string) error { 21 if val == "" { 22 return nil 23 } 24 25 size, err := ConvertToMb(val) 26 if err != nil { 27 return err 28 } 29 30 m.Value = size 31 m.IsSet = true 32 33 return nil 34 } 35 36 func ConvertToMb(val string) (uint64, error) { 37 size, err := bytefmt.ToMegabytes(val) 38 39 if err != nil || 40 !strings.ContainsAny(strings.ToLower(val), AllowedUnits) || 41 strings.Contains(strings.ToLower(val), ".") { 42 return size, &flags.Error{ 43 Type: flags.ErrRequired, 44 Message: `Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB`, 45 } 46 } 47 return size, nil 48 }