87 lines
2.6 KiB
Go
87 lines
2.6 KiB
Go
// Licensed to Elasticsearch B.V. under one or more contributor
|
|
// license agreements. See the NOTICE file distributed with
|
|
// this work for additional information regarding copyright
|
|
// ownership. Elasticsearch B.V. licenses this file to you under
|
|
// the Apache License, Version 2.0 (the "License"); you may
|
|
// not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing,
|
|
// software distributed under the License is distributed on an
|
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
// KIND, either express or implied. See the License for the
|
|
// specific language governing permissions and limitations
|
|
// under the License.
|
|
|
|
package mapval
|
|
|
|
// ValueResult represents the result of checking a leaf value.
|
|
type ValueResult struct {
|
|
Valid bool
|
|
Message string // Reason this is invalid
|
|
}
|
|
|
|
// A ValueValidator is used to validate a value in a Map.
|
|
type ValueValidator func(path Path, v interface{}) *Results
|
|
|
|
// An IsDef defines the type of check to do.
|
|
// Generally only name and checker are set. optional and checkKeyMissing are
|
|
// needed for weird checks like key presence.
|
|
type IsDef struct {
|
|
name string
|
|
checker ValueValidator
|
|
optional bool
|
|
checkKeyMissing bool
|
|
}
|
|
|
|
func (id IsDef) check(path Path, v interface{}, keyExists bool) *Results {
|
|
if id.checkKeyMissing {
|
|
if !keyExists {
|
|
return ValidResult(path)
|
|
}
|
|
|
|
return SimpleResult(path, false, "this key should not exist")
|
|
}
|
|
|
|
if !id.optional && !keyExists {
|
|
return KeyMissingResult(path)
|
|
}
|
|
|
|
if id.checker != nil {
|
|
return id.checker(path, v)
|
|
}
|
|
|
|
return ValidResult(path)
|
|
}
|
|
|
|
// ValidResult is a convenience value for Valid results.
|
|
func ValidResult(path Path) *Results {
|
|
return SimpleResult(path, true, "is valid")
|
|
}
|
|
|
|
// ValidVR is a convenience value for Valid results.
|
|
var ValidVR = ValueResult{true, "is valid"}
|
|
|
|
// KeyMissingResult is emitted when a key was expected, but was not present.
|
|
func KeyMissingResult(path Path) *Results {
|
|
return SingleResult(path, KeyMissingVR)
|
|
}
|
|
|
|
// KeyMissingVR is emitted when a key was expected, but was not present.
|
|
var KeyMissingVR = ValueResult{
|
|
false,
|
|
"expected this key to be present",
|
|
}
|
|
|
|
// StrictFailureResult is emitted when Strict() is used, and an unexpected field is found.
|
|
func StrictFailureResult(path Path) *Results {
|
|
return SingleResult(path, StrictFailureVR)
|
|
}
|
|
|
|
// StrictFailureVR is emitted when Strict() is used, and an unexpected field is found.
|
|
var StrictFailureVR = ValueResult{
|
|
false,
|
|
"unexpected field encountered during strict validation",
|
|
}
|