func newStorageFactory()

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
	}
}