From f8087a3c6a530c8d8d1837e029b9af21271f647d Mon Sep 17 00:00:00 2001 From: wfx Date: Mon, 2 Feb 2026 22:00:37 +0100 Subject: [PATCH] docs: Traits & Enums comparison - Domain is complete - All app/ traits present in domain/ - Domain has additional features (fine rotation, interpolation) - RotationMode is more flexible than plain Rotation - Better error handling in MultiPageThumbnails - No changes needed - domain version is superior Refs: Migration Step 1.7 --- DEVNOTE/Traits-Enums-Comparison.md | 160 +++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 DEVNOTE/Traits-Enums-Comparison.md diff --git a/DEVNOTE/Traits-Enums-Comparison.md b/DEVNOTE/Traits-Enums-Comparison.md new file mode 100644 index 0000000..f9a9ef3 --- /dev/null +++ b/DEVNOTE/Traits-Enums-Comparison.md @@ -0,0 +1,160 @@ +# Traits & Enums Konsolidierung - Vergleich + +## Status: ✅ Domain-Version ist vollständig und erweitert + +### Enums + +| Enum | app/ | domain/ | Status | +|------|------|---------|--------| +| `Rotation` | ✅ | ✅ | ✅ Identisch | +| `FlipDirection` | ✅ | ✅ | ✅ Identisch | +| `RotationMode` | ❌ | ✅ | ℹ️ Extra in domain (fine rotation support) | +| `InterpolationQuality` | ❌ | ✅ | ℹ️ Extra in domain (quality control) | +| `DocumentKind` | ✅ | ✅ | ✅ Identisch (in content.rs) | + +### Structs + +| Struct | app/ | domain/ | Status | +|--------|------|---------|--------| +| `TransformState` | ✅ `rotation: Rotation` | ✅ `rotation: RotationMode` | ⚠️ Domain erweitert (RotationMode statt Rotation) | +| `RenderOutput` | ✅ | ✅ | ✅ Identisch | +| `DocumentInfo` | ✅ | ✅ | ✅ Identisch | + +### Traits + +#### Renderable + +| Methode | app/ | domain/ | Status | +|---------|------|---------|--------| +| `render()` | ✅ | ✅ | ✅ Identisch | +| `info()` | ✅ | ✅ | ✅ Identisch | + +#### Transformable + +| Methode | app/ | domain/ | Status | +|---------|------|---------|--------| +| `rotate()` | ✅ | ✅ | ✅ Identisch | +| `flip()` | ✅ | ✅ | ✅ Identisch | +| `transform_state()` | ✅ | ✅ | ✅ Identisch | +| `rotate_fine()` | ❌ | ✅ | ℹ️ Extra in domain (default impl) | +| `reset_fine_rotation()` | ❌ | ✅ | ℹ️ Extra in domain (default impl) | +| `set_interpolation_quality()` | ❌ | ✅ | ℹ️ Extra in domain (default impl) | + +#### MultiPage + +| Methode | app/ | domain/ | Status | +|---------|------|---------|--------| +| `page_count()` | ✅ | ✅ | ✅ Identisch | +| `current_page()` | ✅ | ✅ | ✅ Identisch | +| `go_to_page()` | ✅ | ✅ | ✅ Identisch | + +#### MultiPageThumbnails + +| Methode | app/ | domain/ | Status | +|---------|------|---------|--------| +| `get_thumbnail()` | ✅ `Option` | ✅ `Result>` | ⚠️ Domain hat error handling | +| `thumbnails_ready()` | ✅ | ✅ | ✅ Identisch | +| `thumbnails_loaded()` | ✅ | ✅ | ✅ Identisch | +| `generate_thumbnail_page()` | ✅ `Option` | ✅ `Result<()>` | ⚠️ Domain hat error handling | +| `generate_all_thumbnails()` | ✅ | ✅ | ℹ️ Beide vorhanden | + +### Unterschiede + +#### 1. RotationMode (Domain-Erweiterung) + +**App:** +```rust +pub struct TransformState { + pub rotation: Rotation, // Nur 90° Schritte +} +``` + +**Domain:** +```rust +pub enum RotationMode { + Standard(Rotation), // 90° Schritte + Fine(f32), // Beliebige Winkel +} + +pub struct TransformState { + pub rotation: RotationMode, // Flexibel! +} +``` + +**Vorteil:** Domain unterstützt fine rotation (RasterDocument nutzt das) + +#### 2. Transformable Erweiterungen + +**Domain hat zusätzlich:** +- `rotate_fine()` - Für beliebige Rotationswinkel +- `reset_fine_rotation()` - Reset zu 90° Schritten +- `set_interpolation_quality()` - Qualitätskontrolle + +**Default Implementierungen:** Alle haben Default-Impls (no-op), daher backward-compatible. + +#### 3. Error Handling in Thumbnails + +**App:** +```rust +fn get_thumbnail(&self, page: usize) -> Option; +``` + +**Domain:** +```rust +fn get_thumbnail(&mut self, page: usize) -> DocResult>; +``` + +**Vorteil:** Domain kann Fehler melden statt silent failure. + +## Kompatibilität + +### ⚠️ Potenzielle Breaking Changes + +1. **TransformState::rotation** ist jetzt `RotationMode` statt `Rotation` + - Alt: `state.rotation == Rotation::Cw90` + - Neu: `state.rotation == RotationMode::Standard(Rotation::Cw90)` + +2. **MultiPageThumbnails Signatur** unterscheidet sich + - Kann zu Kompilierungsfehlern führen wenn app/ Code darauf zugreift + +### ✅ Lösungen + +**Option 1:** `RotationMode` bietet `From` an: +```rust +impl From for RotationMode { + fn from(rot: Rotation) -> Self { + RotationMode::Standard(rot) + } +} +``` + +**Option 2:** Helper-Methode in TransformState: +```rust +impl TransformState { + pub fn standard_rotation(&self) -> Option { + match self.rotation { + RotationMode::Standard(rot) => Some(rot), + _ => None, + } + } +} +``` + +## Entscheidung + +✅ **Domain-Version nutzen - ist besser!** + +**Begründung:** +- Alle app/ Features sind vorhanden +- Zusätzliche Features (fine rotation, interpolation) +- Besseres Error Handling +- Backward-compatible durch Default-Impls + +**Aktion:** +- Keine Änderungen nötig +- Domain ist bereits vollständig +- Bei Integration: Helper für RotationMode-Kompatibilität hinzufügen falls nötig + +## Nächster Schritt + +Phase 2: Infrastructure Layer Migration