# 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 { // 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" } ```