github.com/yaoapp/kun@v0.9.0/grpc/response.go (about) 1 package grpc 2 3 import ( 4 jsoniter "github.com/json-iterator/go" 5 "github.com/yaoapp/kun/any" 6 "github.com/yaoapp/kun/maps" 7 ) 8 9 // Bind bind struct 10 func (res Response) Bind(v interface{}) error { 11 return jsoniter.Unmarshal(res.Bytes, &v) 12 } 13 14 // MustBind bind struct 15 func (res Response) MustBind(v interface{}) { 16 err := res.Bind(&v) 17 if err != nil { 18 panic(err) 19 } 20 } 21 22 // Interface bind struct 23 func (res Response) Interface() (interface{}, error) { 24 var v interface{} 25 err := jsoniter.Unmarshal(res.Bytes, &v) 26 return v, err 27 } 28 29 // MustInterface bind struct 30 func (res Response) MustInterface() interface{} { 31 v, err := res.Interface() 32 if err != nil { 33 panic(err) 34 } 35 return v 36 } 37 38 // Map cast to map 39 func (res Response) Map() (maps.MapStrAny, error) { 40 v := maps.Map{} 41 err := jsoniter.Unmarshal(res.Bytes, &v) 42 if err != nil { 43 return nil, err 44 } 45 return v, nil 46 } 47 48 // MustMap cast to map 49 func (res Response) MustMap() maps.MapStrAny { 50 v, err := res.Map() 51 if err != nil { 52 panic(err) 53 } 54 return v 55 } 56 57 // Array cast to array | slice 58 func (res Response) Array() ([]interface{}, error) { 59 v := []interface{}{} 60 err := jsoniter.Unmarshal(res.Bytes, &v) 61 if err != nil { 62 return nil, err 63 } 64 return v, nil 65 } 66 67 // MustArray cast to array | slice 68 func (res Response) MustArray() []interface{} { 69 v, err := res.Array() 70 if err != nil { 71 panic(err) 72 } 73 return v 74 } 75 76 // Value get the response value 77 func (res Response) Value() (interface{}, error) { 78 switch res.Type { 79 case "interface": 80 return res.Interface() 81 case "string": 82 return string(res.Bytes), nil 83 case "integer", "int": 84 return any.Of(string(res.Bytes)).CInt(), nil 85 case "float", "double": 86 return any.Of(string(res.Bytes)).CFloat(), nil 87 case "map": 88 return res.Map() 89 case "array", "slice": 90 return res.Array() 91 default: 92 return res.Bytes, nil 93 } 94 } 95 96 // MustValue get the response value 97 func (res Response) MustValue() interface{} { 98 v, err := res.Value() 99 if err != nil { 100 panic(err) 101 } 102 return v 103 }