func (ep endpoint) Validate() error { if ep.Name == "" { return fmt.Errorf("missing name") } if ep.URI == "" && ep.Abstract == false { return fmt.Errorf("missing URI") } exclusiveLocations := gotility.NewStringSet("json", "postField") foundExclusiveLocations := gotility.StringSet{} for _, p := range ep.Parameters { err := p.Validate() if err != nil { return fmt.Errorf("invalid parameter %q: %s", p.Name, err) } if exclusiveLocations.Contains(p.Location) { if len(foundExclusiveLocations) > 0 && !foundExclusiveLocations.Contains(p.Location) { return fmt.Errorf("incompatible parameter locations: can not mix %q and %q parameters", foundExclusiveLocations.All()[0], p.Location) } foundExclusiveLocations.Set(p.Location) } } return nil }