-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patherror.go
59 lines (50 loc) · 1.28 KB
/
error.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package wrappers
import (
"fmt"
"reflect"
)
// ValidationError represents an error during validation.
type ValidationError struct {
WrapperName string
Value any
Reason string
}
func (e *ValidationError) Error() string {
return fmt.Sprintf("invalid value %+v for wrapper %q: %s", e.Value, e.WrapperName, e.Reason)
}
func ErrorNil(name Name) error {
return &ValidationError{
WrapperName: string(name),
Value: nil,
Reason: "value is nil",
}
}
func ErrorType(name Name, value any) error {
if value == nil {
return ErrorNil(name)
}
// Check if the value is a pointer type.
extra := ""
if reflect.TypeOf(value).Kind() != reflect.Ptr {
extra = "(if you're passing a wrapper, make sure NOT to dereference it to a value)"
}
return &ValidationError{
WrapperName: string(name),
Value: value,
Reason: fmt.Sprintf("type mismatch, got %T %s", value, extra),
}
}
func ErrorValue(name Name, value any, expected string) error {
return &ValidationError{
WrapperName: string(name),
Value: value,
Reason: fmt.Sprintf("expected %s", expected),
}
}
func ErrorParse(name Name, value any, err error) error {
return &ValidationError{
WrapperName: string(name),
Value: value,
Reason: fmt.Sprintf("failed to parse: %v", err),
}
}