Pull request: Fix duration

Merge in DNS/adguard-home from fix-duration to master

Squashed commit of the following:

commit b6d960076e6263718ec612bc7a998c48fb92079f
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Aug 27 15:24:37 2021 +0300

    home: imp docs & fmt

commit b3d1e5dbbb9c9abe92b10a51cc1f8d7afee73e12
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Aug 27 15:16:20 2021 +0300

    home: fix duration
This commit is contained in:
Eugene Burkov 2021-08-27 15:33:40 +03:00
parent 9f52adf33d
commit 77821ec816
2 changed files with 20 additions and 9 deletions

View File

@ -23,23 +23,31 @@ type Duration struct {
//
func (d Duration) String() (str string) {
str = d.Duration.String()
secs := d.Seconds()
var secsInt int
if secsInt = int(secs); float64(secsInt) != secs || secsInt%60 != 0 {
return str
}
const (
tailMin = len(`0s`)
tailMinSec = len(`0m0s`)
secsInHour = time.Hour / time.Second
minsInHour = time.Hour / time.Minute
)
if (secsInt%3600)/60 != 0 {
return str[:len(str)-tailMin]
}
switch rounded := d.Duration / time.Second; {
case
rounded == 0,
rounded*time.Second != d.Duration,
rounded%60 != 0:
// Return the uncutted value if it's either equal to zero or has
// fractions of a second or even whole seconds in it.
return str
case (rounded%secsInHour)/minsInHour != 0:
return str[:len(str)-tailMin]
default:
return str[:len(str)-tailMinSec]
}
}
// MarshalText implements the encoding.TextMarshaler interface for Duration.
func (d Duration) MarshalText() (text []byte, err error) {

View File

@ -46,6 +46,9 @@ func TestDuration_String(t *testing.T) {
}, {
name: "1m1.001s",
val: time.Minute + time.Second + time.Millisecond,
}, {
name: "0s",
val: 0,
}}
for _, tc := range testCases {