////////////////////////////////////////////////////////////////////////////////
// This Source Code Form is subject to the terms of the Mozilla Public /
// License, v. 2.0. If a copy of the MPL was not distributed with this /
// file, You can obtain one at https://mozilla.org/MPL/2.0/. /
// /
////////////////////////////////////////////////////////////////////////////////
//! Possible compression formats to utilize
//!
//!
use crate;
use crate Mode as ControlMode;
use crate;
/// Trait that represents a pair of Header Modes and Control Modes that define a compression format.
///
/// This trait is referenced entirely via associated functions at compile time and gets entirely
/// monomorphized out. It solely exists to reference associated functions on the two control types.
/// It should not be implemented on structs that are intended to be constructed, and it's
/// recommended to add a `()` typed private field to prevent them from being constructed.
/// Reference implementation as originally made in the 90s.
/// - Shortened header compared to later implementations, only encodes decompressed size ([Reference](crate::header::mode::Reference))
/// - Standard control codes ([Reference](crate::data::control::mode::Reference))
/// Format utilized by The Sims games from Sims 1 to 2
/// - Uses standard [Maxis](crate::header::mode::Maxis) header
/// - Standard control codes ([Reference](crate::data::control::mode::Reference))
/// Format utilized by Simcity 4.
/// - Uses standard [Maxis](crate::header::mode::Maxis) header
/// - Nonstandard long control code. See [Simcity4](crate::data::control::mode::Simcity4)