recconf/check.go (37 lines of code) (raw):

package recconf import ( "encoding/json" ) type CheckResult struct { Issues []string RefCount int } func CheckRecommendConfig(configData string) (map[ModuleIndex]*CheckResult, error) { var conf RecommendConfig if err := json.Unmarshal([]byte(configData), &conf); err != nil { return nil, err } modules := conf.GetModules() results := make(map[ModuleIndex]*CheckResult, len(modules)) refMap := make(map[ModuleIndex]int) for index, module := range modules { results[index] = new(CheckResult) if dependent, ok := module.(Dependent); ok { if err := dependent.Requirements().Check(modules); err != nil { results[index].Issues = append(results[index].Issues, err.Error()) } for refIndex := range dependent.Requirements() { refMap[refIndex]++ } } if validator, ok := module.(Validator); ok { if err := validator.Validate(); err != nil { results[index].Issues = append(results[index].Issues, err.Error()) } } } for index, result := range results { result.RefCount = refMap[index] } return results, nil }