github.com/hoffie/larasync@v0.0.0-20151025221940-0384d2bddcef/repository/transactionContainer.go (about) 1 package repository 2 3 import ( 4 "errors" 5 6 "github.com/hoffie/larasync/repository/odf" 7 ) 8 9 // TransactionContainer is used to encapsulate several transactions 10 // in one data format. 11 type TransactionContainer struct { 12 UUID string 13 Transactions []*Transaction 14 PreviousUUID string 15 } 16 17 // newRevisionFromPb returns a new TransactionContainer from the 18 // protobuf TransactionContainer. 19 func newTransactionContainerFromPb(pbTransactionContainer *odf.TransactionContainer) *TransactionContainer { 20 transactions := make([]*Transaction, len(pbTransactionContainer.GetTransactions())) 21 for index, protoTransaction := range pbTransactionContainer.GetTransactions() { 22 transactions[index] = newTransactionFromPb(protoTransaction) 23 } 24 25 transactionContainer := &TransactionContainer{ 26 UUID: pbTransactionContainer.GetUUID(), 27 PreviousUUID: pbTransactionContainer.GetPreviousUUID(), 28 Transactions: transactions, 29 } 30 31 return transactionContainer 32 } 33 34 // toPb converts this TransactionContainer to a protobuf TransactionContainer. 35 // This is used by the encoder. 36 func (tc *TransactionContainer) toPb() (*odf.TransactionContainer, error) { 37 previousUUID := &tc.PreviousUUID 38 if tc.PreviousUUID == "" { 39 previousUUID = nil 40 } 41 42 if tc.UUID == "" { 43 return nil, errors.New("UUID may not be empty") 44 } 45 46 protoTransactions := make([]*odf.Transaction, len(tc.Transactions)) 47 for index, transaction := range tc.Transactions { 48 protoTransaction, err := transaction.toPb() 49 if err != nil { 50 return nil, err 51 } 52 protoTransactions[index] = protoTransaction 53 } 54 55 transactionContainer := &odf.TransactionContainer{ 56 UUID: &tc.UUID, 57 PreviousUUID: previousUUID, 58 Transactions: protoTransactions, 59 } 60 61 return transactionContainer, nil 62 }