//! Both tariffs and CDRs can be linted - a term borrowed from software development where
//! linting is the act of flagging common errors, bugs, dangerous constructs and
//! stylistic flaws in a some code or data.
//!
//! The term originates from the English word `lint`, the tiny pieces of fiber and fluff that are
//! shed by clothing and trapped in a washing machines filter.
//!
//! Use [`tariff::lint`](crate::tariff::lint) to lint a tariff.
//!
//! # What linting is, and is not
//!
//! Checking a document against the OCPI schema is not linting. A missing required field, a
//! value of the wrong JSON kind, an array that must not be empty, a string longer than the
//! spec allows - the schema walk finds all of those while building the intermediate
//! representation, and reports them as [`schema::Warning`](crate::schema::Warning)s.
//!
//! Linting starts where that ends. It reads the same intermediate representation and looks
//! for the things a schema cannot express: a restriction that can never match, a price
//! bound that is the wrong way round, a `day_of_week` list covering the entire week. Those
//! documents are all schema-valid; they are just unlikely to mean what their author
//! intended.
//!
//! The two sets stay separate. A caller holding a
//! [`tariff::Versioned`](crate::tariff::Versioned) was handed the schema warnings when it
//! built one, so a [`tariff::Report`] repeating them would be a round trip that adds
//! nothing.
/// Lint the given tariff and return a report of any `Warning`s found.
pub