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  }