github.com/s7techlab/cckit@v0.10.5/response/response.go (about)

     1  package response
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  
     7  	"github.com/s7techlab/cckit/convert"
     8  
     9  	"github.com/hyperledger/fabric-chaincode-go/shim"
    10  	"github.com/hyperledger/fabric-protos-go/peer"
    11  )
    12  
    13  // Error returns shim.Error
    14  func Error(err interface{}) peer.Response {
    15  	return shim.Error(fmt.Sprintf("%s", err))
    16  }
    17  
    18  // Success returns shim.Success with serialized json if necessary
    19  func Success(data interface{}) peer.Response {
    20  	bb, err := convert.ToBytes(data)
    21  	if err != nil {
    22  		return shim.Success(nil)
    23  	}
    24  	return shim.Success(bb)
    25  }
    26  
    27  // Create returns peer.Response (Success or Error) depending on value of err
    28  // if err is (bool) false or is error interface - returns shim.Error
    29  func Create(data interface{}, err interface{}) peer.Response {
    30  	var errObj error
    31  
    32  	switch e := err.(type) {
    33  	case nil:
    34  		errObj = nil
    35  	case bool:
    36  		if !e {
    37  			errObj = errors.New(`boolean error: false`)
    38  		}
    39  	case string:
    40  		if e != `` {
    41  			errObj = errors.New(e)
    42  		}
    43  	case error:
    44  		errObj = e
    45  	default:
    46  		panic(fmt.Sprintf(`unknowm error type %s`, err))
    47  
    48  	}
    49  
    50  	if errObj != nil {
    51  		return Error(errObj)
    52  	}
    53  	return Success(data)
    54  }
    55  
    56  // Transformer type transforms data
    57  type Transformer struct {
    58  	data interface{}
    59  	err  error
    60  }
    61  
    62  // With func transformer
    63  func (t Transformer) With(transfomer func(interface{}) interface{}) peer.Response {
    64  	return Create(transfomer(t.data), t.err)
    65  }
    66  
    67  // Transform creates Transformer struct
    68  func Transform(data interface{}, err error) *Transformer {
    69  	return &Transformer{data, err}
    70  }