mirror of
https://github.com/eolinker/apinto
synced 2025-10-15 21:31:56 +08:00
46 lines
961 B
Go
46 lines
961 B
Go
package cache
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/coocood/freecache"
|
|
"github.com/eolinker/eosc/eocontext"
|
|
http_service "github.com/eolinker/eosc/eocontext/http-context"
|
|
)
|
|
|
|
var freeCache *freecache.Cache
|
|
|
|
func NewCache() {
|
|
freeCache = freecache.NewCache(0)
|
|
}
|
|
|
|
type ResponseData struct {
|
|
Header map[string]string
|
|
Body []byte
|
|
}
|
|
|
|
func (r *ResponseData) Complete(ctx eocontext.EoContext) error {
|
|
httpCtx, err := http_service.Assert(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
httpCtx.Response().SetBody(r.Body)
|
|
for key, val := range r.Header {
|
|
httpCtx.Response().SetHeader(key, val)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func SetResponseData(uri string, data *ResponseData, validTime int) {
|
|
bytes, _ := json.Marshal(data)
|
|
_ = freeCache.Set([]byte(uri), bytes, validTime)
|
|
}
|
|
|
|
func GetResponseData(uri string) *ResponseData {
|
|
bytes, _ := freeCache.Get([]byte(uri))
|
|
data := new(ResponseData)
|
|
if err := json.Unmarshal(bytes, data); err != nil {
|
|
return nil
|
|
}
|
|
return data
|
|
}
|