github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/internal/pkg/gateway/event/blockiterator.go (about)

     1  /*
     2  Copyright hechain. All Rights Reserved.
     3  SPDX-License-Identifier: Apache-2.0
     4  */
     5  
     6  package event
     7  
     8  import (
     9  	"github.com/hechain20/hechain/common/ledger"
    10  	"github.com/hyperledger/fabric-protos-go/common"
    11  	"github.com/pkg/errors"
    12  )
    13  
    14  type BlockIterator struct {
    15  	ledgerIter ledger.ResultsIterator
    16  }
    17  
    18  func NewBlockIterator(iterator ledger.ResultsIterator) *BlockIterator {
    19  	return &BlockIterator{
    20  		ledgerIter: iterator,
    21  	}
    22  }
    23  
    24  func (iter *BlockIterator) Next() (*Block, error) {
    25  	result, err := iter.ledgerIter.Next()
    26  	if err != nil {
    27  		return nil, err
    28  	}
    29  
    30  	switch block := result.(type) {
    31  	case *common.Block:
    32  		return NewBlock(block), nil
    33  	default:
    34  		return nil, errors.Errorf("unexpected block type: %T", result)
    35  	}
    36  }
    37  
    38  func (iter *BlockIterator) Close() {
    39  	iter.ledgerIter.Close()
    40  }