func()

in mmv1/api/resource.go [414:482]


func (r *Resource) Validate() {
	if r.Name == "" {
		log.Fatalf("Missing `name` for resource")
	}

	if r.NestedQuery != nil && r.NestedQuery.IsListOfIds && len(r.Identity) != 1 {
		log.Fatalf("`is_list_of_ids: true` implies resource has exactly one `identity` property")
	}

	// Ensures we have all properties defined
	for _, i := range r.Identity {
		hasIdentify := slices.ContainsFunc(r.AllUserProperties(), func(p *Type) bool {
			return p.Name == i
		})
		if !hasIdentify {
			log.Fatalf("Missing property/parameter for identity %s", i)
		}
	}

	if r.Description == "" {
		log.Fatalf("Missing `description` for resource %s", r.Name)
	}

	if !r.Exclude {
		if len(r.Properties) == 0 {
			log.Fatalf("Missing `properties` for resource %s", r.Name)
		}
	}

	allowed := []string{"POST", "PUT", "PATCH"}
	if !slices.Contains(allowed, r.CreateVerb) {
		log.Fatalf("Value on `create_verb` should be one of %#v", allowed)
	}

	allowed = []string{"GET", "POST"}
	if !slices.Contains(allowed, r.ReadVerb) {
		log.Fatalf("Value on `read_verb` should be one of %#v", allowed)
	}

	allowed = []string{"POST", "PUT", "PATCH", "DELETE"}
	if !slices.Contains(allowed, r.DeleteVerb) {
		log.Fatalf("Value on `delete_verb` should be one of %#v", allowed)
	}

	allowed = []string{"POST", "PUT", "PATCH"}
	if !slices.Contains(allowed, r.UpdateVerb) {
		log.Fatalf("Value on `update_verb` should be one of %#v", allowed)
	}

	for _, property := range r.AllProperties() {
		property.Validate(r.Name)
	}

	if r.IamPolicy != nil {
		r.IamPolicy.Validate(r.Name)
	}

	if r.NestedQuery != nil {
		r.NestedQuery.Validate(r.Name)
	}

	for _, example := range r.Examples {
		example.Validate(r.Name)
	}

	if r.Async != nil {
		r.Async.Validate()
	}
}