code: func ReadError(statusCode int, re []byte) error {
  	var e error
  	switch statusCode {
  	case http.StatusNotFound:
  		e = &NotFoundError{Message: string(re)}
  	case http.StatusBadRequest:
  		e = &BadParameterError{Message: string(re)}
  	case http.StatusNotImplemented:
  		e = &NotImplementedError{Message: string(re)}
  	case http.StatusPreconditionFailed:
  		e = &CompareFailedError{Message: string(re)}
  	case http.StatusForbidden:
  		e = &AccessDeniedError{Message: string(re)}
  	case http.StatusConflict:
  		e = &AlreadyExistsError{Message: string(re)}
  	case http.StatusTooManyRequests:
  		e = &LimitExceededError{Message: string(re)}
  	case http.StatusGatewayTimeout:
  		e = &ConnectionProblemError{Message: string(re)}
  	default:
  		if statusCode < 200 || statusCode > 299 {
  			return Errorf(string(re))
  		}
  		return nil
  	}
  	return unmarshalError(e, re)
  }
docs: // ReadError converts http error to internal error type
  // based on HTTP response code and HTTP body contents
  // if status code does not indicate error, it will return nil