diff options
| author | 2026-02-16 21:37:31 +0300 | |
|---|---|---|
| committer | 2026-02-17 20:13:24 +0300 | |
| commit | d3fd3ba6f9796df96ec4eae9124a460fbb05eb59 (patch) | |
| tree | 57803d91f8ae7bd3085b0b393bdf81bcc2ac0dfa /loader.go | |
| download | conf-d3fd3ba6f9796df96ec4eae9124a460fbb05eb59.tar.gz conf-d3fd3ba6f9796df96ec4eae9124a460fbb05eb59.tar.bz2 conf-d3fd3ba6f9796df96ec4eae9124a460fbb05eb59.tar.xz conf-d3fd3ba6f9796df96ec4eae9124a460fbb05eb59.zip | |
init
Diffstat (limited to 'loader.go')
| -rw-r--r-- | loader.go | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/loader.go b/loader.go new file mode 100644 index 0000000..d9bc9e4 --- /dev/null +++ b/loader.go @@ -0,0 +1,36 @@ +package conf + +import ( + "fmt" + "os" + + "go.neonxp.ru/conf/internal/ast" + "go.neonxp.ru/conf/internal/parser" + "go.neonxp.ru/conf/model" +) + +func LoadFile(filename string) (model.Doc, error) { + content, err := os.ReadFile(filename) + if err != nil { + return nil, fmt.Errorf("failed load file: %w", err) + } + + return Load(filename, content) +} + +func Load(name string, input []byte) (model.Doc, error) { + p := &parser.Parser{} + astSlice, err := p.Parse(name, input) + if err != nil { + return nil, fmt.Errorf("failed parse conf content: %w", err) + } + + astTree := ast.Parse(p, astSlice) + + doc, err := ast.ToDoc(astTree[0]) + if err != nil { + return nil, fmt.Errorf("failed build Doc: %w", err) + } + + return doc, nil +} |
