Documentation ¶
Index ¶
- Constants
- Variables
- func AgainstSchema(schema *spec.Schema, data interface{}, formats strfmt.Registry, ...) error
- func Enum(path, in string, data interface{}, enum interface{}) *errors.Validation
- func FormatOf(path, in, format, data string, registry strfmt.Registry) *errors.Validation
- func IsValueValidAgainstRange(val interface{}, typeName, format, prefix, path string) error
- func MaxItems(path, in string, size, max int64) *errors.Validation
- func MaxLength(path, in, data string, maxLength int64) *errors.Validation
- func Maximum(path, in string, data, max float64, exclusive bool) *errors.Validation
- func MaximumInt(path, in string, data, max int64, exclusive bool) *errors.Validation
- func MaximumNativeType(path, in string, val interface{}, max float64, exclusive bool) *errors.Validation
- func MaximumUint(path, in string, data, max uint64, exclusive bool) *errors.Validation
- func MinItems(path, in string, size, min int64) *errors.Validation
- func MinLength(path, in, data string, minLength int64) *errors.Validation
- func Minimum(path, in string, data, min float64, exclusive bool) *errors.Validation
- func MinimumInt(path, in string, data, min int64, exclusive bool) *errors.Validation
- func MinimumNativeType(path, in string, val interface{}, min float64, exclusive bool) *errors.Validation
- func MinimumUint(path, in string, data, min uint64, exclusive bool) *errors.Validation
- func MultipleOf(path, in string, data, factor float64) *errors.Validation
- func MultipleOfInt(path, in string, data int64, factor int64) *errors.Validation
- func MultipleOfNativeType(path, in string, val interface{}, multipleOf float64) *errors.Validation
- func MultipleOfUint(path, in string, data, factor uint64) *errors.Validation
- func Pattern(path, in, data, pattern string) *errors.Validation
- func Required(path, in string, data interface{}) *errors.Validation
- func SetContinueOnErrors(c bool)
- func UniqueItems(path, in string, data interface{}) *errors.Validation
- type Option
- type Opts
- type Result
- func (r *Result) AddErrors(errors ...error)
- func (r *Result) AddWarnings(warnings ...error)
- func (r *Result) AsError() error
- func (r *Result) HasErrors() bool
- func (r *Result) HasErrorsOrWarnings() bool
- func (r *Result) HasWarnings() bool
- func (r *Result) Inc()
- func (r *Result) IsValid() bool
- func (r *Result) Merge(others ...*Result) *Result
- func (r *Result) MergeAsErrors(others ...*Result) *Result
- func (r *Result) MergeAsWarnings(others ...*Result) *Result
- type SchemaValidator
- func (s *SchemaValidator) Applies(source interface{}, kind reflect.Kind) bool
- func (s *SchemaValidator) NewValidatorForField(field string, schema *spec.Schema, rootSchema interface{}, root string, ...) ValueValidator
- func (s *SchemaValidator) NewValidatorForIndex(index int, schema *spec.Schema, rootSchema interface{}, root string, ...) ValueValidator
- func (s *SchemaValidator) SetPath(path string)
- func (s *SchemaValidator) Validate(data interface{}) *Result
- type SchemaValidatorOptions
- type ValueValidator
- Bugs
Examples ¶
Constants ¶
const ( // ArrayDoesNotAllowAdditionalItemsError when an additionalItems construct is not verified by the array values provided. // // TODO: should move to package go-openapi/errors ArrayDoesNotAllowAdditionalItemsError = "array doesn't allow for additional items" // HasDependencyError indicates that a dependencies construct was not verified HasDependencyError = "%q has a dependency on %s" // InvalidTypeConversionError indicates that a numerical conversion for the given type could not be carried on InvalidTypeConversionError = "invalid type conversion in %s: %v " // MustValidateAtLeastOneSchemaError indicates that in a AnyOf construct, none of the schema constraints specified were verified MustValidateAtLeastOneSchemaError = "%q must validate at least one schema (anyOf)" // MustValidateOnlyOneSchemaError indicates that in a OneOf construct, either none of the schema constraints specified were verified, or several were MustValidateOnlyOneSchemaError = "%q must validate one and only one schema (oneOf). %s" // MustValidateAllSchemasError indicates that in a AllOf construct, at least one of the schema constraints specified were not verified // // TODO: punctuation in message MustValidateAllSchemasError = "%q must validate all the schemas (allOf)%s" // MustNotValidateSchemaError indicates that in a Not construct, the schema constraint specified was verified MustNotValidateSchemaError = "%q must not validate the schema (not)" )
Error messages related to schema validation and returned as results.
Variables ¶
var ( // Debug is true when the SWAGGER_DEBUG env var is not empty. // It enables a more verbose logging of validators. Debug = os.Getenv("SWAGGER_DEBUG") != "" )
Functions ¶
func AgainstSchema ¶
func AgainstSchema(schema *spec.Schema, data interface{}, formats strfmt.Registry, options ...Option) error
AgainstSchema validates the specified data against the provided schema, using a registry of supported formats.
When no pre-parsed *spec.Schema structure is provided, it uses a JSON schema as default. See example.
Example ¶
package main import ( "encoding/json" "fmt" "k8s.io/kube-openapi/pkg/validation/spec" "k8s.io/kube-openapi/pkg/validation/strfmt" "k8s.io/kube-openapi/pkg/validation/validate" ) func main() { // Example using encoding/json as unmarshaller var schemaJSON = ` { "properties": { "name": { "type": "string", "pattern": "^[A-Za-z]+$", "minLength": 1 } }, "patternProperties": { "address-[0-9]+": { "type": "string", "pattern": "^[\\s|a-z]+$" } }, "required": [ "name" ], "additionalProperties": false }` schema := new(spec.Schema) _ = json.Unmarshal([]byte(schemaJSON), schema) input := map[string]interface{}{} // JSON data to validate inputJSON := `{"name": "Ivan","address-1": "sesame street"}` _ = json.Unmarshal([]byte(inputJSON), &input) // strfmt.Default is the registry of recognized formats err := validate.AgainstSchema(schema, input, strfmt.Default) if err != nil { fmt.Printf("JSON does not validate against schema: %v", err) } else { fmt.Printf("OK") } }
Output: OK
func Enum ¶
func Enum(path, in string, data interface{}, enum interface{}) *errors.Validation
Enum validates if the data is a member of the enum
func FormatOf ¶
func FormatOf(path, in, format, data string, registry strfmt.Registry) *errors.Validation
FormatOf validates if a string matches a format in the format registry
func IsValueValidAgainstRange ¶
IsValueValidAgainstRange checks that a numeric value is compatible with the range defined by Type and Format, that is, may be converted without loss.
NOTE: this check is about type capacity and not formal verification such as: 1.0 != 1L
func MaxItems ¶
func MaxItems(path, in string, size, max int64) *errors.Validation
MaxItems validates that there are at most n items in a slice
func MaxLength ¶
func MaxLength(path, in, data string, maxLength int64) *errors.Validation
MaxLength validates a string for maximum length
func Maximum ¶
func Maximum(path, in string, data, max float64, exclusive bool) *errors.Validation
Maximum validates if a number is smaller than a given maximum
func MaximumInt ¶
func MaximumInt(path, in string, data, max int64, exclusive bool) *errors.Validation
MaximumInt validates if a number is smaller than a given maximum
func MaximumNativeType ¶
func MaximumNativeType(path, in string, val interface{}, max float64, exclusive bool) *errors.Validation
MaximumNativeType provides native type constraint validation as a facade to various numeric types versions of Maximum constraint check.
Assumes that any possible loss conversion during conversion has been checked beforehand.
NOTE: currently, the max value is marshalled as a float64, no matter what, which means there may be a loss during conversions (e.g. for very large integers)
TODO: Normally, a JSON MAX_SAFE_INTEGER check would ensure conversion remains loss-free
func MaximumUint ¶
func MaximumUint(path, in string, data, max uint64, exclusive bool) *errors.Validation
MaximumUint validates if a number is smaller than a given maximum
func MinItems ¶
func MinItems(path, in string, size, min int64) *errors.Validation
MinItems validates that there are at least n items in a slice
func MinLength ¶
func MinLength(path, in, data string, minLength int64) *errors.Validation
MinLength validates a string for minimum length
func Minimum ¶
func Minimum(path, in string, data, min float64, exclusive bool) *errors.Validation
Minimum validates if a number is smaller than a given minimum
func MinimumInt ¶
func MinimumInt(path, in string, data, min int64, exclusive bool) *errors.Validation
MinimumInt validates if a number is smaller than a given minimum
func MinimumNativeType ¶
func MinimumNativeType(path, in string, val interface{}, min float64, exclusive bool) *errors.Validation
MinimumNativeType provides native type constraint validation as a facade to various numeric types versions of Minimum constraint check.
Assumes that any possible loss conversion during conversion has been checked beforehand.
NOTE: currently, the min value is marshalled as a float64, no matter what, which means there may be a loss during conversions (e.g. for very large integers)
TODO: Normally, a JSON MAX_SAFE_INTEGER check would ensure conversion remains loss-free
func MinimumUint ¶
func MinimumUint(path, in string, data, min uint64, exclusive bool) *errors.Validation
MinimumUint validates if a number is smaller than a given minimum
func MultipleOf ¶
func MultipleOf(path, in string, data, factor float64) *errors.Validation
MultipleOf validates if the provided number is a multiple of the factor
func MultipleOfInt ¶
func MultipleOfInt(path, in string, data int64, factor int64) *errors.Validation
MultipleOfInt validates if the provided integer is a multiple of the factor
func MultipleOfNativeType ¶
func MultipleOfNativeType(path, in string, val interface{}, multipleOf float64) *errors.Validation
MultipleOfNativeType provides native type constraint validation as a facade to various numeric types version of MultipleOf constraint check.
Assumes that any possible loss conversion during conversion has been checked beforehand.
NOTE: currently, the multipleOf factor is marshalled as a float64, no matter what, which means there may be a loss during conversions (e.g. for very large integers)
TODO: Normally, a JSON MAX_SAFE_INTEGER check would ensure conversion remains loss-free
func MultipleOfUint ¶
func MultipleOfUint(path, in string, data, factor uint64) *errors.Validation
MultipleOfUint validates if the provided unsigned integer is a multiple of the factor
func Pattern ¶
func Pattern(path, in, data, pattern string) *errors.Validation
Pattern validates a string against a regular expression
func Required ¶
func Required(path, in string, data interface{}) *errors.Validation
Required validates an interface for requiredness
func SetContinueOnErrors ¶
func SetContinueOnErrors(c bool)
SetContinueOnErrors sets global default behavior regarding spec validation errors reporting.
For extended error reporting, you most likely want to set it to true. For faster validation, it's better to give up early when a spec is detected as invalid: set it to false (this is the default).
Setting this mode does NOT affect the validation status.
NOTE: this method affects global defaults. It is not suitable for a concurrent usage.
func UniqueItems ¶
func UniqueItems(path, in string, data interface{}) *errors.Validation
UniqueItems validates that the provided slice has unique elements
Types ¶
type Option ¶
type Option func(*SchemaValidatorOptions)
Option sets optional rules for schema validation
type Opts ¶
type Opts struct {
ContinueOnErrors bool // true: continue reporting errors, even if spec is invalid
}
Opts specifies validation options for a SpecValidator.
NOTE: other options might be needed, for example a go-swagger specific mode.
type Result ¶
Result represents a validation result set, composed of errors and warnings.
It is used to keep track of all detected errors and warnings during the validation of a specification.
Matchcount is used to determine which errors are relevant in the case of AnyOf, OneOf schema validation. Results from the validation branch with most matches get eventually selected.
TODO: keep path of key originating the error
func (*Result) AddErrors ¶
AddErrors adds errors to this validation result (if not already reported).
Since the same check may be passed several times while exploring the spec structure (via $ref, ...) reported messages are kept unique.
func (*Result) AddWarnings ¶
AddWarnings adds warnings to this validation result (if not already reported).
func (*Result) AsError ¶
AsError renders this result as an error interface
TODO: reporting / pretty print with path ordered and indented
func (*Result) HasErrors ¶
HasErrors returns true when this result is invalid.
Returns false on a nil *Result.
func (*Result) HasErrorsOrWarnings ¶
HasErrorsOrWarnings returns true when this result contains either errors or warnings.
Returns false on a nil *Result.
func (*Result) HasWarnings ¶
HasWarnings returns true when this result contains warnings.
Returns false on a nil *Result.
func (*Result) IsValid ¶
IsValid returns true when this result is valid.
Returns true on a nil *Result.
func (*Result) MergeAsErrors ¶
MergeAsErrors merges this result with the other one(s), preserving match counts etc.
Warnings from input are merged as Errors in the returned merged Result.
func (*Result) MergeAsWarnings ¶
MergeAsWarnings merges this result with the other one(s), preserving match counts etc.
Errors from input are merged as Warnings in the returned merged Result.
type SchemaValidator ¶
type SchemaValidator struct { Path string Schema *spec.Schema Root interface{} KnownFormats strfmt.Registry Options SchemaValidatorOptions // contains filtered or unexported fields }
SchemaValidator validates data against a JSON schema
func NewSchemaValidator ¶
func NewSchemaValidator(schema *spec.Schema, rootSchema interface{}, root string, formats strfmt.Registry, options ...Option) *SchemaValidator
NewSchemaValidator creates a new schema validator.
Panics if the provided schema is invalid.
func (*SchemaValidator) Applies ¶
func (s *SchemaValidator) Applies(source interface{}, kind reflect.Kind) bool
Applies returns true when this schema validator applies
func (*SchemaValidator) NewValidatorForField ¶
func (s *SchemaValidator) NewValidatorForField(field string, schema *spec.Schema, rootSchema interface{}, root string, formats strfmt.Registry, opts ...Option) ValueValidator
func (*SchemaValidator) NewValidatorForIndex ¶
func (s *SchemaValidator) NewValidatorForIndex(index int, schema *spec.Schema, rootSchema interface{}, root string, formats strfmt.Registry, opts ...Option) ValueValidator
func (*SchemaValidator) SetPath ¶
func (s *SchemaValidator) SetPath(path string)
SetPath sets the path for this schema validator
func (*SchemaValidator) Validate ¶
func (s *SchemaValidator) Validate(data interface{}) *Result
Validate validates the data against the schema
type SchemaValidatorOptions ¶
type SchemaValidatorOptions struct { NewValidatorForIndex func(index int, schema *spec.Schema, rootSchema interface{}, root string, formats strfmt.Registry, opts ...Option) ValueValidator NewValidatorForField func(field string, schema *spec.Schema, rootSchema interface{}, root string, formats strfmt.Registry, opts ...Option) ValueValidator // contains filtered or unexported fields }
SchemaValidatorOptions defines optional rules for schema validation
func (SchemaValidatorOptions) Options ¶
func (svo SchemaValidatorOptions) Options() []Option
Options returns current options
type ValueValidator ¶
type ValueValidator interface { // SetPath sets the exact path of the validator prior to calling Validate. // The exact path contains the map keys and array indices to locate the // value to be validated from the root data element. SetPath(path string) // Applies returns true if the validator applies to the valueKind // from source. Validate will be called if and only if Applies returns true. Applies(source interface{}, valueKind reflect.Kind) bool // Validate validates the value. Validate(value interface{}) *Result }
ValueValidator validates the values it applies to.
Notes ¶
Bugs ¶
succeededOnce is always false
can't get to here. Should remove dead code (commented out).