#[derive(Debug, Clone)]
pub enum RefactoringAction {
IntroduceTrait {
suggested_name: String,
methods: Vec<String>,
},
MoveCloser { target_location: String },
ExtractAdapter {
adapter_name: String,
purpose: String,
},
SplitModule { suggested_modules: Vec<String> },
SimplifyAbstraction { direct_usage: String },
BreakCycle { suggested_direction: String },
StabilizeInterface { interface_name: String },
General { action: String },
AddGetters { fields: Vec<String> },
IntroduceNewtype {
suggested_name: String,
wrapped_type: String,
},
}
impl std::fmt::Display for RefactoringAction {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
RefactoringAction::IntroduceTrait {
suggested_name,
methods,
} => {
write!(
f,
"Introduce trait `{}` with methods: {}",
suggested_name,
methods.join(", ")
)
}
RefactoringAction::MoveCloser { target_location } => {
write!(f, "Move component to `{}`", target_location)
}
RefactoringAction::ExtractAdapter {
adapter_name,
purpose,
} => {
write!(f, "Extract adapter `{}` to {}", adapter_name, purpose)
}
RefactoringAction::SplitModule { suggested_modules } => {
write!(f, "Split into modules: {}", suggested_modules.join(", "))
}
RefactoringAction::SimplifyAbstraction { direct_usage } => {
write!(f, "Replace with direct usage: {}", direct_usage)
}
RefactoringAction::BreakCycle {
suggested_direction,
} => {
write!(f, "Break cycle by {}", suggested_direction)
}
RefactoringAction::StabilizeInterface { interface_name } => {
write!(f, "Add stable interface `{}`", interface_name)
}
RefactoringAction::General { action } => {
write!(f, "{}", action)
}
RefactoringAction::AddGetters { fields } => {
write!(f, "Add getter methods for: {}", fields.join(", "))
}
RefactoringAction::IntroduceNewtype {
suggested_name,
wrapped_type,
} => {
write!(
f,
"Introduce newtype: `struct {}({});`",
suggested_name, wrapped_type
)
}
}
}
}