//!
//! The Archive contains a list of items. Each item starts with a `Header`, followed by the
//! item data.
+//!
+//! An archive contains items in the following order:
+//! * `ENTRY` -- containing general stat() data and related bits
+//! * `XATTR` -- one extended attribute
+//! * ... -- more of these when there are multiple defined
+//! * `ACL_USER` -- one `USER ACL` entry
+//! * ... -- more of these when there are multiple defined
+//! * `ACL_GROUP` -- one `GROUP ACL` entry
+//! * ... -- more of these when there are multiple defined
+//! * `ACL_GROUP_OBJ` -- The `ACL_GROUP_OBJ`
+//! * `ACL_DEFAULT` -- The various default ACL fields if there's one defined
+//! * `ACL_DEFAULT_USER` -- one USER ACL entry
+//! * ... -- more of these when multiple are defined
+//! * `ACL_DEFAULT_GROUP` -- one GROUP ACL entry
+//! * ... -- more of these when multiple are defined
+//! * `FCAPS` -- file capability in Linux disk format
+//! * `QUOTA_PROJECT_ID` -- the ext4/xfs quota project ID
+//! * `PAYLOAD` -- file contents, if it is one
+//! * `SYMLINK` -- symlink target, if it is one
+//! * `DEVICE` -- device major/minor, if it is a block/char device
+//!
+//! If we are serializing a directory, then this is followed by:
+//!
+//! * `FILENAME` -- name of the first directory entry (strictly ordered!)
+//! * `<archive>` -- serialization of the first directory entry's metadata and contents,
+//! following the exact same archive format
+//! * `FILENAME` -- name of the second directory entry (strictly ordered!)
+//! * `<archive>` -- serialization of the second directory entry
+//! * ...
+//! * `GOODBYE` -- lookup table at the end of a list of directory entries
use std::cmp::Ordering;
use std::ffi::{CStr, OsStr};