DownloadResult
Represents the state of a file download from initial bytes to completion.
Errors are propagated as exceptions on the Flow, not as sealed states, so collectors can use try/catch or catch { } operators (see kotlinx.coroutines.flow.catch).