@@ -54,14 +54,14 @@ func (v *Version) Parse(version string) error {
5454 if n , errParse := strconv .Atoi (version ); errParse == nil && n < 0 {
5555 return errNonPositive
5656 }
57- return err
57+ return fmt . Errorf ( "failed to convert version number %q: %w" , substrings [ 0 ], err )
5858 } else if v .Number == 0 {
5959 return errNonPositive
6060 }
6161
6262 if len (substrings ) > 1 {
6363 if err = v .Stage .Parse (substrings [1 ]); err != nil {
64- return err
64+ return fmt . Errorf ( "failed to parse stage: %w" , err )
6565 }
6666 }
6767
@@ -83,7 +83,11 @@ func (v Version) Validate() error {
8383 return errNonPositive
8484 }
8585
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
8791}
8892
8993// Compare returns -1 if v < other, 0 if v == other, and 1 if v > other.
@@ -105,17 +109,22 @@ func (v Version) IsStable() bool {
105109// MarshalJSON implements json.Marshaller
106110func (v Version ) MarshalJSON () ([]byte , error ) {
107111 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 )
109118 }
110119
111- return json . Marshal ( v . String ())
120+ return marshaled , nil
112121}
113122
114123// UnmarshalJSON implements json.Unmarshaller
115124func (v * Version ) UnmarshalJSON (b []byte ) error {
116125 var str string
117126 if err := json .Unmarshal (b , & str ); err != nil {
118- return err
127+ return fmt . Errorf ( "failed to unmarshal version: %w" , err )
119128 }
120129
121130 return v .Parse (str )
0 commit comments