package schema // ErrorContainer represents a container where we can add errors and retrieve them. type ErrorContainer interface { Push(err error) PushWarning(err error) HasErrors() bool HasWarnings() bool Errors() []error Warnings() []error } // StructValidator is a validator for structs. type StructValidator struct { errors []error warnings []error } // NewStructValidator is a constructor of struct validator. func NewStructValidator() *StructValidator { val := new(StructValidator) val.errors = make([]error, 0) val.warnings = make([]error, 0) return val } // Push an error to the validator. func (v *StructValidator) Push(err error) { v.errors = append(v.errors, err) } // PushWarning error to the validator. func (v *StructValidator) PushWarning(err error) { v.warnings = append(v.warnings, err) } // HasErrors checks whether the validator contains errors. func (v *StructValidator) HasErrors() bool { return len(v.errors) > 0 } // HasWarnings checks whether the validator contains warning errors. func (v *StructValidator) HasWarnings() bool { return len(v.warnings) > 0 } // Errors returns the errors. func (v *StructValidator) Errors() []error { return v.errors } // Warnings returns the warnings. func (v *StructValidator) Warnings() []error { return v.warnings } // Clear errors and warnings. func (v *StructValidator) Clear() { v.errors = []error{} v.warnings = []error{} }