32 lines
847 B
Go
32 lines
847 B
Go
package ledger
|
|
|
|
// ValidationIssue describes a single validation problem.
|
|
type ValidationIssue struct {
|
|
Field string `json:"field"`
|
|
Code string `json:"code"`
|
|
Msg string `json:"msg"`
|
|
}
|
|
|
|
// ValidationError aggregates issues. Implements error without fmt/errors.
|
|
type ValidationError struct {
|
|
Issues []ValidationIssue `json:"issues"`
|
|
}
|
|
|
|
func (e *ValidationError) Error() string {
|
|
if e == nil || len(e.Issues) == 0 {
|
|
return ""
|
|
}
|
|
if len(e.Issues) == 1 {
|
|
return e.Issues[0].Field + ": " + e.Issues[0].Msg
|
|
}
|
|
return "validation failed"
|
|
}
|
|
|
|
// veAdd appends a new issue into a (possibly nil) *ValidationError.
|
|
func veAdd(e **ValidationError, field, code, msg string) {
|
|
if *e == nil {
|
|
*e = &ValidationError{Issues: make([]ValidationIssue, 0, 4)}
|
|
}
|
|
(*e).Issues = append((*e).Issues, ValidationIssue{Field: field, Code: code, Msg: msg})
|
|
}
|