Initial config parsing code.

This commit is contained in:
Anna Rose Wiggins 2025-06-28 19:41:23 -04:00
parent 33837895d9
commit 02c8642ead
5 changed files with 179 additions and 1 deletions

View file

@ -0,0 +1,62 @@
package config
import (
"fmt"
"os"
"path/filepath"
"strings"
"git.annabunches.net/annabunches/joyful/internal/logger"
"github.com/goccy/go-yaml"
)
type ConfigParser struct {
config Config
configFiles []string
}
// Parse all the config files and store the config data for further use
func (parser *ConfigParser) Parse(directory string) {
// Find the config files in the directory
dirEntries, err := os.ReadDir(directory)
logger.FatalIfError(err, "Failed to read config directory")
for _, file := range dirEntries {
name := file.Name()
if file.IsDir() || !(strings.HasSuffix(name, ".yaml") || strings.HasSuffix(name, ".yml")) {
continue
}
filePath := filepath.Join(directory, name)
if strings.HasSuffix(filePath, ".yaml") || strings.HasSuffix(filePath, ".yml") {
parser.configFiles = append(parser.configFiles, filePath)
}
}
rawData := parser.parseConfigFiles()
err = yaml.Unmarshal(rawData, &parser.config)
logger.FatalIfError(err, "Failed to parse config")
}
// Open each config file and concatenate their contents
func (parser *ConfigParser) parseConfigFiles() []byte {
var rawData []byte
for _, filePath := range parser.configFiles {
data, err := os.ReadFile(filePath)
if err != nil {
logger.LogIfError(err, fmt.Sprintf("Failed to read config file '%s'", filePath))
continue
}
rawData = append(rawData, data...)
rawData = append(rawData, '\n')
}
if len(rawData) == 0 {
logger.Log("No config data found")
return nil
}
return rawData
}