43 lines
1.4 KiB
Go
43 lines
1.4 KiB
Go
package grab
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
)
|
|
|
|
var (
|
|
// ErrBadLength indicates that the server response or an existing file does
|
|
// not match the expected content length.
|
|
ErrBadLength = errors.New("bad content length")
|
|
|
|
// ErrBadChecksum indicates that a downloaded file failed to pass checksum
|
|
// validation.
|
|
ErrBadChecksum = errors.New("checksum mismatch")
|
|
|
|
// ErrNoFilename indicates that a reasonable filename could not be
|
|
// automatically determined using the URL or response headers from a server.
|
|
ErrNoFilename = errors.New("no filename could be determined")
|
|
|
|
// ErrNoTimestamp indicates that a timestamp could not be automatically
|
|
// determined using the response headers from the remote server.
|
|
ErrNoTimestamp = errors.New("no timestamp could be determined for the remote file")
|
|
|
|
// ErrFileExists indicates that the destination path already exists.
|
|
ErrFileExists = errors.New("file exists")
|
|
)
|
|
|
|
// StatusCodeError indicates that the server response had a status code that
|
|
// was not in the 200-299 range (after following any redirects).
|
|
type StatusCodeError int
|
|
|
|
func (err StatusCodeError) Error() string {
|
|
return fmt.Sprintf("server returned %d %s", err, http.StatusText(int(err)))
|
|
}
|
|
|
|
// IsStatusCodeError returns true if the given error is of type StatusCodeError.
|
|
func IsStatusCodeError(err error) bool {
|
|
_, ok := err.(StatusCodeError)
|
|
return ok
|
|
}
|