asciigoat's INI parser
https://asciigoat.org/ini
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
898 B
49 lines
898 B
package basic |
|
|
|
import ( |
|
"bytes" |
|
"io" |
|
"io/fs" |
|
"strings" |
|
|
|
"asciigoat.org/ini/parser" |
|
) |
|
|
|
type decoder struct { |
|
p *parser.Parser |
|
out *Document |
|
|
|
queue []*token |
|
current *Section |
|
} |
|
|
|
// Decode attempts to decode an INI-style from an [io.Reader] array into a [Document] |
|
func Decode(r io.Reader) (*Document, error) { |
|
var out Document |
|
|
|
if r == nil { |
|
return nil, fs.ErrNotExist |
|
} |
|
|
|
// parser |
|
p := parser.NewParser(r) |
|
// decoder |
|
dec := decoder{p: p, out: &out} |
|
// glue |
|
p.OnToken = dec.OnToken |
|
p.OnError = dec.OnError |
|
|
|
// Go! |
|
err := p.Run() |
|
return &out, err |
|
} |
|
|
|
// DecodeBytes attempts to decode an INI-style bytes array into a [Document] |
|
func DecodeBytes(b []byte) (*Document, error) { |
|
return Decode(bytes.NewReader(b)) |
|
} |
|
|
|
// DecodeString attempts to decode an INI-style string into a [Document] |
|
func DecodeString(s string) (*Document, error) { |
|
return Decode(strings.NewReader(s)) |
|
}
|
|
|