//! The byte source the viewer reads from.
//!
//! A file is memory-mapped (zero-copy, the kernel pages bytes in on demand — so
//! a multi-GB file opens in near-constant memory). A pipe has no seekable fd to
//! map, so piped stdin is read fully into a buffer instead. Everything
//! downstream — scanner, flatten, search — works on `&[u8]` and never sees
//! which variant it got. `Source` is `Send + Sync` (both `Mmap` and `Vec<u8>`
//! are), so it can live in the `Arc` the search worker thread shares.
use Mmap;
use Deref;