aboutsummaryrefslogtreecommitdiff
path: root/loader.go
diff options
context:
space:
mode:
author2026-02-16 21:37:31 +0300
committer2026-02-17 20:13:24 +0300
commitd3fd3ba6f9796df96ec4eae9124a460fbb05eb59 (patch)
tree57803d91f8ae7bd3085b0b393bdf81bcc2ac0dfa /loader.go
downloadconf-d3fd3ba6f9796df96ec4eae9124a460fbb05eb59.tar.gz
conf-d3fd3ba6f9796df96ec4eae9124a460fbb05eb59.tar.bz2
conf-d3fd3ba6f9796df96ec4eae9124a460fbb05eb59.tar.xz
conf-d3fd3ba6f9796df96ec4eae9124a460fbb05eb59.zip
init
Diffstat (limited to 'loader.go')
-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
+}