@@ -54,14 +54,14 @@ func (v *Version) Parse(version string) error {
54
54
if n , errParse := strconv .Atoi (version ); errParse == nil && n < 0 {
55
55
return errNonPositive
56
56
}
57
- return err
57
+ return fmt . Errorf ( "failed to convert version number %q: %w" , substrings [ 0 ], err )
58
58
} else if v .Number == 0 {
59
59
return errNonPositive
60
60
}
61
61
62
62
if len (substrings ) > 1 {
63
63
if err = v .Stage .Parse (substrings [1 ]); err != nil {
64
- return err
64
+ return fmt . Errorf ( "failed to parse stage: %w" , err )
65
65
}
66
66
}
67
67
@@ -83,7 +83,11 @@ func (v Version) Validate() error {
83
83
return errNonPositive
84
84
}
85
85
86
- return v .Stage .Validate ()
86
+ if err := v .Stage .Validate (); err != nil {
87
+ return fmt .Errorf ("failed to validate stage: %w" , err )
88
+ }
89
+
90
+ return nil
87
91
}
88
92
89
93
// Compare returns -1 if v < other, 0 if v == other, and 1 if v > other.
@@ -105,17 +109,22 @@ func (v Version) IsStable() bool {
105
109
// MarshalJSON implements json.Marshaller
106
110
func (v Version ) MarshalJSON () ([]byte , error ) {
107
111
if err := v .Validate (); err != nil {
108
- return []byte {}, err
112
+ return []byte {}, fmt .Errorf ("failed to validate version: %w" , err )
113
+ }
114
+
115
+ marshaled , err := json .Marshal (v .String ())
116
+ if err != nil {
117
+ return []byte {}, fmt .Errorf ("failed to marshal version: %w" , err )
109
118
}
110
119
111
- return json . Marshal ( v . String ())
120
+ return marshaled , nil
112
121
}
113
122
114
123
// UnmarshalJSON implements json.Unmarshaller
115
124
func (v * Version ) UnmarshalJSON (b []byte ) error {
116
125
var str string
117
126
if err := json .Unmarshal (b , & str ); err != nil {
118
- return err
127
+ return fmt . Errorf ( "failed to unmarshal version: %w" , err )
119
128
}
120
129
121
130
return v .Parse (str )
0 commit comments