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