repos / pico

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

pico / pkg / pobj
Eric Bower  ·  2025-04-05

util.go

 1package pobj
 2
 3import (
 4	"log/slog"
 5	"os"
 6
 7	"github.com/picosh/pico/pkg/pobj/storage"
 8)
 9
10func GetEnv(key string, defaultVal string) string {
11	if value, exists := os.LookupEnv(key); exists {
12		return value
13	}
14	return defaultVal
15}
16
17func EnvDriverDetector(logger *slog.Logger) (storage.ObjectStorage, error) {
18	driver := GetEnv("OBJECT_DRIVER", "fs")
19	logger.Info("driver detected", "driver", driver)
20
21	if driver == "memory" {
22		return storage.NewStorageMemory(map[string]map[string]string{})
23	} else if driver == "minio" {
24		url := GetEnv("MINIO_URL", "")
25		user := GetEnv("MINIO_ROOT_USER", "")
26		pass := GetEnv("MINIO_ROOT_PASSWORD", "")
27		logger.Info(
28			"object config detected",
29			"url", url,
30			"user", user,
31		)
32		return storage.NewStorageMinio(logger, url, user, pass)
33	}
34
35	// implied driver == "fs"
36	storageDir := GetEnv("OBJECT_URL", "./.storage")
37	logger.Info("object config detected", "dir", storageDir)
38	return storage.NewStorageFS(logger, storageDir)
39}