in cft/spec/internal/main.go [178:229]
func checkIntegrity(s spec.Spec) bool {
passed := true
for rName, r := range s.ResourceTypes {
for pName, p := range r.Properties {
if p.PrimitiveType != spec.TypeEmpty {
continue
}
t := p.Type
if p.Type == spec.TypeList || p.Type == spec.TypeMap {
if p.PrimitiveItemType != spec.TypeEmpty {
continue
}
t = p.ItemType
}
if t != "" {
if _, ok := s.PropertyTypes[t]; !ok {
if _, ok := s.PropertyTypes[rName+"."+t]; !ok {
fmt.Fprintf(os.Stderr, "s.ResourceTypes[\"%s\"].Properties[\"%s\"].Type = \"NOT %s\"\n", rName, pName, t)
passed = false
}
}
}
}
}
for ptName, r := range s.PropertyTypes {
parts := strings.Split(ptName, ".")
rName := parts[0]
for pName, p := range r.Properties {
t := p.Type
if p.Type == spec.TypeList || p.Type == spec.TypeMap {
t = p.ItemType
}
if t != "" {
if _, ok := s.PropertyTypes[t]; !ok {
if _, ok := s.PropertyTypes[rName+"."+t]; !ok {
fmt.Fprintf(os.Stderr, "s.PropertyTypes[\"%s\"].Properties[\"%s\"].Type = \"NOT %s\"\n", ptName, pName, t)
passed = false
}
}
}
}
}
return passed
}