github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/state/impl_wlog_storage.go (about)

     1  /*
     2   * Copyright (c) 2022-present unTill Pro, Ltd.
     3   */
     4  
     5  package state
     6  
     7  import (
     8  	"context"
     9  
    10  	"github.com/voedger/voedger/pkg/appdef"
    11  	"github.com/voedger/voedger/pkg/istructs"
    12  )
    13  
    14  type wLogStorage struct {
    15  	ctx        context.Context
    16  	eventsFunc eventsFunc
    17  	wsidFunc   WSIDFunc
    18  }
    19  
    20  func (s *wLogStorage) NewKeyBuilder(appdef.QName, istructs.IStateKeyBuilder) istructs.IStateKeyBuilder {
    21  	return &wLogKeyBuilder{
    22  		logKeyBuilder: logKeyBuilder{
    23  			offset: istructs.FirstOffset,
    24  			count:  1,
    25  		},
    26  		wsid: s.wsidFunc(),
    27  	}
    28  }
    29  func (s *wLogStorage) Get(key istructs.IStateKeyBuilder) (value istructs.IStateValue, err error) {
    30  	err = s.Read(key, func(_ istructs.IKey, v istructs.IStateValue) (err error) {
    31  		value = v
    32  		return nil
    33  	})
    34  	return value, err
    35  }
    36  func (s *wLogStorage) Read(kb istructs.IStateKeyBuilder, callback istructs.ValueCallback) (err error) {
    37  	k := kb.(*wLogKeyBuilder)
    38  	cb := func(wlogOffset istructs.Offset, event istructs.IWLogEvent) (err error) {
    39  		offs := int64(wlogOffset)
    40  		return callback(
    41  			&key{data: map[string]interface{}{Field_Offset: offs}},
    42  			&wLogValue{
    43  				event:  event,
    44  				offset: offs,
    45  			})
    46  	}
    47  	return s.eventsFunc().ReadWLog(s.ctx, k.wsid, k.offset, k.count, cb)
    48  }