forked from TrueCloudLab/frostfs-sdk-go
4191e5f13e
Define `Marshal` / `Unmarshal` methods of the `Decimal` type. Signed-off-by: Leonard Lyubich <ctulhurider@gmail.com>
93 lines
2.3 KiB
Go
93 lines
2.3 KiB
Go
package accounting
|
|
|
|
import (
|
|
"github.com/nspcc-dev/neofs-api-go/v2/accounting"
|
|
)
|
|
|
|
// Decimal represents decimal number for accounting operations.
|
|
//
|
|
// Decimal is mutually compatible with github.com/nspcc-dev/neofs-api-go/v2/accounting.Decimal
|
|
// message. See ReadFromV2 / WriteToV2 methods.
|
|
//
|
|
// Instances can be created using built-in var declaration.
|
|
//
|
|
// Note that direct typecast is not safe and may result in loss of compatibility:
|
|
//
|
|
// _ = Decimal(accounting.Decimal{}) // not recommended
|
|
type Decimal accounting.Decimal
|
|
|
|
// ReadFromV2 reads Decimal from the accounting.Decimal message. Checks if the
|
|
// message conforms to NeoFS API V2 protocol.
|
|
//
|
|
// See also WriteToV2.
|
|
func (d *Decimal) ReadFromV2(m accounting.Decimal) error {
|
|
*d = Decimal(m)
|
|
return nil
|
|
}
|
|
|
|
// WriteToV2 writes Decimal to the accounting.Decimal message.
|
|
// The message must not be nil.
|
|
//
|
|
// See also ReadFromV2.
|
|
func (d Decimal) WriteToV2(m *accounting.Decimal) {
|
|
*m = (accounting.Decimal)(d)
|
|
}
|
|
|
|
// Value returns value of the decimal number.
|
|
//
|
|
// Zero Decimal has zero value.
|
|
//
|
|
// See also SetValue.
|
|
func (d Decimal) Value() int64 {
|
|
return (*accounting.Decimal)(&d).GetValue()
|
|
}
|
|
|
|
// SetValue sets value of the decimal number.
|
|
//
|
|
// See also Value.
|
|
func (d *Decimal) SetValue(v int64) {
|
|
(*accounting.Decimal)(d).SetValue(v)
|
|
}
|
|
|
|
// Precision returns precision of the decimal number.
|
|
//
|
|
// Zero Decimal has zero precision.
|
|
//
|
|
// See also SetPrecision.
|
|
func (d Decimal) Precision() uint32 {
|
|
return (*accounting.Decimal)(&d).GetPrecision()
|
|
}
|
|
|
|
// SetPrecision sets precision of the decimal number.
|
|
//
|
|
// See also Precision.
|
|
func (d *Decimal) SetPrecision(p uint32) {
|
|
(*accounting.Decimal)(d).SetPrecision(p)
|
|
}
|
|
|
|
// Marshal encodes Decimal into a binary format of the NeoFS API protocol
|
|
// (Protocol Buffers with direct field order).
|
|
//
|
|
// See also Unmarshal.
|
|
func (d Decimal) Marshal() []byte {
|
|
var m accounting.Decimal
|
|
d.WriteToV2(&m)
|
|
|
|
return m.StableMarshal(nil)
|
|
}
|
|
|
|
// Unmarshal decodes NeoFS API protocol binary format into the Decimal
|
|
// (Protocol Buffers with direct field order). Returns an error describing
|
|
// a format violation.
|
|
//
|
|
// See also Marshal.
|
|
func (d *Decimal) Unmarshal(data []byte) error {
|
|
var m accounting.Decimal
|
|
|
|
err := m.Unmarshal(data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return d.ReadFromV2(m)
|
|
}
|