use thiserror::Error; /// Fehler-Hierarchie der Application-Schicht. /// /// Use Cases geben diesen Typ zurück. Die API-Schicht mappt ihn auf /// HTTP-Statuscodes (`NotFound` → 404, `Unauthorized` → 401, …), /// Persistence-Adapter mappen ihre konkreten Fehler nach /// `Repository(...)` hinein. #[derive(Debug, Error)] pub enum ApplicationError { #[error("not found")] NotFound, #[error("unauthorized")] Unauthorized, #[error("forbidden")] Forbidden, #[error("validation: {0}")] Validation(String), /// Operation würde einen Daten-Konflikt erzeugen (z. B. FK-RESTRICT /// beim Löschen, UNIQUE-Verletzung). Mappt auf HTTP `409`. #[error("conflict: {0}")] Conflict(String), #[error("repository: {0}")] Repository(String), #[error("external service: {0}")] External(String), #[error("unexpected: {0}")] Unexpected(String), }