mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-12-31 18:46:35 +08:00
缓存策略增加预热超时时间设置(默认20分钟)
This commit is contained in:
@@ -43,3 +43,32 @@ func JSONClone[T any](ptr T) (newPtr T, err error) {
|
||||
|
||||
return newValue.(T), nil
|
||||
}
|
||||
|
||||
// JSONDecodeConfig 解码并重新编码
|
||||
// 是为了去除原有JSON中不需要的数据
|
||||
func JSONDecodeConfig(data []byte, ptr any) (encodeJSON []byte, err error) {
|
||||
err = json.Unmarshal(data, ptr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
encodeJSON, err = json.Marshal(ptr)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// validate config
|
||||
if ptr != nil {
|
||||
config, ok := ptr.(interface {
|
||||
Init() error
|
||||
})
|
||||
if ok {
|
||||
initErr := config.Init()
|
||||
if initErr != nil {
|
||||
err = errors.New("validate config failed: " + initErr.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
package utils_test
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/utils"
|
||||
"github.com/iwind/TeaGo/logs"
|
||||
"testing"
|
||||
@@ -49,3 +50,38 @@ func TestJSONClone_Slice(t *testing.T) {
|
||||
}
|
||||
logs.PrintAsJSON(newU, t)
|
||||
}
|
||||
|
||||
type jsonUserType struct {
|
||||
Name string `json:"name"`
|
||||
Age int `json:"age"`
|
||||
}
|
||||
|
||||
func (this *jsonUserType) Init() error {
|
||||
if len(this.Name) < 10 {
|
||||
return errors.New("'name' too short")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func TestJSONDecodeConfig(t *testing.T) {
|
||||
var data = []byte(`{ "name":"Lily", "age":20, "description": "Nice" }`)
|
||||
|
||||
var u = &jsonUserType{}
|
||||
newJSON, err := utils.JSONDecodeConfig(data, u)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Logf("%+v, %s", u, string(newJSON))
|
||||
}
|
||||
|
||||
func TestJSONDecodeConfig_Validate(t *testing.T) {
|
||||
var data = []byte(`{ "name":"Lily", "age":20, "description": "Nice" }`)
|
||||
|
||||
var u = &jsonUserType{}
|
||||
|
||||
newJSON, err := utils.JSONDecodeConfig(data, u)
|
||||
if err != nil {
|
||||
t.Log("ignore error:", err) // error expected
|
||||
}
|
||||
t.Logf("%+v, %s", u, string(newJSON))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user