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 }