code: func isContextErr(err error) bool {
  	if err == context.Canceled || err == context.DeadlineExceeded {
  		return true
  	}
  	// This happens e.g. on redirect errors, see https://golang.org/src/net/http/client_test.go#L329
  	if ue, ok := err.(*url.Error); ok {
  		if ue.Temporary() {
  			return true
  		}
  		// Use of an AWS Signing Transport can result in a wrapped url.Error
  		return isContextErr(ue.Err)
  	}
  	return false
  }
docs: // isContextErr returns true if the error is from a context that was canceled or deadline exceeded