func checkIntegrity()

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
}