//! FFXIV Excel game-data system: sheet discovery, header parsing, row data, and ergonomic access.
//!
//! Excel is the tabular data store embedded in every FFXIV install. The
//! three-layer on-disk format maps cleanly to three types here:
//!
//! - [`ExcelList`] — `exd/root.exl`: the master sheet registry (name → numeric ID).
//! - [`ExcelHeader`] — `exd/<Sheet>.exh`: per-sheet schema (column types, page
//!   ranges, supported languages).
//! - [`ExcelData`] — `exd/<Sheet>_<page>[_<lang>].exd`: the actual row data for
//!   one page/language combination.
//!
//! The [`Sheet`] type ties these three together and provides the ergonomic
//! entry point for consumers: open a sheet by name, iterate rows, or look up a
//! specific row ID. [`OwnedRow`] carries the decoded payload independently of
//! the originating [`ExcelData`], allowing rows to outlive the page they were
//! loaded from.

mod exd;
mod exh;
mod exl;
mod sheet;

pub(crate) use exd::language_path_suffix;
pub use exd::{ExcelData, Field, Row};
pub use exh::{ColumnDataType, ColumnDefinition, ExcelHeader, Language, PageDefinition, SheetKind};
pub use exl::ExcelList;
pub use sheet::{OwnedRow, OwnedRowFields, Sheet, SheetIter, SheetNameIter, SheetRows};
