Skip to content

Commit

Permalink
re-order some progress units code
Browse files Browse the repository at this point in the history
  • Loading branch information
jedib0t committed Aug 20, 2021
1 parent 3ea95f1 commit 3c4cbab
Showing 1 changed file with 33 additions and 29 deletions.
62 changes: 33 additions & 29 deletions progress/units.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,68 +16,72 @@ const (

// Units defines the "type" of the value being tracked by the Tracker.
type Units struct {
Formatter func(value int64) string // default: FormatNumber
Notation string
NotationPosition UnitsNotationPosition
Formatter func(value int64) string
NotationPosition UnitsNotationPosition // default: UnitsNotationPositionBefore
}

// Sprint prints the value as defined by the Units.
func (tu Units) Sprint(value int64) string {
formatter := tu.Formatter
if formatter == nil {
formatter = FormatNumber
}

formattedValue := formatter(value)
switch tu.NotationPosition {
case UnitsNotationPositionAfter:
return formattedValue + tu.Notation
default: // UnitsNotationPositionBefore
return tu.Notation + formattedValue
}
}

var (
// UnitsDefault doesn't define any units. The value will be treated as any
// other number.
UnitsDefault = Units{
Notation: "",
Formatter: FormatNumber,
Notation: "",
NotationPosition: UnitsNotationPositionBefore,
Formatter: FormatNumber,
}

// UnitsBytes defines the value as a storage unit. Values will be converted
// and printed in one of these forms: B, KB, MB, GB, TB, PB
UnitsBytes = Units{
Notation: "",
Formatter: FormatBytes,
Notation: "",
NotationPosition: UnitsNotationPositionBefore,
Formatter: FormatBytes,
}

// UnitsCurrencyDollar defines the value as a Dollar amount. Values will be
// converted and printed in one of these forms: $x.yz, $x.yzK, $x.yzM,
// $x.yzB, $x.yzT
UnitsCurrencyDollar = Units{
Notation: "$",
Formatter: FormatNumber,
Notation: "$",
NotationPosition: UnitsNotationPositionBefore,
Formatter: FormatNumber,
}

// UnitsCurrencyEuro defines the value as a Euro amount. Values will be
// converted and printed in one of these forms: ₠x.yz, ₠x.yzK, ₠x.yzM,
// ₠x.yzB, ₠x.yzT
UnitsCurrencyEuro = Units{
Notation: "₠",
Formatter: FormatNumber,
Notation: "₠",
NotationPosition: UnitsNotationPositionBefore,
Formatter: FormatNumber,
}

// UnitsCurrencyPound defines the value as a Pound amount. Values will be
// converted and printed in one of these forms: £x.yz, £x.yzK, £x.yzM,
// £x.yzB, £x.yzT
UnitsCurrencyPound = Units{
Notation: "£",
Formatter: FormatNumber,
Notation: "£",
NotationPosition: UnitsNotationPositionBefore,
Formatter: FormatNumber,
}
)

// Sprint prints the value as defined by the Units.
func (tu Units) Sprint(value int64) string {
formatter := tu.Formatter
if formatter == nil {
formatter = FormatNumber
}

formattedValue := formatter(value)

switch tu.NotationPosition {
case UnitsNotationPositionAfter:
return formattedValue + tu.Notation
default: // UnitsNotationPositionBefore
return tu.Notation + formattedValue
}
}

// FormatBytes formats the given value as a "Byte".
func FormatBytes(value int64) string {
if value < 1000 {
Expand Down

0 comments on commit 3c4cbab

Please sign in to comment.