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  }