in statefun-sdk-go/v3/pkg/statefun/storage.go [67:103]
func newStorageFactory(
batch *protocol.ToFunction_InvocationBatchRequest,
specs map[string]*protocol.FromFunction_PersistedValueSpec,
) storageFactory {
storage := &storage{
cells: make(map[string]*internal.Cell, len(specs)),
}
states := make(map[string]*protocol.FromFunction_PersistedValueSpec, len(specs))
for k, v := range specs {
states[k] = v
}
if batch.State != nil {
for _, state := range batch.State {
spec, exists := states[state.StateName]
if !exists {
continue
}
delete(states, state.StateName)
storage.cells[state.StateName] = internal.NewCell(state, spec.TypeTypename)
}
}
if len(states) > 0 {
var missing = make([]*protocol.FromFunction_PersistedValueSpec, 0, len(states))
for _, spec := range states {
missing = append(missing, spec)
}
return MissingSpecs(missing)
} else {
return storage
}
}