Merge pull request 'update duration jbytes' (#22) from jbytes into master
All checks were successful
Go Action / goaction (push) Successful in 46s

Reviewed-on: #22
This commit was merged in pull request #22.
This commit is contained in:
2025-12-27 15:05:58 +03:00
2 changed files with 45 additions and 1 deletions

View File

@@ -1,6 +1,8 @@
package value
import (
"errors"
"fmt"
"time"
"gitoa.ru/go-4devs/config"
@@ -45,7 +47,17 @@ func (s JBytes) ParseBool() (bool, error) {
}
func (s JBytes) ParseDuration() (time.Duration, error) {
return JParce[time.Duration](s.Bytes())
jdata, jerr := JParce[time.Duration](s.Bytes())
if jerr == nil {
return jdata, nil
}
ustr, serr := s.ParseString()
if serr != nil {
return 0, errors.Join(jerr, fmt.Errorf("parse duration:%w", serr))
}
return ParseDuration(ustr)
}
func (s JBytes) ParseTime() (time.Time, error) {

View File

@@ -3,6 +3,7 @@ package value_test
import (
"encoding/json"
"testing"
"time"
"gitoa.ru/go-4devs/config"
"gitoa.ru/go-4devs/config/test/require"
@@ -40,3 +41,34 @@ func TestJBytes_Unmarshal(t *testing.T) {
require.ErrorIs(t, sta.Unmarshal(ac), config.ErrInvalidValue)
require.ErrorIs(t, sta.Unmarshal(&ac), config.ErrInvalidValue)
}
func TestJBytes_Duration(t *testing.T) {
t.Parallel()
ex := 42 * time.Minute
data, err := json.Marshal("42m")
require.NoError(t, err)
valueDuration := value.JBytes(data)
var exp time.Duration
require.ErrorIs(t, valueDuration.Unmarshal(&exp), config.ErrInvalidValue)
pdur, perr := valueDuration.ParseDuration()
require.NoError(t, perr)
require.Equal(t, pdur, ex)
jdata, jerr := json.Marshal(ex)
require.NoError(t, jerr)
jDuration := value.JBytes(jdata)
var jexp time.Duration
require.NoError(t, jDuration.Unmarshal(&jexp))
require.Equal(t, jexp, ex)
jpdur, jperr := jDuration.ParseDuration()
require.NoError(t, jperr)
require.Equal(t, jpdur, ex)
}