cargo-mend 0.2.0

Opinionated visibility auditing for Rust crates and workspaces
use serde::Deserialize;
use serde::Serialize;

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum FixSupport {
    #[default]
    None,
    ShortenImport,
    PreferModuleImport,
    InlinePathQualifiedType,
    FixPubUse,
    NeedsManualPubUseCleanup,
    InternalParentFacade,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FixSummaryBucket {
    Fix,
    FixPubUse,
}

impl FixSupport {
    pub const fn note(self) -> Option<&'static str> {
        match self {
            Self::None | Self::NeedsManualPubUseCleanup | Self::InternalParentFacade => None,
            Self::ShortenImport | Self::PreferModuleImport | Self::InlinePathQualifiedType => {
                Some("this warning is auto-fixable with `cargo mend --fix`")
            },
            Self::FixPubUse => Some("this warning is auto-fixable with `cargo mend --fix-pub-use`"),
        }
    }

    pub const fn summary_bucket(self) -> Option<FixSummaryBucket> {
        match self {
            Self::None | Self::NeedsManualPubUseCleanup | Self::InternalParentFacade => None,
            Self::ShortenImport | Self::PreferModuleImport | Self::InlinePathQualifiedType => {
                Some(FixSummaryBucket::Fix)
            },
            Self::FixPubUse => Some(FixSummaryBucket::FixPubUse),
        }
    }
}