private/currency: add strictcsv support to microunit
Change-Id: Iad2f6a07f189f2faa1d13bdb82dfa320921f6938
This commit is contained in:
parent
0a69da4ff1
commit
9bd0bd0c24
@ -5,6 +5,7 @@ package currency
|
||||
|
||||
import (
|
||||
"math"
|
||||
"strconv"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
"github.com/zeebo/errs"
|
||||
@ -59,3 +60,16 @@ func MicroUnitFromDecimal(d decimal.Decimal) (MicroUnit, error) {
|
||||
}
|
||||
return MicroUnit{v: m.IntPart()}, nil
|
||||
}
|
||||
|
||||
// MarshalCSV does the custom marshaling of MicroUnits.
|
||||
func (m MicroUnit) MarshalCSV() (string, error) { return strconv.FormatInt(m.v, 10), nil }
|
||||
|
||||
// UnmarshalCSV reads the MicroUnit in CSV form.
|
||||
func (m *MicroUnit) UnmarshalCSV(s string) (err error) {
|
||||
v, err := strconv.ParseInt(s, 10, 64)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
m.v = v
|
||||
return nil
|
||||
}
|
||||
|
@ -7,6 +7,8 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"storj.io/common/strictcsv"
|
||||
)
|
||||
|
||||
func TestMicroUnitToFloatString(t *testing.T) {
|
||||
@ -18,3 +20,21 @@ func TestMicroUnitFromFloatString(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, NewMicroUnit(12340), m)
|
||||
}
|
||||
|
||||
func TestMicroUnitCSV(t *testing.T) {
|
||||
type row struct {
|
||||
Foo MicroUnit `csv:"foo"`
|
||||
Bar MicroUnit `csv:"bar"`
|
||||
}
|
||||
exp := row{
|
||||
Foo: NewMicroUnit(1),
|
||||
Bar: NewMicroUnit(2),
|
||||
}
|
||||
|
||||
csv, err := strictcsv.MarshalString(exp)
|
||||
require.NoError(t, err)
|
||||
|
||||
var got row
|
||||
require.NoError(t, strictcsv.UnmarshalString(csv, &got))
|
||||
require.Equal(t, exp, got)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user