Coder Social home page Coder Social logo

Comments (3)

ishkawa avatar ishkawa commented on May 28, 2024

Oh, yes. I leave this to indicate common errors. This may be useful when user don't define their custom errors. Users can also throw their custom error, so they can choose type of errors to throw.

from apikit.

takasek avatar takasek commented on May 28, 2024

I got your intention.
So, which is better way when user throws the error?

  1. uses defined ErrorType as possible.
  2. defines their own ErrorType as they like.

If 1), I prefer associated errors of SessionTaskError to belong to each NSError, RequestError and ResponseError type.
If 2), pre-defined but unused UnexpectedURLRequest seems confusing. And RequestError and ResponseError suit rather Struct type than Enum type.

And in any case, what do you think of specify protocols for associated ErrorTypes in SessionTaskError? they looks too vague to use.

from apikit.

ishkawa avatar ishkawa commented on May 28, 2024

I think the second one is better.

Generally, several kind of errors might happen while getting web API response. It is impossible to enumerate possible errors exhaustively because there're custom errors, and that is the reason why associated values of SessionTaskType is untyped.

From the viewpoint of call-site, we can get where the error occurred by the case of SessionTaskError, but can't get the type of the associated error. We have to cast the error to known error type to get what the error is. Here's an example:

let request = GitHubAPI.SearchRepositoriesRequest(query: "APIKit")

Session.sendRequest(request) { result in
    switch result {
    case .Success(let response):
        print("response: ", response)

    case .Failure(let error):
        switch error {
        case .ResponseError(let gitHubError as GitHubError):
            print("GitHub API Error: \(gitHubError.message)")

        default:
            print("Unknown Error: \(error)")
        }
    }
}

This is exactly the same way to do-try-catch, which is untyped error handling model. We can specialize error handling for known error types, but handling unknown errors is unavoidable. In other words, all specializations for known errors are optional, but handling unknown errors is required. Thus, specializations for predefine errors such as RequestError and ResponseError are also optional.

from apikit.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.