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 }