Skip to content

Commit

Permalink
Remove rpc backtrace, resolve #4698
Browse files Browse the repository at this point in the history
  • Loading branch information
eval-exec committed Nov 26, 2024
1 parent 6ed0976 commit 6c7a896
Showing 1 changed file with 29 additions and 1 deletion.
30 changes: 29 additions & 1 deletion rpc/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -153,15 +153,43 @@ impl RPCError {
}
}

/// Removes the backtrace portion from an error string.
///
/// This function processes the input string `err_str` line by line and collects all lines
/// until it encounters a line starting with "Stack backtrace:". It then joins the collected
/// lines into a single string, effectively removing the backtrace section.
///
/// # Arguments
/// * `err_str` - A string slice containing the error message, potentially including a backtrace.
///
/// # Returns
/// * A `String` containing the error message without the backtrace.
///
/// # Example
/// ```
/// let error_message = "Error: Something went wrong\nStack backtrace:\n1: some_function\n2: another_function";
/// let cleaned_message = remove_backtrace(error_message);
/// assert_eq!(cleaned_message, "Error: Something went wrong");
/// ```
fn remove_backtrace(err_str: &str) -> String {
let lines: Vec<_> = err_str
.lines()
.take_while(|line| !line.starts_with("Stack backtrace:"))
.collect();
lines.join("\n")
}

/// Creates an RPC error from std error with the custom error code.
///
/// The parameter `err` is usually an std error. The Display form is used as the error message,
/// and the Debug form is used as the data.
pub fn custom_with_error<T: Display + Debug>(error_code: RPCError, err: T) -> Error {
let err_str_with_backtrace = format!("{err:?}");
let err_str = remove_backtrace(err_str_with_backtrace);
Error {
code: ErrorCode::ServerError(error_code as i64),
message: format!("{error_code:?}: {err}"),
data: Some(Value::String(format!("{err:?}"))),
data: Some(Value::String(err_str)),
}
}

Expand Down

0 comments on commit 6c7a896

Please sign in to comment.