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  }