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, } }