github.com/treeverse/lakefs@v1.24.1-0.20240520134607-95648127bfb0/pkg/graveler/committed/unmarshal_iterator.go (about)

     1  package committed
     2  
     3  import (
     4  	"github.com/treeverse/lakefs/pkg/graveler"
     5  )
     6  
     7  // UnmarshalIterator wrap value iterator and unmarshal each value
     8  type UnmarshalIterator struct {
     9  	it    ValueIterator
    10  	value *graveler.ValueRecord
    11  	err   error
    12  }
    13  
    14  func NewUnmarshalIterator(it ValueIterator) *UnmarshalIterator {
    15  	return &UnmarshalIterator{
    16  		it: it,
    17  	}
    18  }
    19  
    20  func (r *UnmarshalIterator) Next() bool {
    21  	if !r.it.Next() {
    22  		r.err = r.it.Err()
    23  		r.value = nil
    24  		return false
    25  	}
    26  	val := r.it.Value()
    27  	// unmarshal value
    28  	var v *graveler.Value
    29  	if val.Value != nil {
    30  		v, r.err = UnmarshalValue(val.Value)
    31  		if r.err != nil {
    32  			r.value = nil
    33  			return false
    34  		}
    35  	}
    36  	r.value = &graveler.ValueRecord{
    37  		Key:   graveler.Key(val.Key.Copy()),
    38  		Value: v,
    39  	}
    40  	return true
    41  }
    42  
    43  func (r *UnmarshalIterator) SeekGE(id graveler.Key) {
    44  	r.it.SeekGE(Key(id))
    45  	r.value = nil
    46  	r.err = r.Err()
    47  }
    48  
    49  func (r *UnmarshalIterator) Value() *graveler.ValueRecord {
    50  	if r.err != nil {
    51  		return nil
    52  	}
    53  	return r.value
    54  }
    55  
    56  func (r *UnmarshalIterator) Err() error {
    57  	return r.err
    58  }
    59  
    60  func (r *UnmarshalIterator) Close() {
    61  	r.it.Close()
    62  }