Skip to content

[Feature request] Enabling support for transitive "#[from]' handling #435

@HatemMn

Description

@HatemMn

I will explain myself with a very simple example :

Say I have this huge error type on my codebase :

#[derive(Error, Debug)]
pub enum MyError {
    #[error("Network error: {0}")]
    Network(String),

    #[error("Conversion Error: {0}")]
    ConversionError(#[from] ConversionDbError),

    // Around 30 other variants

And with

#[derive(Error, Debug)]
pub enum ConversionDbError {
    #[error("UUID conversion error: {0}")]
    Uuid(#[from] uuid::Error),

    #[error("UTF-8 conversion error: {0}")]
    FromUtf8(#[from] std::string::FromUtf8Error),

    #[error("TryFromIntError conversion error: {0}")]
    TryFromInt(#[from] std::num::TryFromIntError),
}

I still need to add the manual conversions in order to forward the error down my enum :

impl From<uuid::Error> for DbError {
    fn from(e: uuid::Error) -> Self {
        Self::ConversionError(ConversionDbError::Uuid(e))
    }
}
// and the 2 others

This kindof takes away my goal from importing the thiserror crate, which is to reduce boilerplate redundant code to the maximum. Of course, the code above isn't my production code. My code is so huge that this kind of feature will make it way more human-friendly.

Am I doing smth wrong or this is a feature that can be implemented ?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions