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 }