package types
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
// CONTRACT: a zero Result is OK.
|
|
type Result struct {
|
|
Code CodeType
|
|
Data []byte
|
|
Log string // Can be non-deterministic
|
|
}
|
|
|
|
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) Error() string {
|
|
return fmt.Sprintf("TMSP 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,
|
|
}
|
|
}
|