youtubebeat/vendor/github.com/elastic/beats/libbeat/common/mapval/value.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",
}