diff options
Diffstat (limited to '')
| -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 +} |
