diff options
| author | Jonathan Amsterdam <jba@google.com> | 2026-03-26 17:15:55 -0400 |
|---|---|---|
| committer | Jonathan Amsterdam <jba@google.com> | 2026-03-27 11:12:10 -0700 |
| commit | c59880de3cd54955ef11b4187daf7f930badb5e2 (patch) | |
| tree | ce3b9f04eb73c59418adf766b1172d2b0c54ce11 /internal/api | |
| parent | fc1885958fe59bc2bd183c6c666d0c3d30635c00 (diff) | |
| download | go-x-pkgsite-c59880de3cd54955ef11b4187daf7f930badb5e2.tar.xz | |
internal/api: add unmarshalResponse
Add a useful helper.
Use it once. We must use it at least once to pass
our check for unused functions.
Change-Id: Ied063f74dc7e3bc7dc7c12d4a17b0e55680951ad
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/759840
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
kokoro-CI: kokoro <noreply+kokoro@google.com>
Reviewed-by: Ethan Lee <ethanalee@google.com>
Diffstat (limited to 'internal/api')
| -rw-r--r-- | internal/api/api_test.go | 45 |
1 files changed, 28 insertions, 17 deletions
diff --git a/internal/api/api_test.go b/internal/api/api_test.go index 50c11327..caa620b4 100644 --- a/internal/api/api_test.go +++ b/internal/api/api_test.go @@ -5,8 +5,10 @@ package api import ( + "bytes" "context" "encoding/json" + "errors" "net/http" "net/http/httptest" "strconv" @@ -206,23 +208,12 @@ func TestServePackage(t *testing.T) { } if test.want != nil { - switch want := test.want.(type) { - case *Package: - var got Package - if err := json.Unmarshal(w.Body.Bytes(), &got); err != nil { - t.Fatalf("json.Unmarshal Package: %v", err) - } - if diff := cmp.Diff(want, &got); diff != "" { - t.Errorf("mismatch (-want +got):\n%s", diff) - } - case *Error: - var got Error - if err := json.Unmarshal(w.Body.Bytes(), &got); err != nil { - t.Fatalf("json.Unmarshal Error: %v. Body: %s", err, w.Body.String()) - } - if diff := cmp.Diff(want, &got); diff != "" { - t.Errorf("mismatch (-want +got):\n%s", diff) - } + got, err := unmarshalResponse[Package](w.Body.Bytes()) + if err != nil { + t.Fatal(err) + } + if diff := cmp.Diff(test.want, got); diff != "" { + t.Errorf("mismatch (-want +got):\n%s", diff) } } }) @@ -710,3 +701,23 @@ func TestServePackageSymbols(t *testing.T) { }) } } + +// unmarshalResponse unmarshals an API response into either +// a *T or an *Error. +func unmarshalResponse[T any](data []byte) (any, error) { + d := json.NewDecoder(bytes.NewReader(data)) + d.DisallowUnknownFields() + var t T + err1 := d.Decode(&t) + if err1 == nil { + return &t, nil + } + d = json.NewDecoder(bytes.NewReader(data)) + d.DisallowUnknownFields() + var e Error + err2 := d.Decode(&e) + if err2 == nil { + return &e, nil + } + return nil, errors.Join(err1, err2) +} |
