use http::Method;
#[derive(Debug, Clone)]
pub struct RouteInfo {
pub path: String,
pub methods: Vec<Method>,
}
#[derive(Debug, Clone)]
pub struct RouteConflictError {
pub new_path: String,
pub method: Option<Method>,
pub existing_path: String,
pub details: String,
}
impl std::fmt::Display for RouteConflictError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
writeln!(
f,
"\nÔò¡ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔò«"
)?;
writeln!(
f,
"Ôöé ROUTE CONFLICT DETECTED Ôöé"
)?;
writeln!(
f,
"Ôò░ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔò»"
)?;
writeln!(f)?;
writeln!(f, " Conflicting routes:")?;
writeln!(f, "  Existing: {}", self.existing_path)?;
writeln!(f, "  New: {}", self.new_path)?;
writeln!(f)?;
if let Some(ref method) = self.method {
writeln!(f, " HTTP Method: {}", method)?;
writeln!(f)?;
}
writeln!(f, " Details: {}", self.details)?;
writeln!(f)?;
writeln!(f, " How to resolve:")?;
writeln!(f, " 1. Use different path patterns for each route")?;
writeln!(
f,
" 2. If paths must be similar, ensure parameter names differ"
)?;
writeln!(
f,
" 3. Consider using different HTTP methods if appropriate"
)?;
writeln!(f)?;
writeln!(f, " Example:")?;
writeln!(f, " Instead of:")?;
writeln!(f, " .route(\"/users/{{id}}\", get(handler1))")?;
writeln!(f, " .route(\"/users/{{user_id}}\", get(handler2))")?;
writeln!(f)?;
writeln!(f, " Use:")?;
writeln!(f, " .route(\"/users/{{id}}\", get(handler1))")?;
writeln!(f, " .route(\"/users/{{id}}/profile\", get(handler2))")?;
Ok(())
}
}
impl std::error::Error for RouteConflictError {}