diff options
| author | Stefan Majewsky <majewsky@gmx.net> | 2018-01-28 22:47:35 +0100 |
|---|---|---|
| committer | Stefan Majewsky <majewsky@gmx.net> | 2018-01-28 22:47:35 +0100 |
| commit | 3834e49c90c39f4c95e3b9e7bb52b35204a75625 (patch) | |
| tree | 480a3e2867dc076c459ee2279e98eb546bc6ca10 /errors.go | |
| parent | a9595114a691fd04ba043c1b1564741a107bbcdd (diff) | |
| download | go-schwift-3834e49c90c39f4c95e3b9e7bb52b35204a75625.tar.gz | |
sketch out how requests could work
Diffstat (limited to 'errors.go')
| -rw-r--r-- | errors.go | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/errors.go b/errors.go new file mode 100644 index 0000000..62c5792 --- /dev/null +++ b/errors.go @@ -0,0 +1,75 @@ +/****************************************************************************** +* +* Copyright 2018 Stefan Majewsky <majewsky@gmx.net> +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +******************************************************************************/ + +package schwift + +import ( + "errors" + "fmt" + "net/http" + "strconv" + "strings" +) + +var ( + //ErrNoContainerName is returned by Request.Do() if ObjectName is given, but + //ContainerName is empty. + ErrNoContainerName = errors.New("missing container name") + //ErrMalformedContainerName is returned by Request.Do() if ContainerName + //contains slashes. + ErrMalformedContainerName = errors.New("container name may not contain slashes") +) + +//UnexpectedStatusCodeError is generated when a request to Swift does not yield +//a response with the expected successful status code. +type UnexpectedStatusCodeError struct { + ExpectedStatusCodes []int + ActualResponse *http.Response + ResponseBody []byte +} + +//Error implements the builtin/error interface. +func (e UnexpectedStatusCodeError) Error() string { + codeStrs := make([]string, len(e.ExpectedStatusCodes)) + for idx, code := range e.ExpectedStatusCodes { + codeStrs[idx] = strconv.Itoa(code) + } + return fmt.Sprintf("expected %s response, got %d instead: %s", + strings.Join(codeStrs, "/"), + e.ActualResponse.StatusCode, + string(e.ResponseBody), + ) +} + +//Is checks if the given error is an UnexpectedStatusCodeError for that status +//code. For example: +// +// metadata, err := container.Metadata() +// if schwift.Is(err, http.StatusNotFound) { +// // ... create container ... +// } else if err != nil { +// // ... report error ... +// } else { +// // ... use metadata ... +// } +func Is(err error, code int) bool { + if e, ok := err.(UnexpectedStatusCodeError); ok { + return e.ActualResponse.StatusCode == code + } + return false +} |
