#![deny(let_underscore_drop)]
#![deny(macro_use_extern_crate)]
#![deny(meta_variable_misuse)]
#![deny(missing_copy_implementations)]
#![deny(missing_docs)]
#![deny(missing_unsafe_on_extern)]
#![deny(non_ascii_idents)]
#![deny(nonstandard_style)]
#![deny(path_statements)]
#![deny(redundant_imports)]
#![deny(redundant_lifetimes)]
#![deny(rustdoc::broken_intra_doc_links)]
#![deny(single_use_lifetimes)]
#![deny(tail_expr_drop_order)]
#![deny(trivial_casts)]
#![deny(trivial_numeric_casts)]
#![deny(unit_bindings)]
#![deny(unnameable_types)]
#![deny(unreachable_code)]
#![deny(unreachable_pub)]
#![deny(unsafe_attr_outside_unsafe)]
#![deny(unsafe_code)]
#![deny(unsafe_op_in_unsafe_fn)]
#![deny(unstable_features)]
#![deny(unused_assignments)]
#![deny(unused_crate_dependencies)]
#![deny(unused_extern_crates)]
#![deny(unused_import_braces)]
#![deny(unused_imports)]
#![deny(unused_lifetimes)]
#![deny(unused_macro_rules)]
#![deny(unused_must_use)]
#![deny(unused_mut)]
#![deny(unused_qualifications)]
#![deny(unused_results)]
#![deny(unused_variables)]
#![deny(unused)]
#![deny(variant_size_differences)]
#![deny(warnings)]
#![deny(clippy::all)]
#![deny(clippy::cargo)]
#![deny(clippy::complexity)]
#![deny(clippy::correctness)]
#![deny(clippy::nursery)]
#![deny(clippy::pedantic)]
#![deny(clippy::perf)]
#![deny(clippy::restriction)]
#![deny(clippy::style)]
#![deny(clippy::suspicious)]
#![allow(
clippy::arbitrary_source_item_ordering,
reason = "Alphabetical ordering is not always the most readable."
)]
#![allow(clippy::arithmetic_side_effects, reason = "Too restrictive for this crate.")]
#![allow(clippy::blanket_clippy_restriction_lints, reason = "Prefer more lints.")]
#![allow(clippy::default_numeric_fallback, reason = "Numeric type fallback should not be required.")]
#![allow(clippy::else_if_without_else, reason = "Eliding final else is idiomatic in Rust.")]
#![allow(clippy::float_arithmetic, reason = "Too restrictive for this crate.")]
#![allow(clippy::implicit_return, reason = "Implicit returns are idiomatic in Rust.")]
#![allow(clippy::indexing_slicing, reason = "Too restrictive for this crate.")]
#![allow(clippy::integer_division_remainder_used, reason = "Too restrictive for this crate.")]
#![allow(clippy::integer_division, reason = "Too restrictive for this crate.")]
#![allow(
clippy::min_ident_chars,
reason = "Whilst short variable names are not always ideal they are often clear in context."
)]
#![allow(
clippy::missing_trait_methods,
reason = "Traits should be able to provide default method implementations."
)]
#![allow(clippy::mod_module_files, reason = "Prefer to use mod.rs files for consistency.")]
#![allow(clippy::new_without_default, reason = "Some types do not require a default constructor.")]
#![allow(clippy::pub_use, reason = "It is intended to expose some types at the crate level.")]
#![allow(
clippy::pub_with_shorthand,
reason = "Rustfmt automatically shortens pub(in crate) to pub(crate)."
)]
#![allow(clippy::question_mark_used, reason = "The question mark operator is idiomatic in Rust.")]
#![allow(
clippy::separated_literal_suffix,
reason = "Must chose between separated and unseparated literal suffixes."
)]
#![allow(clippy::single_call_fn, reason = "Single call functions may make code more maintainable.")]
#![allow(
clippy::single_char_lifetime_names,
reason = "Single characters lifetime names are idiomatic in Rust."
)]
#![allow(clippy::std_instead_of_alloc, reason = "Prefer std for consistency.")]
#![allow(clippy::std_instead_of_core, reason = "Prefer std for consistency.")]
#![allow(
clippy::unreadable_literal,
reason = "Prefer no underscores in numeric literals for consistency."
)]
#![allow(clippy::unwrap_in_result, reason = "In some cases unwrap can be guaranteed to succeed.")]
#![allow(clippy::unwrap_used, reason = "In some cases unwrap can be guaranteed to succeed.")]
mod attractor;
mod generator;
mod render;
mod settings;
pub use attractor::{Attractor, Chirikov, Clifford, DeJong, Duffing, Gingerbreadman, Henon, Ikeda, Tinkerbell};
pub use generator::Generator;
pub use render::render;
pub use settings::Settings;