1package ini
2
3import (
4	"io"
5	"os"
6
7	"github.com/aws/aws-sdk-go/aws/awserr"
8)
9
10// OpenFile takes a path to a given file, and will open  and parse
11// that file.
12func OpenFile(path string) (Sections, error) {
13	f, err := os.Open(path)
14	if err != nil {
15		return Sections{}, awserr.New(ErrCodeUnableToReadFile, "unable to open file", err)
16	}
17	defer f.Close()
18
19	return Parse(f)
20}
21
22// Parse will parse the given file using the shared config
23// visitor.
24func Parse(f io.Reader) (Sections, error) {
25	tree, err := ParseAST(f)
26	if err != nil {
27		return Sections{}, err
28	}
29
30	v := NewDefaultVisitor()
31	if err = Walk(tree, v); err != nil {
32		return Sections{}, err
33	}
34
35	return v.Sections, nil
36}
37
38// ParseBytes will parse the given bytes and return the parsed sections.
39func ParseBytes(b []byte) (Sections, error) {
40	tree, err := ParseASTBytes(b)
41	if err != nil {
42		return Sections{}, err
43	}
44
45	v := NewDefaultVisitor()
46	if err = Walk(tree, v); err != nil {
47		return Sections{}, err
48	}
49
50	return v.Sections, nil
51}
52