diff --git a/Makefile b/Makefile index ec6afa15..ae0bf0bb 100755 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ export GOOS = linux WEBUI_DIR ?= ../godoxy-frontend DOCS_DIR ?= ../godoxy-wiki -LDFLAGS = -X github.com/yusing/go-proxy/pkg.version=${VERSION} +LDFLAGS = -X github.com/yusing/go-proxy/pkg.version=${VERSION} -checklinkname=0 ifeq ($(agent), 1) NAME = godoxy-agent diff --git a/internal/serialization/time.go b/internal/serialization/time.go new file mode 100644 index 00000000..c35656cd --- /dev/null +++ b/internal/serialization/time.go @@ -0,0 +1,21 @@ +package serialization + +import ( + "time" + _ "unsafe" +) + +//go:linkname unitMap time.unitMap +var unitMap map[string]uint64 + +const ( + unitDay uint64 = 24 * uint64(time.Hour) + unitWeek uint64 = 7 * unitDay + unitMonth uint64 = 30 * unitDay +) + +func init() { + unitMap["d"] = unitDay + unitMap["w"] = unitWeek + unitMap["M"] = unitMonth +} diff --git a/internal/serialization/time_test.go b/internal/serialization/time_test.go new file mode 100644 index 00000000..eaebcf19 --- /dev/null +++ b/internal/serialization/time_test.go @@ -0,0 +1,16 @@ +package serialization + +import ( + "testing" + "time" + + "github.com/stretchr/testify/require" + expect "github.com/yusing/go-proxy/internal/utils/testing" +) + +// NOTE: -ldflags=-checklinkname=0 is required to test this function +func TestParseDuration(t *testing.T) { + require.Equal(t, 24*time.Hour, expect.Must(time.ParseDuration("1d"))) + require.Equal(t, 7*24*time.Hour, expect.Must(time.ParseDuration("1w"))) + require.Equal(t, 30*24*time.Hour, expect.Must(time.ParseDuration("1M"))) +}