aboutsummaryrefslogtreecommitdiff
path: root/loader.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--loader.go36
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
+}