Skip to content
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

Ensure the error handling are following the best practice #506

Open
3 tasks
brunoocasali opened this issue Aug 14, 2023 · 1 comment
Open
3 tasks

Ensure the error handling are following the best practice #506

brunoocasali opened this issue Aug 14, 2023 · 1 comment
Labels
enhancement New feature or request good first issue Good for newcomers

Comments

@brunoocasali
Copy link
Member

⚠️ This issue is generated, it means the examples and the namings do not necessarily correspond to the language of this repository.
Also, if you are a maintainer, please add any clarification and instructions about this issue.

Sorry if this is already wholly/partially implemented. Feel free to let me know about the state of this issue in the repo.

Related to meilisearch/integration-guides#267


⚠️ For more information check meilisearch/integration-guides#267

Ensure this SDK follows the following guidelines:

  • All the errors > 400 without message should be sent as MeilisearchCommunicationError
  • Know errors like index is not found, or mistakes in the request like not-allowed params should be sent as MeilisearchApiError
  • Any other error should be a MeilisearchError

Essentially all the error should extend from MeilisearchError, the consumers should have a way to catch all the errors.
Let us know if this is not clear, or you have better idea!

TODO:

  • Create a base error called MeilisearchError which will extend the standard error if it does not exist (when the language supports)
  • Make all the other errors extend this error.
  • Move all errors without message to MeilisearchCommunicationError since it is not a Meilisearch error anyway.
@brunoocasali brunoocasali added good first issue Good for newcomers enhancement New feature or request labels Aug 14, 2023
@irevoire
Copy link
Member

[ ] Create a base error called MeilisearchError which will extend the standard error if it does not exist (when the language supports)
[ ] Make all the other errors extend this error.

Hey, I’m just adding a little clarification on these two lines. In rust we don’t extend things since we're not using inheritance but composition.
However, for error handling, we usually don’t use oop and use our algebraic data type, the enums.
Since we're already using thiserror the pattern we should follow is:

#[derive(thiserror::Error)]
pub enum MeilisearchError {
  MeilisearchCommunicationError,
  MeilisearchApiError(#[from] ...), // here you should create a type that receives the meilisearch errors
  MeilisearchError(Box<dyn Error>), // shove everything else in here if it implements the error trait.
}

Or sometimes, instead of having a generic Box<dyn Error> that can break easily and is hard to pattern match, people return the error received. That's what we're currently doing, I believe.
This let our final user pattern match on the error we returned and react accordingly. (i.e.: If you see a serde error saying it can't deserialize your type, then you know it's an internal error on your side and not on meilisearch because it just uses serde).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

2 participants