61 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package config
 | 
						|
 | 
						|
import (
 | 
						|
	"os"
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"github.com/joho/godotenv"
 | 
						|
	"go.uber.org/zap"
 | 
						|
)
 | 
						|
 | 
						|
type Config struct {
 | 
						|
	URI      string
 | 
						|
	Username string
 | 
						|
	Password string
 | 
						|
	Topics   []string
 | 
						|
}
 | 
						|
 | 
						|
func NewConfig(logger *zap.Logger) *Config {
 | 
						|
	err := godotenv.Load()
 | 
						|
	if err != nil {
 | 
						|
		logger.Warn("Error loading .env file, using environment variables")
 | 
						|
	}
 | 
						|
 | 
						|
	uri := os.Getenv("MQTT_URI")
 | 
						|
	if uri == "" {
 | 
						|
		logger.Fatal("MQTT_URI is not set")
 | 
						|
	}
 | 
						|
 | 
						|
	username := os.Getenv("MQTT_USERNAME")
 | 
						|
	if username == "" {
 | 
						|
		logger.Warn("MQTT_USERNAME is not set")
 | 
						|
	}
 | 
						|
 | 
						|
	password := os.Getenv("MQTT_PASSWORD")
 | 
						|
	if password == "" {
 | 
						|
		logger.Warn("MQTT_PASSWORD is not set")
 | 
						|
	}
 | 
						|
 | 
						|
	topicsEnv := os.Getenv("MQTT_TOPICS")
 | 
						|
	var topics []string
 | 
						|
	if topicsEnv == "" {
 | 
						|
		logger.Warn("MQTT_TOPICS is not set, defaulting to #")
 | 
						|
		topics = []string{"#"}
 | 
						|
	} else {
 | 
						|
		parts := strings.Split(topicsEnv, ",")
 | 
						|
		for _, p := range parts {
 | 
						|
			t := strings.TrimSpace(p)
 | 
						|
			if t != "" {
 | 
						|
				topics = append(topics, t)
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return &Config{
 | 
						|
		URI:      uri,
 | 
						|
		Username: username,
 | 
						|
		Password: password,
 | 
						|
		Topics:   topics,
 | 
						|
	}
 | 
						|
}
 |