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 }