File tree 3 files changed +92
-1
lines changed 3 files changed +92
-1
lines changed Original file line number Diff line number Diff line change @@ -12,7 +12,7 @@ import (
12
12
//
13
13
// Gerrit API docs: https://gerrit-review.googlesource.com/Documentation/json.html#patchSet
14
14
type PatchSet struct {
15
- Number string `json:"number"`
15
+ Number Number `json:"number"`
16
16
Revision string `json:"revision"`
17
17
Parents []string `json:"parents"`
18
18
Ref string `json:"ref"`
Original file line number Diff line number Diff line change
1
+ package gerrit
2
+
3
+ import (
4
+ "encoding/json"
5
+ "errors"
6
+ "strconv"
7
+ )
8
+
9
+
10
+ // Number is a string representing a number. This type is only used in cases
11
+ // where the API being queried may return an inconsistent result.
12
+ type Number string
13
+
14
+ // String returns the string representing the current number.
15
+ func (n * Number ) String () string {
16
+ return string (* n )
17
+ }
18
+
19
+ // Int returns the current number as an integer
20
+ func (n * Number ) Int () (int , error ) {
21
+ return strconv .Atoi (n .String ())
22
+ }
23
+
24
+ func (n * Number ) UnmarshalJSON (data []byte ) error {
25
+ // `data` is a number represented as a string (ex. "5").
26
+ var stringNumber string
27
+ if err := json .Unmarshal (data , & stringNumber ); err == nil {
28
+ * n = Number (stringNumber )
29
+ return nil
30
+ }
31
+
32
+ // `data` is a number represented as an integer (ex. 5). Here
33
+ // we're using json.Unmarshal to convert bytes -> number which
34
+ // we then convert to our own Number type.
35
+ var number int
36
+ if err := json .Unmarshal (data , & number ); err == nil {
37
+ * n = Number (strconv .Itoa (number ))
38
+ return nil
39
+ }
40
+ return errors .New ("Cannot convert data to number" )
41
+ }
42
+
Original file line number Diff line number Diff line change
1
+ package gerrit_test
2
+
3
+ import (
4
+ "encoding/json"
5
+ "testing"
6
+ "github.com/andygrunwald/go-gerrit"
7
+ )
8
+
9
+ func TestTypesNumber_String (t * testing.T ) {
10
+ number := gerrit .Number ("7" )
11
+ if number .String () != "7" {
12
+ t .Fatalf ("%s != 7" , number .String ())
13
+ }
14
+ }
15
+
16
+ func TestTypesNumber_Int (t * testing.T ) {
17
+ number := gerrit .Number ("7" )
18
+ integer , err := number .Int ()
19
+ if err != nil {
20
+ t .Fatal (err )
21
+ }
22
+ if integer != 7 {
23
+ t .Fatalf ("%d != 7" , integer )
24
+ }
25
+ }
26
+
27
+ func TestTypesNumber_UnmarshalJSON_String (t * testing.T ) {
28
+ var number gerrit.Number
29
+ if err := json .Unmarshal ([]byte (`"7"` ), & number ); err != nil {
30
+ t .Fatal (err )
31
+ }
32
+ if number .String () != "7" {
33
+ t .Fatalf ("%s != 7" , number .String ())
34
+ }
35
+ }
36
+
37
+ func TestTypesNumber_UnmarshalJSON_Int (t * testing.T ) {
38
+ var number gerrit.Number
39
+ if err := json .Unmarshal ([]byte ("7" ), & number ); err != nil {
40
+ t .Fatal (err )
41
+ }
42
+ integer , err := number .Int ()
43
+ if err != nil {
44
+ t .Fatal (err )
45
+ }
46
+ if integer != 7 {
47
+ t .Fatalf ("%d != 7" , integer )
48
+ }
49
+ }
You can’t perform that action at this time.
0 commit comments