github.com/mineiros-io/terradoc@v0.0.9-0.20220711062319-018bd4ae81f5/internal/parsers/docparser/definition.go (about) 1 package docparser 2 3 import ( 4 "fmt" 5 6 "github.com/hashicorp/hcl/v2" 7 "github.com/mineiros-io/terradoc/internal/entities" 8 "github.com/mineiros-io/terradoc/internal/schemas/docschema" 9 ) 10 11 func parseDoc(f *hcl.File) (entities.Doc, error) { 12 docContent, diags := f.Body.Content(docschema.RootSchema()) 13 if diags.HasErrors() { 14 return entities.Doc{}, fmt.Errorf("parsing Terradoc doc: %v", diags.Errs()) 15 } 16 17 var err error 18 19 def := entities.Doc{} 20 21 def.Header, err = parseHeader(docContent.Blocks.OfType(headerBlockName)) 22 if err != nil { 23 return entities.Doc{}, fmt.Errorf("parsing header: %v", err) 24 } 25 26 def.Sections, err = parseSections(docContent.Blocks.OfType(sectionBlockName)) 27 if err != nil { 28 return entities.Doc{}, err 29 } 30 31 def.References, err = parseReferences(docContent.Blocks.OfType(referencesBlockName)) 32 if err != nil { 33 return entities.Doc{}, err 34 } 35 36 return def, nil 37 }