diff --git a/response/json.go b/response/json.go index 48f391d..bbfd0e1 100644 --- a/response/json.go +++ b/response/json.go @@ -12,11 +12,27 @@ const ( type Json struct { Code int `json:"code"` - Data interface{} `json:"data"` + Data interface{} `json:"data,omitempty"` Msg string `json:"msg"` Status bool `json:"status"` } +func (j *Json) SetCode(code int) { + j.Code = code +} + +func (j *Json) SetMessage(msg string) { + j.Msg = msg +} + +func (j *Json) SetData(data interface{}) { + j.Data = data +} + +func (j *Json) SetStatus(status bool) { + j.Status = status +} + func (j *Json) String() string { s, _ := j.ToString() return s @@ -28,15 +44,19 @@ func (j *Json) ToString() (str string, err error) { return bytes.NewBuffer(b).String(), err } -func NewJsonByDefaultSuccess(data ...interface{}) *Json { +func NewJsonByDefaultSuccess(data ...interface{}) JsonInterface { return NewJson(true, 0, JsonMsgDefaultOk, data...) } -func NewJsonByDefaultFailed(data ...interface{}) *Json { +func NewJsonByDefaultFailed(data ...interface{}) JsonInterface { return NewJson(false, 1, JsonMsgDefaultFailed, data...) } -func NewJson(status bool, code int, msg string, data ...interface{}) *Json { +func NewJonsByFailed(code int, msg string) JsonInterface { + return NewJson(false, code, msg) +} + +func NewJson(status bool, code int, msg string, data ...interface{}) JsonInterface { if len(data) > 0 { return &Json{ Code: code, diff --git a/response/json_interface.go b/response/json_interface.go new file mode 100644 index 0000000..104ff29 --- /dev/null +++ b/response/json_interface.go @@ -0,0 +1,9 @@ +package response + +type JsonInterface interface { + SetCode(code int) + SetMessage(msg string) + SetData(data interface{}) + SetStatus(status bool) + ToString() (str string, err error) +} diff --git a/response/json_test.go b/response/json_test.go index 7f518c7..6c667a3 100644 --- a/response/json_test.go +++ b/response/json_test.go @@ -1,10 +1,37 @@ package response import ( + "bytes" + "encoding/json" "fmt" "testing" ) +type A struct { + Code int `json:"ret"` + Json +} + +func (j *A) String() string { + s, _ := j.ToString() + return s +} + +func (a *A) ToString() (str string, err error) { + var b []byte + b, err = json.Marshal(a) + return bytes.NewBuffer(b).String(), err +} + +func (a *A) SetCode(code int) { + a.Code = code +} + func TestNewJsonByDefaultSuccess(t *testing.T) { - fmt.Println(NewJsonByDefaultSuccess([]int{1, 2, 3}).String()) + fmt.Println(NewJsonByDefaultSuccess()) +} + +func TestName(t *testing.T) { + resp := JsonResponseGenerator{&A{Code: 232}} + fmt.Println(fmt.Sprintf("%+v", resp.NewJonsByFailed(123232, "hahah"))) } diff --git a/response/response.go b/response/response.go index a467149..d3ee891 100644 --- a/response/response.go +++ b/response/response.go @@ -1 +1,33 @@ package response + +import "reflect" + +type JsonResponseGenerator struct { + Interface JsonInterface +} + +func (j JsonResponseGenerator) NewJsonByDefaultSuccess(data ...interface{}) JsonInterface { + return j.NewJson(true, 0, JsonMsgDefaultOk, data...) +} + +func (j JsonResponseGenerator) NewJsonByDefaultFailed(data ...interface{}) JsonInterface { + return j.NewJson(false, 1, JsonMsgDefaultFailed, data...) +} + +func (j JsonResponseGenerator) NewJonsByFailed(code int, msg string) JsonInterface { + return j.NewJson(false, code, msg) +} + +func (j JsonResponseGenerator) NewJson(status bool, code int, msg string, data ...interface{}) JsonInterface { + jPtr := reflect.New(reflect.TypeOf(j.Interface).Elem()) + if b, ok := jPtr.Interface().(JsonInterface); ok { + b.SetStatus(status) + b.SetCode(code) + b.SetMessage(msg) + if len(data) > 0 { + b.SetData(data[0]) + } + return b + } + return nil +}