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()
}
}