github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/pkg/serializer/response.go (about) 1 package serializer 2 3 import ( 4 "bytes" 5 "encoding/base64" 6 "encoding/gob" 7 ) 8 9 // Response 基础序列化器 10 type Response struct { 11 Code int `json:"code"` 12 Data interface{} `json:"data,omitempty"` 13 Msg string `json:"msg"` 14 Error string `json:"error,omitempty"` 15 } 16 17 // NewResponseWithGobData 返回Data字段使用gob编码的Response 18 func NewResponseWithGobData(data interface{}) Response { 19 var w bytes.Buffer 20 encoder := gob.NewEncoder(&w) 21 if err := encoder.Encode(data); err != nil { 22 return Err(CodeInternalSetting, "Failed to encode response content", err) 23 } 24 25 return Response{Data: w.Bytes()} 26 } 27 28 // GobDecode 将 Response 正文解码至目标指针 29 func (r *Response) GobDecode(target interface{}) { 30 src := r.Data.(string) 31 raw := make([]byte, len(src)*len(src)/base64.StdEncoding.DecodedLen(len(src))) 32 base64.StdEncoding.Decode(raw, []byte(src)) 33 decoder := gob.NewDecoder(bytes.NewBuffer(raw)) 34 decoder.Decode(target) 35 }