package types
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/tendermint/go-wire/data"
|
|
)
|
|
|
|
// Result is a common result object for ABCI calls.
|
|
// CONTRACT: a zero Result is OK.
|
|
type Result struct {
|
|
Code CodeType `json:"code"`
|
|
Data data.Bytes `json:"data"`
|
|
Log string `json:"log"` // Can be non-deterministic
|
|
Tags []*KVPair `json:"tags"`
|
|
}
|
|
|
|
func NewResult(code CodeType, data []byte, log string) Result {
|
|
return Result{
|
|
Code: code,
|
|
Data: data,
|
|
Log: log,
|
|
}
|
|
}
|
|
|
|
func (res Result) IsOK() bool {
|
|
return res.Code == CodeType_OK
|
|
}
|
|
|
|
func (res Result) IsErr() bool {
|
|
return res.Code != CodeType_OK
|
|
}
|
|
|
|
func (res Result) IsSameCode(compare Result) bool {
|
|
return res.Code == compare.Code
|
|
}
|
|
|
|
func (res Result) Error() string {
|
|
return fmt.Sprintf("ABCI{code:%v, data:%X, log:%v}", res.Code, res.Data, res.Log)
|
|
}
|
|
|
|
func (res Result) String() string {
|
|
return fmt.Sprintf("ABCI{code:%v, data:%X, log:%v}", res.Code, res.Data, res.Log)
|
|
}
|
|
|
|
func (res Result) PrependLog(log string) Result {
|
|
return Result{
|
|
Code: res.Code,
|
|
Data: res.Data,
|
|
Log: log + ";" + res.Log,
|
|
}
|
|
}
|
|
|
|
func (res Result) AppendLog(log string) Result {
|
|
return Result{
|
|
Code: res.Code,
|
|
Data: res.Data,
|
|
Log: res.Log + ";" + log,
|
|
}
|
|
}
|
|
|
|
func (res Result) SetLog(log string) Result {
|
|
return Result{
|
|
Code: res.Code,
|
|
Data: res.Data,
|
|
Log: log,
|
|
}
|
|
}
|
|
|
|
func (res Result) SetData(data []byte) Result {
|
|
return Result{
|
|
Code: res.Code,
|
|
Data: data,
|
|
Log: res.Log,
|
|
}
|
|
}
|
|
|
|
//----------------------------------------
|
|
|
|
// NOTE: if data == nil and log == "", same as zero Result.
|
|
func NewResultOK(data []byte, log string) Result {
|
|
return Result{
|
|
Code: CodeType_OK,
|
|
Data: data,
|
|
Log: log,
|
|
}
|
|
}
|
|
|
|
func NewError(code CodeType, log string) Result {
|
|
return Result{
|
|
Code: code,
|
|
Log: log,
|
|
}
|
|
}
|
|
|
|
//----------------------------------------
|
|
// Convenience methods for turning the
|
|
// pb type into one using data.Bytes
|
|
|
|
// Convert ResponseCheckTx to standard Result
|
|
func (r *ResponseCheckTx) Result() Result {
|
|
return Result{
|
|
Code: r.Code,
|
|
Data: r.Data,
|
|
Log: r.Log,
|
|
}
|
|
}
|
|
|
|
func (r ResponseCheckTx) IsErr() bool {
|
|
return r.Code != CodeType_OK
|
|
}
|
|
|
|
// Convert ResponseDeliverTx to standard Result
|
|
func (r *ResponseDeliverTx) Result() Result {
|
|
return Result{
|
|
Code: r.Code,
|
|
Data: r.Data,
|
|
Log: r.Log,
|
|
Tags: r.Tags,
|
|
}
|
|
}
|
|
|
|
func (r ResponseDeliverTx) IsErr() bool {
|
|
return r.Code != CodeType_OK
|
|
}
|
|
|
|
type ResultQuery struct {
|
|
Code CodeType `json:"code"`
|
|
Index int64 `json:"index"`
|
|
Key data.Bytes `json:"key"`
|
|
Value data.Bytes `json:"value"`
|
|
Proof data.Bytes `json:"proof"`
|
|
Height uint64 `json:"height"`
|
|
Log string `json:"log"`
|
|
}
|
|
|
|
func (r *ResponseQuery) Result() *ResultQuery {
|
|
return &ResultQuery{
|
|
Code: r.Code,
|
|
Index: r.Index,
|
|
Key: r.Key,
|
|
Value: r.Value,
|
|
Proof: r.Proof,
|
|
Height: r.Height,
|
|
Log: r.Log,
|
|
}
|
|
}
|