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