New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Combine error callbacks #377
Changes from 3 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
package com.vimeo.networking2 | ||
|
||
import com.vimeo.networking2.VimeoResponse.Error | ||
import com.vimeo.networking2.VimeoResponse.Success | ||
|
||
/** | ||
* Result of the API response. [Success] contains the data while the [Error] class will | ||
* inform you of an api error. | ||
*/ | ||
sealed class VimeoResponse<out T> { | ||
|
||
/** | ||
* A successful response. | ||
* | ||
* @param data The parsed data for the request. | ||
*/ | ||
data class Success<out T>(val data: T) : VimeoResponse<T>() | ||
|
||
/** | ||
* An error occurred when making the request. This error may be due to invalid parameters, | ||
* exception thrown when making the request or there was an error parsing the response. | ||
* | ||
* @param message The error message. | ||
*/ | ||
sealed class Error(val message: String): VimeoResponse<Nothing>() { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔥 |
||
|
||
/** | ||
* Vimeo API returned an error response for the request you made. | ||
* | ||
* @param reason Info on the error. | ||
*/ | ||
data class Api(val reason: ApiError): Error("API error: ${reason.errorCode ?: "unknown"}") | ||
|
||
/** | ||
* Exception was thrown when making the request. This maybe due to no internet. | ||
* | ||
* @param throwable Info on the exception that was thrown. | ||
*/ | ||
data class Exception(val throwable: Throwable): Error("Exception thrown") | ||
|
||
/** | ||
* Generic error occurred. The request was successful, but the response could not be | ||
* parsed by the SDK. This maybe because it is not formatted correctly. The raw response | ||
* will allows you to see the info about the request. | ||
* | ||
* @param rawResponse Raw response from the API. | ||
*/ | ||
data class Generic(val rawResponse: String): Error("Generic error") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There are certain APIs that require knowledge about the HTTP status code (e.g. 404, 401, 500) of an error. Such APIs include:
If we don't expose at least the error code here, it will be more difficult for consumers to use certain APIs. Of course in most cases, the specifics of the error are not important to the UI, but our consuming code often makes certain decisions based on that error code, so I would suggest adding the code in addition to the raw response. |
||
|
||
} | ||
|
||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good for both Java and Kotlin consumers!