From 40e6f248d4e302c8541d72778de64b5bdde2b69c Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Tue, 7 Oct 2025 20:29:09 -0700 Subject: Use ini for the secrets file as well --- internal/ini/ini.go | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 internal/ini/ini.go (limited to 'internal/ini/ini.go') diff --git a/internal/ini/ini.go b/internal/ini/ini.go new file mode 100644 index 0000000..c546a52 --- /dev/null +++ b/internal/ini/ini.go @@ -0,0 +1,51 @@ +package ini + +import ( + "bufio" + "errors" + "io" + "iter" + "strings" +) + +type Parser struct { + Section string + LineNumber int +} + +type KeyVal struct { + Key, Val string +} + +func (p *Parser) Parse(r io.Reader) iter.Seq2[KeyVal, error] { + return func(yield func(KeyVal, error) bool) { + *p = Parser{} + scanner := bufio.NewScanner(r) + for scanner.Scan() { + p.LineNumber++ + line := strings.TrimSpace(scanner.Text()) + if len(line) == 0 || strings.HasPrefix(line, "//") || strings.HasPrefix(line, ";") || strings.HasPrefix(line, "#") { + continue + } + if strings.HasPrefix(line, "[") && strings.HasSuffix(line, "]") { + p.Section = strings.TrimSpace(line[1 : len(line)-1]) + continue + } + key, val, ok := strings.Cut(line, "=") + if !ok { + if !yield(KeyVal{}, errors.New("invalid key-value pair")) { + return + } + continue + } + key, val = strings.TrimSpace(key), strings.TrimSpace(val) + if !yield(KeyVal{key, val}, nil) { + return + } + } + if err := scanner.Err(); err != nil { + yield(KeyVal{}, err) + return + } + } +} -- cgit v1.3.1