Crate user_panic

Source
Expand description

Custom Panic Messages According to the error.

Handles panics by calling a custom function using std::panic::set_hook and a Yaml File to generate the custom structs.

This allows for seperate error messages for seperate error and also allows the user to run some simple fixes (if possible).

§Output Example

Example of an API error’s panic output

The Program Crashed

Error: There was an error during the API request
It seems like an error that can be fixed by you!
Please follow the following instructions to try and fix the Error

    1: Try to check your Internet Connection.

	2: Check if your API request quota has been exhausted.
		1.  Instructions on how
		2.  to check
		3.  API quota

If the error still persists
Contact the Developer at xyz@wkl.com

§Code Example

To replicate the above output you need to first create a yaml file as follows.

API:
  message: There was an error during the API request
  fix instructions:
      - Try to check your Internet Connection.
      - Check if your API request quota has been exhausted.
      - - Instructions on how
        - to check
        - API quota

then you need to create the build script make sure userpanic is present in both dependencies and build dependencies in cargo.toml file

[dependencies]
user-panic = "0.1.0"

[build-dependencies]
user-panic = "0.1.0"

and make build.rs file as follows

fn main() {
   println!("cargo:rerun-if-changed=errors.yaml");
   println!("cargo:rerun-if-changed=build.rs");
   userpanic::panic_setup!("errors.yaml"); // Enter the yaml file path here
}

This will create panic_strucs.rs file in src directory This file can be then imported and used with panic_any to display the custom panics

mod panic_structs;

use std::panic::panic_any;
use crate::panic_structs::API;

fn main(){
    // This sets the custom hook for panic messages
    userpanic::set_hooks(Some("If the error still persists\nContact the developer at xyz@wkl.com"));
    // If None is passed then No developer info/message is shown.

    panic_any(API);
}

Macros§

panic_setup
Macro to be used in build script Only yaml file path or both yaml and output rust file can be provided

Structs§

UserPanic
This Struct is auto generated from the yaml file

Functions§

panic_setup_function
Not intended to be used directly and to be called by panic_setup! macro The main build script function
set_hooks
This function is used to set custom panic function Use this to use the custom hooks and set up the developer message