actix-error-derive 0.2.7

A simple library to handle REST errors, with a derive macro to generate the error type. It also provides a compatibility layer with actix-web.
Documentation
# actix-error
## Introduction

The `derive(AsApiError)` library provides a powerful, derive macro for Rust developers working with Actix-Web to easily convert enum variants into structured API errors. This library simplifies error handling in web applications by enabling automatic mapping of custom error types to HTTP response errors.

## Features
 - Automatic Conversion: Automatically convert enum variants to ApiError instances, including status codes, error kinds, and messages.
 - Customizable Error Responses: Customize error messages and HTTP status codes directly in enum definitions.
 - Support for Structured Errors: Handle errors with additional context, supporting both unnamed and named fields in enum variants.
 - Group Error Handling: Aggregate related errors into groups for streamlined error management.
 - Integration with Actix-Web: Seamlessly integrates with Actix-Web's error handling mechanisms.

## Installation
```toml
[dependencies]
actix-error = "0.2.5"
```

## Usage
### Defining Errors
Use the `#[derive(AsApiError)]` macro on enums to define your error types. Customize each variant with #[error] attributes to specify HTTP status codes, error messages, and more.


### Handling Errors in Actix-Web
Implement your Actix-Web handlers to return your custom errors. The `AsApiErrorTrait` ensures they are automatically converted into appropriate HTTP responses.

```rust
async fn my_handler() -> Result<HttpResponse, MyError> {
    // Your handler logic here...
    Err(MyError::NotFound)
}
```

### Advanced Error Handling
For errors requiring additional context, use named or unnamed fields directly in your enum variants.

```rust
#[derive(AsApiError)]
pub enum DetailedError {
    #[error(code = 500, msg = "Unexpected error occurred: {0}")]
    SystemError(String),
    #[error(status = "BadRequest", msg = "Invalid input: {field}")]
    ValidationError { field: DataField },
}

#[derive(AsApiError)]
pub enum Error {
    #[error(group)]
    Detailed(DetailedError), // Group errors together
    #[error(code = 500, msg = "Database error occurred", ignore)]
    DatabaseError(PostgresError), // Ignore the unnamed field
}

```
### Response format
```json
{
    "kind": "system_error",
    "message": "Unexpected error occurred: Internal Server Error"
    
}
```