1package openapi3
2
3// SchemaValidationOption describes options a user has when validating request / response bodies.
4type SchemaValidationOption func(*schemaValidationSettings)
5
6type schemaValidationSettings struct {
7	failfast     bool
8	multiError   bool
9	asreq, asrep bool // exclusive (XOR) fields
10}
11
12// FailFast returns schema validation errors quicker.
13func FailFast() SchemaValidationOption {
14	return func(s *schemaValidationSettings) { s.failfast = true }
15}
16
17func MultiErrors() SchemaValidationOption {
18	return func(s *schemaValidationSettings) { s.multiError = true }
19}
20
21func VisitAsRequest() SchemaValidationOption {
22	return func(s *schemaValidationSettings) { s.asreq, s.asrep = true, false }
23}
24func VisitAsResponse() SchemaValidationOption {
25	return func(s *schemaValidationSettings) { s.asreq, s.asrep = false, true }
26}
27
28func newSchemaValidationSettings(opts ...SchemaValidationOption) *schemaValidationSettings {
29	settings := &schemaValidationSettings{}
30	for _, opt := range opts {
31		opt(settings)
32	}
33	return settings
34}
35