blob: 81d8d4f4e2a7ab65fd58a31b68199d1408b75e50 [file] [log] [blame]
package holder
import (
"github.com/pkg/errors"
"github.com/dk-lockdown/seata-golang/tc/session"
)
type TransactionWriteStore struct {
SessionRequest session.SessionStorable
LogOperation LogOperation
}
func (transactionWriteStore *TransactionWriteStore) Encode() ([]byte, error){
bySessionRequest,err := transactionWriteStore.SessionRequest.Encode()
if err != nil {
return nil,err
}
byOpCode := transactionWriteStore.LogOperation
var result = make([]byte,0)
result = append(result,bySessionRequest...)
result = append(result,byte(byOpCode))
return result,nil
}
func (transactionWriteStore *TransactionWriteStore) Decode(src []byte) {
bySessionRequest := src[:len(src)-1]
byOpCode := src[len(src)-1:]
transactionWriteStore.LogOperation = LogOperation(byOpCode[0])
sessionRequest, _ := transactionWriteStore.getSessionInstanceByOperation()
sessionRequest.Decode(bySessionRequest)
transactionWriteStore.SessionRequest = sessionRequest
}
func (transactionWriteStore *TransactionWriteStore) getSessionInstanceByOperation() (session.SessionStorable,error) {
var sessionStorable session.SessionStorable
switch transactionWriteStore.LogOperation {
case LogOperationGlobalAdd:
case LogOperationGlobalUpdate:
case LogOperationGlobalRemove:
sessionStorable = session.NewGlobalSession()
break
case LogOperationBranchAdd:
case LogOperationBranchUpdate:
case LogOperationBranchRemove:
sessionStorable = session.NewBranchSession()
break
default:
return nil,errors.New("incorrect logOperation.")
}
return sessionStorable,nil
}