Skip to content

Commit 1f669d1

Browse files
authored
Use wrapped static errors (#343)
1 parent 2d16357 commit 1f669d1

File tree

2 files changed

+24
-16
lines changed

2 files changed

+24
-16
lines changed

.golangci.yml

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ linters-settings:
3232
linters:
3333
enable:
3434
- asasalint
35+
- err113
3536
- asciicheck
3637
- bidichk
3738
- contextcheck

client/nginx.go

+23-16
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,13 @@ var (
3838
defaultTimeout = 10 * time.Second
3939
)
4040

41-
// ErrUnsupportedVer means that client's API version is not supported by NGINX plus API.
42-
var ErrUnsupportedVer = errors.New("API version of the client is not supported by running NGINX Plus")
41+
var (
42+
ErrParameterRequired = errors.New("parameter is required")
43+
ErrServerNotFound = errors.New("server not found")
44+
ErrServerExists = errors.New("server already exists")
45+
ErrNotSupported = errors.New("not supported")
46+
ErrInvalidTimeout = errors.New("invalid timeout")
47+
)
4348

4449
// NginxClient lets you access NGINX Plus API.
4550
type NginxClient struct {
@@ -570,15 +575,15 @@ func NewNginxClient(apiEndpoint string, opts ...Option) (*NginxClient, error) {
570575
}
571576

572577
if c.httpClient == nil {
573-
return nil, errors.New("http client is not set")
578+
return nil, fmt.Errorf("http client: %w", ErrParameterRequired)
574579
}
575580

576581
if !versionSupported(c.apiVersion) {
577-
return nil, fmt.Errorf("API version %v is not supported by the client", c.apiVersion)
582+
return nil, fmt.Errorf("API version %v: %w by the client", c.apiVersion, ErrNotSupported)
578583
}
579584

580585
if c.ctxTimeout <= 0 {
581-
return nil, fmt.Errorf("timeout has to be greater than 0 %v", c.ctxTimeout)
586+
return nil, fmt.Errorf("timeout %q needs to be greater than 0: %w", c.ctxTimeout, ErrInvalidTimeout)
582587
}
583588

584589
if c.checkAPI {
@@ -594,7 +599,7 @@ func NewNginxClient(apiEndpoint string, opts ...Option) (*NginxClient, error) {
594599
}
595600
}
596601
if !found {
597-
return nil, fmt.Errorf("API version %v is not supported by the server", c.apiVersion)
602+
return nil, fmt.Errorf("API version %v: %w by the server", c.apiVersion, ErrNotSupported)
598603
}
599604
}
600605

@@ -642,7 +647,9 @@ func (client *NginxClient) getAPIVersions(httpClient *http.Client, endpoint stri
642647
defer resp.Body.Close()
643648

644649
if resp.StatusCode != http.StatusOK {
645-
return nil, fmt.Errorf("%v is not accessible: expected %v response, got %v", endpoint, http.StatusOK, resp.StatusCode)
650+
return nil, createResponseMismatchError(resp.Body).Wrap(fmt.Sprintf(
651+
"failed to get endpoint %q, expected %v response, got %v",
652+
endpoint, http.StatusOK, resp.StatusCode))
646653
}
647654

648655
body, err := io.ReadAll(resp.Body)
@@ -714,7 +721,7 @@ func (client *NginxClient) AddHTTPServer(upstream string, server UpstreamServer)
714721
return fmt.Errorf("failed to add %v server to %v upstream: %w", server.Server, upstream, err)
715722
}
716723
if id != -1 {
717-
return fmt.Errorf("failed to add %v server to %v upstream: server already exists", server.Server, upstream)
724+
return fmt.Errorf("failed to add %v server to %v upstream: %w", server.Server, upstream, ErrServerExists)
718725
}
719726

720727
path := fmt.Sprintf("http/upstreams/%v/servers/", upstream)
@@ -733,7 +740,7 @@ func (client *NginxClient) DeleteHTTPServer(upstream string, server string) erro
733740
return fmt.Errorf("failed to remove %v server from %v upstream: %w", server, upstream, err)
734741
}
735742
if id == -1 {
736-
return fmt.Errorf("failed to remove %v server from %v upstream: server doesn't exist", server, upstream)
743+
return fmt.Errorf("failed to remove %v server from %v upstream: %w", server, upstream, ErrServerNotFound)
737744
}
738745

