use serde::{Deserialize, Serialize};
/// How torrent files are allocated on disk.
///
/// Matches libtorrent's `storage_mode_t`.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
pub enum StorageMode {
/// Auto-select: mmap on 64-bit, pread/pwrite on 32-bit.
#[default]
Auto,
/// Sparse file allocation (set_len, no pre-allocation).
Sparse,
/// Full pre-allocation (fallocate / write zeros).
Full,
/// Memory-mapped file I/O (64-bit recommended).
Mmap,
/// io_uring kernel-bypass I/O (Linux 5.6+).
/// Falls back to standard I/O when io_uring is unavailable.
IoUring,
/// IOCP kernel async I/O (Windows).
/// Falls back to standard I/O when IOCP is unavailable.
Iocp,
}