github.com/mineiros-io/terradoc@v0.0.9-0.20220711062319-018bd4ae81f5/internal/validators/outputsvalidator/outputsvalidator.go (about)

     1  package outputsvalidator
     2  
     3  import (
     4  	"github.com/mineiros-io/terradoc/internal/entities"
     5  	"github.com/mineiros-io/terradoc/internal/validators"
     6  )
     7  
     8  const CheckType = "output"
     9  
    10  type outputValidationChecks map[string]outputValidation
    11  
    12  type outputValidation struct {
    13  	defined    entities.Output
    14  	documented entities.Output
    15  }
    16  
    17  func Validate(doc entities.Doc, outputsFile entities.ValidationContents) validators.Summary {
    18  	summary := validators.Summary{Type: CheckType}
    19  
    20  	validationResult := validateOutputs(doc.AllOutputs(), outputsFile.Outputs)
    21  
    22  	for outputName, check := range validationResult {
    23  		switch {
    24  		case check.defined.Name == "":
    25  			summary.MissingDefinition = append(summary.MissingDefinition, outputName)
    26  		case check.documented.Name == "":
    27  			summary.MissingDocumentation = append(summary.MissingDocumentation, outputName)
    28  		}
    29  	}
    30  
    31  	return summary
    32  }
    33  
    34  func validateOutputs(docOutputs, outputsFileOutputs []entities.Output) outputValidationChecks {
    35  	result := outputValidationChecks{}
    36  
    37  	for _, tfOutput := range docOutputs {
    38  		result[tfOutput.Name] = outputValidation{documented: tfOutput}
    39  	}
    40  
    41  	for _, fOutput := range outputsFileOutputs {
    42  		val, ok := result[fOutput.Name]
    43  		if !ok {
    44  			val = outputValidation{}
    45  		}
    46  		val.defined = fOutput
    47  
    48  		result[fOutput.Name] = val
    49  	}
    50  
    51  	return result
    52  }