Beispiel #1
0
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
}