package e621 import ( "e621_to_neo4j/utils" "encoding/json" "net/http" ) type e621APITask[T utils.DataType] struct { uri string } func (e e621APITask[T]) UriPath() string { return e.uri } func (e e621APITask[T]) HandleStatusCode(statusCode int) utils.DataResponse[T] { var err error switch statusCode { case 421: err = utils.RateLimitReachedError{} case 424: err = utils.InvalidParametersError{} case 520: err = utils.OriginConnectionTimeOutError{} case 522: err = utils.OriginConnectionTimeOutError{} case 524: err = utils.OriginConnectionTimeOutError{} case 525: err = utils.SSLHandshakeFailedError{} default: err = utils.StatusCodesToError(statusCode) } return utils.DataResponse[T]{Error: err} } func (e e621APITask[T]) HandleResponse(responseData *http.Response) utils.DataResponse[T] { var data T err := json.NewDecoder(responseData.Body).Decode(&data) defer responseData.Body.Close() if err != nil { return utils.DataResponse[T]{Error: err} } return utils.DataResponse[T]{Data: data} } func (e e621APITask[T]) HandleError(error error) utils.DataResponse[T] { return utils.DataResponse[T]{Error: error} } func NewE621ApiTask[T utils.DataType](uri string) utils.Task[T] { return &e621APITask[T]{ uri: uri, } }