import Foundation /// Der Zustand der Wiedergabe, unabhängig vom Engine. public enum PlaybackState: Sendable, Equatable { case idle /// Quelle wird geöffnet, es ist noch nichts zu sehen. case loading case playing case paused /// Läuft eigentlich, wartet aber auf Daten. case buffering case ended case failed(PlaybackFailure) public var isActive: Bool { switch self { case .playing, .buffering: true case .idle, .loading, .paused, .ended, .failed: false } } } /// Ein Fehler bei der Wiedergabe, in der Sprache der App statt in der des /// jeweiligen Engine. public struct PlaybackFailure: Sendable, Equatable, Error { public enum Kind: Sendable, Equatable { /// Die Quelle war nicht erreichbar. case sourceUnavailable /// Der Engine kann das Format nicht — sollte nach einer korrekten /// Entscheidung nicht vorkommen und ist deshalb ein Hinweis darauf, /// dass die Fähigkeitenliste nachgezogen werden muss. case formatUnsupported case networkInterrupted case unknown } public let kind: Kind /// Der ursprüngliche Fehlertext. Wandert nicht in die Oberfläche, aber in /// die Protokolle — sonst ist „geht nicht" alles, was man hat. public let underlyingDescription: String? public init(kind: Kind, underlyingDescription: String? = nil) { self.kind = kind self.underlyingDescription = underlyingDescription } }