diff --git a/client/buildingblock.go b/client/buildingblock.go index c9c0358..6665050 100644 --- a/client/buildingblock.go +++ b/client/buildingblock.go @@ -3,7 +3,6 @@ package client import ( "bytes" "encoding/json" - "fmt" "io" "net/http" "net/url" @@ -103,9 +102,7 @@ func (c *MeshStackProviderClient) ReadBuildingBlock(uuid string) (*MeshBuildingB return nil, nil } - if res.StatusCode != 200 { - return nil, fmt.Errorf("unexpected status code: %d, %s", res.StatusCode, data) - } + isSuccessHTTPStatusOrThrow(res) var bb MeshBuildingBlock err = json.Unmarshal(data, &bb) @@ -141,9 +138,7 @@ func (c *MeshStackProviderClient) CreateBuildingBlock(bb *MeshBuildingBlockCreat return nil, err } - if res.StatusCode != 201 { - return nil, fmt.Errorf("unexpected status code: %d, %s", res.StatusCode, data) - } + isSuccessHTTPStatusOrThrow(res) var createdBb MeshBuildingBlock err = json.Unmarshal(data, &createdBb) diff --git a/client/project.go b/client/project.go index eca75ca..81bd7dd 100644 --- a/client/project.go +++ b/client/project.go @@ -178,9 +178,7 @@ func (c *MeshStackProviderClient) CreateProject(project *MeshProjectCreate) (*Me return nil, err } - if res.StatusCode != 201 { - return nil, fmt.Errorf("unexpected status code: %d, %s", res.StatusCode, data) - } + isSuccessHTTPStatusOrThrow(res) var createdProject MeshProject err = json.Unmarshal(data, &createdProject) @@ -219,9 +217,7 @@ func (c *MeshStackProviderClient) UpdateProject(project *MeshProjectCreate) (*Me return nil, err } - if res.StatusCode != 200 { - return nil, fmt.Errorf("unexpected status code: %d, %s", res.StatusCode, data) - } + isSuccessHTTPStatusOrThrow(res) var updatedProject MeshProject err = json.Unmarshal(data, &updatedProject) diff --git a/client/project_binding.go b/client/project_binding.go index fdb71e5..004a93f 100644 --- a/client/project_binding.go +++ b/client/project_binding.go @@ -70,9 +70,7 @@ func (c *MeshStackProviderClient) readProjectBinding(name string, contentType st return nil, nil } - if res.StatusCode != 200 { - return nil, fmt.Errorf("unexpected status code: %d, %s", res.StatusCode, data) - } + isSuccessHTTPStatusOrThrow(res) var binding MeshProjectBinding err = json.Unmarshal(data, &binding) @@ -120,9 +118,7 @@ func (c *MeshStackProviderClient) createProjectBinding(binding *MeshProjectBindi return nil, err } - if res.StatusCode != 200 { - return nil, fmt.Errorf("unexpected status code: %d, %s", res.StatusCode, data) - } + isSuccessHTTPStatusOrThrow(res) var createdBinding MeshProjectBinding err = json.Unmarshal(data, &createdBinding) diff --git a/client/status_code_checker.go b/client/status_code_checker.go new file mode 100644 index 0000000..84b0fdb --- /dev/null +++ b/client/status_code_checker.go @@ -0,0 +1,20 @@ +package client + +import ( + "io" + "fmt" + "net/http" +) + +func isSuccessHTTPStatusOrThrow(resp *http.Response) error { + data, err := io.ReadAll(resp.Body) + if err != nil { + return fmt.Errorf("failed to retrieve response body: %v", err) + } + + if resp.StatusCode < 200 || resp.StatusCode >= 300 { + return fmt.Errorf("unexpected status code: got %d, expected 2xx range\nbody: %s", resp.StatusCode, data) + } + + return nil +} diff --git a/client/tag_definition.go b/client/tag_definition.go index 1855b26..5892ceb 100644 --- a/client/tag_definition.go +++ b/client/tag_definition.go @@ -156,9 +156,7 @@ func (c *MeshStackProviderClient) ReadTagDefinition(name string) (*MeshTagDefini } defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - return nil, fmt.Errorf("failed to read tag definition: %s", resp.Status) - } + isSuccessHTTPStatusOrThrow(resp) var tagDefinition MeshTagDefinition if err := json.NewDecoder(resp.Body).Decode(&tagDefinition); err != nil { @@ -191,9 +189,7 @@ func (c *MeshStackProviderClient) CreateTagDefinition(tagDefinition *MeshTagDefi } defer resp.Body.Close() - if resp.StatusCode != http.StatusCreated { - return nil, fmt.Errorf("failed to create tag definition: %s", resp.Status) - } + isSuccessHTTPStatusOrThrow(resp) var createdTagDefinition MeshTagDefinition if err := json.NewDecoder(resp.Body).Decode(&createdTagDefinition); err != nil { @@ -224,9 +220,7 @@ func (c *MeshStackProviderClient) UpdateTagDefinition(tagDefinition *MeshTagDefi } defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - return nil, fmt.Errorf("failed to update tag definition: %s", resp.Status) - } + isSuccessHTTPStatusOrThrow(resp) var updatedTagDefinition MeshTagDefinition if err := json.NewDecoder(resp.Body).Decode(&updatedTagDefinition); err != nil { diff --git a/client/tenant.go b/client/tenant.go index b83c5e6..89dd651 100644 --- a/client/tenant.go +++ b/client/tenant.go @@ -3,7 +3,6 @@ package client import ( "bytes" "encoding/json" - "fmt" "io" "net/http" "net/url" @@ -83,9 +82,7 @@ func (c *MeshStackProviderClient) ReadTenant(workspace string, project string, p return nil, nil } - if res.StatusCode != 200 { - return nil, fmt.Errorf("unexpected status code: %d, %s", res.StatusCode, data) - } + isSuccessHTTPStatusOrThrow(res) var tenant MeshTenant err = json.Unmarshal(data, &tenant) @@ -121,9 +118,7 @@ func (c *MeshStackProviderClient) CreateTenant(tenant *MeshTenantCreate) (*MeshT return nil, err } - if res.StatusCode != 201 { - return nil, fmt.Errorf("unexpected status code: %d, %s", res.StatusCode, data) - } + isSuccessHTTPStatusOrThrow(res) var createdTenant MeshTenant err = json.Unmarshal(data, &createdTenant)