repos / pico

pico services mono repo
git clone https://github.com/picosh/pico.git

pico / pkg / shared / storage
Eric Bower  ·  2025-06-08

base.go

 1package storage
 2
 3import (
 4	"fmt"
 5	"log/slog"
 6
 7	"github.com/picosh/utils"
 8)
 9
10func GetStorageTypeFromEnv() string {
11	return utils.GetEnv("STORAGE_ADAPTER", "minio")
12}
13
14func NewStorage(logger *slog.Logger, adapter string) (StorageServe, error) {
15	logger.Info("storage adapter", "adapter", adapter)
16	switch adapter {
17	case "minio":
18		minioURL := utils.GetEnv("MINIO_URL", "")
19		minioUser := utils.GetEnv("MINIO_ROOT_USER", "")
20		minioPass := utils.GetEnv("MINIO_ROOT_PASSWORD", "")
21		logger.Info("using minio storage", "url", minioURL, "user", minioUser)
22		return NewStorageMinio(logger, minioURL, minioUser, minioPass)
23	case "fs":
24		fsPath := utils.GetEnv("FS_STORAGE_DIR", "/tmp/pico_storage")
25		logger.Info("using filesystem storage", "path", fsPath)
26		return NewStorageFS(logger, fsPath)
27	case "memory":
28		data := map[string]map[string]string{}
29		logger.Info("using memory storage")
30		return NewStorageMemory(data)
31	default:
32		return nil, fmt.Errorf("unsupported storage type: %s", adapter)
33	}
34}