Initial config parsing code.
This commit is contained in:
parent
33837895d9
commit
02c8642ead
5 changed files with 179 additions and 1 deletions
62
internal/config/configparser.go
Normal file
62
internal/config/configparser.go
Normal 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
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue