// Copyright 2016 Qiang Xue. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. package validation import "errors" type stringValidator func(string) bool // StringRule is a rule that checks a string variable using a specified stringValidator. type StringRule struct { validate stringValidator message string } // NewStringRule creates a new validation rule using a function that takes a string value and returns a bool. // The rule returned will use the function to check if a given string or byte slice is valid or not. // An empty value is considered to be valid. Please use the Required rule to make sure a value is not empty. func NewStringRule(validator stringValidator, message string) *StringRule { return &StringRule{ validate: validator, message: message, } } // Error sets the error message for the rule. func (v *StringRule) Error(message string) *StringRule { return NewStringRule(v.validate, message) } // Validate checks if the given value is valid or not. func (v *StringRule) Validate(value interface{}) error { value, isNil := Indirect(value) if isNil || IsEmpty(value) { return nil } str, err := EnsureString(value) if err != nil { return err } if v.validate(str) { return nil } return errors.New(v.message) }