internal/pkg/ini/ini.go (30 lines of code) (raw):
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
// Package ini provides functionality to parse and read properties from INI files.
package ini
import (
"fmt"
"gopkg.in/ini.v1"
)
type sectionsParser interface {
Sections() []*ini.Section
}
// INI represents a parsed INI file in memory.
type INI struct {
cfg sectionsParser
}
// New returns an INI file given a path to the file.
// An error is returned if the file can't be parsed.
func New(path string) (*INI, error) {
cfg, err := ini.Load(path)
if err != nil {
return nil, fmt.Errorf("load ini file %s: %w", path, err)
}
return &INI{
cfg: cfg,
}, nil
}
// Sections returns the names of **non-empty** sections in the file.
//
// For example, the method returns ["paths", "servers"] if the file's content is:
// app_mode = development
// [paths]
// data = /home/git/grafana
// [server]
// protocol = http
// http_port = 9999
func (i *INI) Sections() []string {
var names []string
for _, section := range i.cfg.Sections() {
if len(section.Keys()) == 0 {
continue
}
names = append(names, section.Name())
}
return names
}