739746
path := fmt.Sprintf("http/upstreams/%v/servers/%v", upstream, id)
@@ -1028,7 +1035,7 @@ func (client *NginxClient) AddStreamServer(upstream string, server StreamUpstrea
10281035
return fmt.Errorf("failed to add %v stream server to %v upstream: %w", server.Server, upstream, err)
10291036
}
10301037
if id != -1 {
1031-
return fmt.Errorf("failed to add %v stream server to %v upstream: server already exists", server.Server, upstream)
1038+
return fmt.Errorf("failed to add %v stream server to %v upstream: %w", server.Server, upstream, ErrServerExists)
10321039
}
10331040

10341041
path := fmt.Sprintf("stream/upstreams/%v/servers/", upstream)
@@ -1046,7 +1053,7 @@ func (client *NginxClient) DeleteStreamServer(upstream string, server string) er
10461053
return fmt.Errorf("failed to remove %v stream server from %v upstream: %w", server, upstream, err)
10471054
}
10481055
if id == -1 {
1049-
return fmt.Errorf("failed to remove %v stream server from %v upstream: server doesn't exist", server, upstream)
1056+
return fmt.Errorf("failed to remove %v stream server from %v upstream: %w", server, upstream, ErrServerNotFound)
10501057
}
10511058

10521059
path := fmt.Sprintf("stream/upstreams/%v/servers/%v", upstream, id)
@@ -1541,7 +1548,7 @@ func (client *NginxClient) getKeyValPairs(zone string, stream bool) (KeyValPairs
15411548
base = "stream"
15421549
}
15431550
if zone == "" {
1544-
return nil, errors.New("zone required")
1551+
return nil, fmt.Errorf("zone: %w", ErrParameterRequired)
15451552
}
15461553

15471554
path := fmt.Sprintf("%v/keyvals/%v", base, zone)
@@ -1594,7 +1601,7 @@ func (client *NginxClient) addKeyValPair(zone string, key string, val string, st
15941601
base = "stream"
15951602
}
15961603
if zone == "" {
1597-
return errors.New("zone required")
1604+
return fmt.Errorf("zone: %w", ErrParameterRequired)
15981605
}
15991606

16001607
path := fmt.Sprintf("%v/keyvals/%v", base, zone)
@@ -1622,7 +1629,7 @@ func (client *NginxClient) modifyKeyValPair(zone string, key string, val string,
16221629
base = "stream"
16231630
}
16241631
if zone == "" {
1625-
return errors.New("zone required")
1632+
return fmt.Errorf("zone: %w", ErrParameterRequired)
16261633
}
16271634

16281635
path := fmt.Sprintf("%v/keyvals/%v", base, zone)
@@ -1652,7 +1659,7 @@ func (client *NginxClient) deleteKeyValuePair(zone string, key string, stream bo
16521659
base = "stream"
16531660
}
16541661
if zone == "" {
1655-
return errors.New("zone required")
1662+
return fmt.Errorf("zone: %w", ErrParameterRequired)
16561663
}
16571664

16581665
// map[string]string can't have a nil value so we use a different type here.
@@ -1683,7 +1690,7 @@ func (client *NginxClient) deleteKeyValPairs(zone string, stream bool) error {
16831690
base = "stream"
16841691
}
16851692
if zone == "" {
1686-
return errors.New("zone required")
1693+
return fmt.Errorf("zone: %w", ErrParameterRequired)
16871694
}
16881695

16891696
path := fmt.Sprintf("%v/keyvals/%v", base, zone)

0 commit comments

Comments
 (0)