drone-yaml/yaml/unit.go

43 lines
933 B
Go

// Copyright (c), the Drone Authors.
// Copyright (c) 2021, Robert Kaussow <mail@thegeeklab.de>
package yaml
import (
"github.com/docker/go-units"
)
// BytesSize stores a human-readable size in bytes,
// kibibytes, mebibytes, gibibytes, or tebibytes
// (eg. "44kiB", "17MiB").
type BytesSize int64
// UnmarshalYAML implements yaml unmarshalling.
func (b *BytesSize) UnmarshalYAML(unmarshal func(interface{}) error) error {
var intType int64
if err := unmarshal(&intType); err == nil {
*b = BytesSize(intType)
return nil
}
var stringType string
if err := unmarshal(&stringType); err != nil {
return err
}
intType, err := units.RAMInBytes(stringType)
if err == nil {
*b = BytesSize(intType)
}
return err
}
// String returns a human-readable size in bytes,
// kibibytes, mebibytes, gibibytes, or tebibytes
// (eg. "44kiB", "17MiB").
func (b BytesSize) String() string {
return units.BytesSize(float64(b))
}