//! Pixl is a lightweight, powerful Rust game engine and rasterizer built from
//! scratch with nothing but a window and a framebuffer :)
//! GitHub: <https://github.com/dylanopen/pixl>
//! Crates.io: <https://crates.io/crates/pixl>
//! Documentation: <https://docs.rs/pixl>

// imports in doctests are really annoying, and some tests hang.
#![cfg(not(doctest))]

#![forbid(
    missing_docs,
    clippy::doc_markdown,
    clippy::missing_docs_in_private_items,
    clippy::missing_panics_doc,
    clippy::empty_docs,
    rustdoc::all,
    rustdoc::missing_doc_code_examples,
)]

// These are lints which are denied by default by clippy, but are shown here to
// be explicit.
#![deny(
    clippy::absurd_extreme_comparisons,
    clippy::almost_swapped,
    clippy::approx_constant,
    clippy::async_yields_async,
    clippy::bad_bit_mask,
    clippy::cast_slice_different_sizes,
    clippy::char_indices_as_byte_indices,
    clippy::deprecated_semver,
    clippy::derive_ord_xor_partial_ord,
    clippy::derived_hash_with_manual_eq,
    clippy::eager_transmute,
    clippy::enum_clike_unportable_variant,
    clippy::eq_op,
    clippy::erasing_op,
    clippy::if_let_mutex,
    clippy::ifs_same_cond,
    clippy::impl_hash_borrow_with_str_and_bytes,
    clippy::impossible_comparisons,
    clippy::ineffective_bit_mask,
    clippy::infinite_iter,
    clippy::inherent_to_string_shadow_display,
    clippy::inline_fn_without_body,
    clippy::invalid_regex,
    clippy::inverted_saturating_sub,
    clippy::invisible_characters,
    clippy::iter_next_loop,
    clippy::iter_skip_zero,
    clippy::iterator_step_by_zero,
    clippy::let_underscore_lock,
    clippy::lint_groups_priority,
    clippy::match_str_case_mismatch,
    clippy::mem_replace_with_uninit,
    clippy::min_max,
    clippy::mistyped_literal_suffixes,
    clippy::modulo_one,
    clippy::mut_from_ref,
    clippy::never_loop,
    clippy::non_octal_unix_permissions,
    clippy::nonsensical_open_options,
    clippy::not_unsafe_ptr_arg_deref,
    clippy::option_env_unwrap,
    clippy::out_of_bounds_indexing,
    clippy::overly_complex_bool_expr,
    clippy::panicking_overflow_checks,
    clippy::panicking_unwrap,
    clippy::possible_missing_comma,
    clippy::read_line_without_trim,
    clippy::recursive_format_impl,
    clippy::redundant_comparisons,
    clippy::reversed_empty_ranges,
    clippy::self_assignment,
    clippy::serde_api_misuse,
    clippy::size_of_in_element_count,
    clippy::suspicious_splitn,
    clippy::transmute_null_to_fn,
    clippy::transmuting_null,
    clippy::uninit_assumed_init,
    clippy::uninit_vec,
    clippy::unit_cmp,
    clippy::unit_hash,
    clippy::unit_return_expecting_ord,
    clippy::unsound_collection_transmute,
    clippy::unused_io_amount,
    clippy::useless_attribute,
    clippy::vec_resize_to_zero,
    clippy::while_immutable_condition,
    clippy::wrong_transmute,
    clippy::zst_offset,
    )]

// lints which are warned by default by clippy, but are shown here to be
// explicit.
#![warn(
    clippy::almost_complete_range,
    clippy::arc_with_non_send_sync,
    clippy::assertions_on_constants,
    clippy::assign_op_pattern,
    clippy::await_holding_invalid_type,
    clippy::await_holding_lock,
    clippy::await_holding_refcell_ref,
    clippy::bind_instead_of_map,
    clippy::blanket_clippy_restriction_lints,
    clippy::blocks_in_conditions,
    clippy::bool_assert_comparison,
    clippy::bool_comparison,
    clippy::borrow_deref_ref,
    clippy::borrow_interior_mutable_const,
    clippy::borrowed_box,
    clippy::box_collection,
    clippy::box_default,
    clippy::boxed_local,
    clippy::builtin_type_shadow,
    clippy::byte_char_slices,
    clippy::bytes_count_to_len,
    clippy::bytes_nth,
    clippy::cast_abs_to_unsigned,
    clippy::cast_enum_constructor,
    clippy::cast_enum_truncation,
    clippy::cast_nan_to_int,
    clippy::cast_slice_from_raw_parts,
    clippy::char_lit_as_u8,
    clippy::chars_last_cmp,
    clippy::chars_next_cmp,
    clippy::clone_on_copy,
    clippy::cloned_ref_to_slice_refs,
    clippy::cmp_null,
    clippy::cmp_owned,
    clippy::collapsible_else_if,
    clippy::collapsible_if,
    clippy::collapsible_match,
    clippy::collapsible_str_replace,
    clippy::comparison_to_empty,
    clippy::confusing_method_to_numeric_cast,
    clippy::const_is_empty,
    clippy::crate_in_macro_def,
    clippy::crosspointer_transmute,
    clippy::declare_interior_mutable_const,
    clippy::default_constructed_unit_structs,
    clippy::default_instead_of_iter_empty,
    clippy::deprecated_cfg_attr,
    clippy::deprecated_clippy_cfg_attr,
    clippy::deref_addrof,
    clippy::derivable_impls,
    clippy::disallowed_macros,
    clippy::disallowed_methods,
    clippy::disallowed_names,
    clippy::disallowed_types,
    clippy::diverging_sub_expression,
    clippy::doc_lazy_continuation,
    clippy::doc_nested_refdefs,
    clippy::doc_overindented_list_items,
    clippy::doc_suspicious_footnotes,
    clippy::double_comparisons,
    clippy::double_ended_iterator_last,
    clippy::double_must_use,
    clippy::double_parens,
    clippy::drain_collect,
    clippy::drop_non_drop,
    clippy::duplicate_mod,
    clippy::duplicate_underscore_argument,
    clippy::duplicated_attributes,
    clippy::duration_subsec,
    clippy::empty_line_after_doc_comments,
    clippy::empty_line_after_outer_attr,
    clippy::empty_loop,
    clippy::enum_variant_names,
    clippy::err_expect,
    clippy::excessive_nesting,
    clippy::excessive_precision,
    clippy::expect_fun_call,
    clippy::explicit_auto_deref,
    clippy::explicit_counter_loop,
    clippy::explicit_write,
    clippy::extend_with_drain,
    clippy::extra_unused_lifetimes,
    clippy::extra_unused_type_parameters,
    clippy::field_reassign_with_default,
    clippy::filter_map_bool_then,
    clippy::filter_map_identity,
    clippy::filter_next,
    clippy::flat_map_identity,
    clippy::float_equality_without_abs,
    clippy::fn_to_numeric_cast,
    clippy::fn_to_numeric_cast_with_truncation,
    clippy::for_kv_map,
    clippy::forget_non_drop,
    clippy::format_in_format_args,
    clippy::four_forward_slashes,
    clippy::from_over_into,
    clippy::from_raw_with_void_ptr,
    clippy::from_str_radix_10,
    clippy::get_first,
    clippy::get_last_with_len,
    clippy::identity_op,
    clippy::if_same_then_else,
    clippy::implicit_saturating_add,
    clippy::implicit_saturating_sub,
    clippy::implied_bounds_in_impls,
    clippy::incompatible_msrv,
    clippy::inconsistent_digit_grouping,
    clippy::ineffective_open_options,
    clippy::infallible_destructuring_match,
    clippy::infallible_try_from,
    clippy::inherent_to_string,
    clippy::init_numbered_fields,
    clippy::inspect_for_each,
    clippy::int_plus_one,
    clippy::into_iter_on_ref,
    clippy::io_other_error,
    clippy::is_digit_ascii_radix,
    clippy::items_after_test_module,
    clippy::iter_cloned_collect,
    clippy::iter_count,
    clippy::iter_kv_map,
    clippy::iter_next_slice,
    clippy::iter_nth,
    clippy::iter_nth_zero,
    clippy::iter_out_of_bounds,
    clippy::iter_overeager_cloned,
    clippy::iter_skip_next,
    clippy::join_absolute_paths,
    clippy::just_underscores_and_digits,
    clippy::large_const_arrays,
    clippy::large_enum_variant,
    clippy::legacy_numeric_constants,
    clippy::len_without_is_empty,
    clippy::len_zero,
    clippy::let_and_return,
    clippy::let_underscore_future,
    clippy::let_unit_value,
    clippy::let_with_type_underscore,
    clippy::lines_filter_map_ok,
    clippy::macro_metavars_in_unsafe,
    clippy::main_recursion,
    clippy::manual_abs_diff,
    clippy::manual_async_fn,
    clippy::manual_bits,
    clippy::manual_c_str_literals,
    clippy::manual_clamp,
    clippy::manual_contains,
    clippy::manual_dangling_ptr,
    clippy::manual_div_ceil,
    clippy::manual_filter,
    clippy::manual_filter_map,
    clippy::manual_find,
    clippy::manual_find_map,
    clippy::manual_flatten,
    clippy::manual_hash_one,
    clippy::manual_ignore_case_cmp,
    clippy::manual_inspect,
    clippy::manual_is_ascii_check,
    clippy::manual_is_finite,
    clippy::manual_is_infinite,
    clippy::manual_is_multiple_of,
    clippy::manual_main_separator_str,
    clippy::manual_map,
    clippy::manual_memcpy,
    clippy::manual_next_back,
    clippy::manual_non_exhaustive,
    clippy::manual_ok_err,
    clippy::manual_ok_or,
    clippy::manual_option_as_slice,
    clippy::manual_pattern_char_comparison,
    clippy::manual_range_contains,
    clippy::manual_range_patterns,
    clippy::manual_rem_euclid,
    clippy::manual_repeat_n,
    clippy::manual_retain,
    clippy::manual_rotate,
    clippy::manual_saturating_arithmetic,
    clippy::manual_slice_fill,
    clippy::manual_slice_size_calculation,
    clippy::manual_split_once,
    clippy::manual_str_repeat,
    clippy::manual_strip,
    clippy::manual_swap,
    clippy::manual_try_fold,
    clippy::manual_unwrap_or,
    clippy::manual_unwrap_or_default,
    clippy::manual_while_let_some,
    clippy::map_all_any_identity,
    clippy::map_clone,
    clippy::map_collect_result_unit,
    clippy::map_entry,
    clippy::map_flatten,
    clippy::map_identity,
    clippy::match_as_ref,
    clippy::match_like_matches_macro,
    clippy::match_overlapping_arm,
    clippy::match_ref_pats,
    clippy::match_result_ok,
    clippy::match_single_binding,
    clippy::mem_replace_option_with_none,
    clippy::mem_replace_option_with_some,
    clippy::mem_replace_with_default,
    clippy::misnamed_getters,
    clippy::misrefactored_assign_op,
    clippy::missing_const_for_thread_local,
    clippy::missing_enforced_import_renames,
    clippy::missing_safety_doc,
    clippy::missing_spin_loop,
    clippy::missing_transmute_annotations,
    clippy::mixed_attributes_style,
    clippy::mixed_case_hex_literals,
    clippy::module_inception,
    clippy::multi_assignments,
    clippy::multiple_bound_locations,
    clippy::must_use_unit,
    clippy::mut_mutex_lock,
    clippy::mut_range_bound,
    clippy::mutable_key_type,
    clippy::needless_arbitrary_self_type,
    clippy::needless_as_bytes,
    clippy::needless_bool,
    clippy::needless_bool_assign,
    clippy::needless_borrow,
    clippy::needless_borrowed_reference,
    clippy::needless_borrows_for_generic_args,
    clippy::needless_character_iteration,
    clippy::needless_doctest_main,
    clippy::needless_else,
    clippy::needless_late_init,
    clippy::needless_lifetimes,
    clippy::needless_match,
    clippy::needless_maybe_sized,
    clippy::needless_option_as_deref,
    clippy::needless_option_take,
    clippy::needless_parens_on_range_literals,
    clippy::needless_pub_self,
    clippy::needless_question_mark,
    clippy::needless_range_loop,
    clippy::needless_return,
    clippy::needless_return_with_question_mark,
    clippy::needless_splitn,
    clippy::needless_update,
    clippy::neg_cmp_op_on_partial_ord,
    clippy::neg_multiply,
    clippy::new_ret_no_self,
    clippy::new_without_default,
    clippy::no_effect,
    clippy::no_effect_replace,
    clippy::non_canonical_clone_impl,
    clippy::non_canonical_partial_ord_impl,
    clippy::non_minimal_cfg,
    clippy::nonminimal_bool,
    clippy::obfuscated_if_else,
    clippy::octal_escapes,
    clippy::ok_expect,
    clippy::only_used_in_recursion,
    clippy::op_ref,
    clippy::option_as_ref_deref,
    clippy::option_filter_map,
    clippy::option_map_or_none,
    clippy::option_map_unit_fn,
    clippy::or_then_unwrap,
    clippy::owned_cow,
    clippy::partialeq_ne_impl,
    clippy::partialeq_to_none,
    clippy::path_ends_with_ext,
    clippy::permissions_set_readonly_false,
    clippy::pointers_in_nomem_asm_block,
    //clippy::possible_missing_else,
    clippy::precedence,
    clippy::print_in_format_impl,
    clippy::print_literal,
    clippy::print_with_newline,
    clippy::println_empty_string,
    clippy::ptr_arg,
    clippy::ptr_eq,
    clippy::ptr_offset_with_cast,
    clippy::question_mark,
    clippy::range_zip_with_len,
    clippy::rc_clone_in_vec_init,
    clippy::readonly_write_lock,
    clippy::redundant_allocation,
    clippy::redundant_as_str,
    clippy::redundant_async_block,
    clippy::redundant_at_rest_pattern,
    clippy::redundant_closure,
    clippy::redundant_closure_call,
    clippy::redundant_field_names,
    clippy::redundant_guards,
    clippy::redundant_locals,
    clippy::redundant_pattern,
    clippy::redundant_pattern_matching,
    clippy::redundant_slicing,
    clippy::redundant_static_lifetimes,
    clippy::regex_creation_in_loops,
    clippy::repeat_once,
    clippy::repeat_vec_with_capacity,
    clippy::repr_packed_without_abi,
    clippy::reserve_after_initialization,
    clippy::result_filter_map,
    clippy::result_large_err,
    clippy::result_map_or_into_option,
    clippy::result_map_unit_fn,
    clippy::result_unit_err,
    clippy::same_item_push,
    clippy::search_is_some,
    clippy::seek_from_current,
    clippy::seek_to_start_instead_of_rewind,
    clippy::self_named_constructors,
    clippy::short_circuit_statement,
    clippy::should_implement_trait,
    clippy::single_char_add_str,
    clippy::single_component_path_imports,
    clippy::single_element_loop,
    clippy::single_match,
    clippy::single_range_in_vec_init,
    clippy::size_of_ref,
    clippy::skip_while_next,
    clippy::sliced_string_as_bytes,
    clippy::slow_vector_initialization,
    clippy::string_extend_chars,
    clippy::string_from_utf8_as_bytes,
    clippy::strlen_on_c_strings,
    clippy::suspicious_arithmetic_impl,
    clippy::suspicious_assignment_formatting,
    clippy::suspicious_command_arg_space,
    clippy::suspicious_doc_comments,
    clippy::suspicious_else_formatting,
    clippy::suspicious_map,
    clippy::suspicious_op_assign_impl,
    clippy::suspicious_open_options,
    clippy::suspicious_to_owned,
    clippy::suspicious_unary_op_formatting,
    clippy::swap_ptr_to_ref,
    clippy::swap_with_temporary,
    clippy::tabs_in_doc_comments,
    clippy::temporary_assignment,
    clippy::test_attr_in_doctest,
    clippy::to_digit_is_some,
    clippy::to_string_in_format_args,
    clippy::to_string_trait_impl,
    clippy::too_many_arguments,
    clippy::toplevel_ref_arg,
    clippy::transmute_bytes_to_str,
    clippy::transmute_int_to_bool,
    clippy::transmute_int_to_non_zero,
    clippy::transmute_ptr_to_ref,
    clippy::transmutes_expressible_as_ptr_casts,
    clippy::trim_split_whitespace,
    clippy::type_complexity,
    clippy::type_id_on_box,
    clippy::unbuffered_bytes,
    clippy::unconditional_recursion,
    clippy::unit_arg,
    clippy::unnecessary_cast,
    clippy::unnecessary_clippy_cfg,
    clippy::unnecessary_fallible_conversions,
    clippy::unnecessary_filter_map,
    clippy::unnecessary_find_map,
    clippy::unnecessary_first_then_check,
    clippy::unnecessary_fold,
    clippy::unnecessary_get_then_check,
    clippy::unnecessary_lazy_evaluations,
    clippy::unnecessary_literal_unwrap,
    clippy::unnecessary_map_on_constructor,
    clippy::unnecessary_map_or,
    clippy::unnecessary_min_or_max,
    clippy::unnecessary_mut_passed,
    clippy::unnecessary_operation,
    clippy::unnecessary_owned_empty_strings,
    clippy::unnecessary_result_map_or_else,
    clippy::unnecessary_sort_by,
    clippy::unnecessary_to_owned,
    clippy::unnecessary_unwrap,
    clippy::unneeded_struct_pattern,
    clippy::unneeded_wildcard_pattern,
    clippy::unsafe_removed_from_name,
    clippy::unused_enumerate_index,
    clippy::unused_format_specs,
    clippy::unused_unit,
    clippy::unusual_byte_groupings,
    clippy::unwrap_or_default,
    clippy::upper_case_acronyms,
    clippy::useless_asref,
    clippy::useless_concat,
    clippy::useless_conversion,
    clippy::useless_format,
    clippy::useless_nonzero_new_unchecked,
    clippy::useless_transmute,
    clippy::useless_vec,
    clippy::vec_box,
    clippy::vec_init_then_push,
    clippy::waker_clone_wake,
    clippy::while_let_loop,
    clippy::while_let_on_iterator,
    clippy::wildcard_in_or_patterns,
    clippy::write_literal,
    clippy::write_with_newline,
    clippy::writeln_empty_string,
    clippy::wrong_self_convention,
    clippy::zero_divided_by_zero,
    clippy::zero_prefixed_literal,
    clippy::zero_ptr,
    clippy::zero_repeat_side_effects,
    clippy::zombie_processes,
    )]

    // These are additional warnings which, by default, are allowed by clippy.
#![warn(
    clippy::absolute_paths,
    clippy::alloc_instead_of_core,
    clippy::allow_attributes,
    clippy::allow_attributes_without_reason,
    clippy::arithmetic_side_effects,
    clippy::as_conversions,
    clippy::as_pointer_underscore,
    clippy::as_ptr_cast_mut,
    clippy::as_underscore,
    clippy::assertions_on_result_states,
    clippy::assigning_clones,
    clippy::big_endian_bytes,
    clippy::bool_to_int_with_if,
    clippy::borrow_as_ptr,
    clippy::branches_sharing_code,
    clippy::cargo_common_metadata,
    clippy::case_sensitive_file_extension_comparisons,
    clippy::cast_lossless,
    clippy::cast_possible_truncation,
    clippy::cast_possible_wrap,
    clippy::cast_precision_loss,
    clippy::cast_ptr_alignment,
    clippy::cast_sign_loss,
    clippy::cfg_not_test,
    clippy::checked_conversions,
    clippy::clear_with_drain,
    clippy::clone_on_ref_ptr,
    clippy::cloned_instead_of_copied,
    clippy::coerce_container_to_any,
    clippy::cognitive_complexity,
    clippy::collection_is_never_read,
    clippy::comparison_chain,
    clippy::copy_iterator,
    clippy::create_dir,
    clippy::dbg_macro,
    clippy::debug_assert_with_mut_call,
    clippy::decimal_literal_representation,
    clippy::default_numeric_fallback,
    clippy::default_trait_access,
    clippy::default_union_representation,
    clippy::deref_by_slicing,
    clippy::derive_partial_eq_without_eq,
    clippy::disallowed_script_idents,
    clippy::doc_broken_link,
    clippy::doc_comment_double_space_linebreaks,
    clippy::doc_include_without_cfg,
    clippy::doc_link_code,
    clippy::doc_link_with_quotes,
    clippy::elidable_lifetime_names,
    clippy::else_if_without_else,
    clippy::empty_drop,
    clippy::empty_enum_variants_with_brackets,
    clippy::empty_enum,
    clippy::empty_structs_with_brackets,
    clippy::enum_glob_use,
    clippy::equatable_if_let,
    clippy::error_impl_error,
    clippy::exhaustive_enums,
    clippy::exhaustive_structs,
    clippy::exit,
    clippy::expl_impl_clone_on_copy,
    clippy::explicit_deref_methods,
    clippy::explicit_into_iter_loop,
    clippy::explicit_iter_loop,
    clippy::fallible_impl_from,
    clippy::field_scoped_visibility_modifiers,
    clippy::filetype_is_file,
    clippy::filter_map_next,
    clippy::flat_map_option,
    clippy::float_arithmetic,
    clippy::float_cmp,
    clippy::float_cmp_const,
    clippy::fn_params_excessive_bools,
    clippy::fn_to_numeric_cast_any,
    clippy::format_collect,
    clippy::format_push_string,
    clippy::from_iter_instead_of_collect,
    clippy::future_not_send,
    clippy::get_unwrap,
    clippy::host_endian_bytes,
    clippy::if_not_else,
    clippy::if_then_some_else_none,
    clippy::ignore_without_reason,
    clippy::ignored_unit_patterns,
    clippy::impl_trait_in_params,
    clippy::implicit_clone,
    clippy::implicit_hasher,
    clippy::imprecise_flops,
    clippy::inconsistent_struct_constructor,
    clippy::index_refutable_slice,
    clippy::indexing_slicing,
    clippy::inefficient_to_string,
    clippy::infinite_loop,
    clippy::inline_always,
    clippy::inline_asm_x86_att_syntax,
    clippy::integer_division,
    clippy::integer_division_remainder_used,
    clippy::into_iter_without_iter,
    clippy::invalid_upcast_comparisons,
    clippy::ip_constant,
    clippy::items_after_statements,
    clippy::iter_filter_is_ok,
    clippy::iter_filter_is_some,
    clippy::iter_not_returning_iterator,
    clippy::iter_on_empty_collections,
    clippy::iter_on_single_items,
    clippy::iter_over_hash_type,
    clippy::iter_with_drain,
    clippy::iter_without_into_iter,
    clippy::large_digit_groups,
    clippy::large_futures,
    clippy::large_include_file,
    clippy::large_stack_arrays,
    clippy::large_stack_frames,
    clippy::large_types_passed_by_value,
    clippy::let_underscore_must_use,
    clippy::let_underscore_untyped,
    clippy::linkedlist,
    clippy::literal_string_with_formatting_args,
    clippy::little_endian_bytes,
    clippy::lossy_float_literal,
    clippy::macro_use_imports,
    clippy::manual_assert,
    clippy::manual_instant_elapsed,
    clippy::manual_is_power_of_two,
    clippy::manual_is_variant_and,
    clippy::manual_let_else,
    clippy::manual_midpoint,
    clippy::manual_string_new,
    clippy::many_single_char_names,
    clippy::map_err_ignore,
    clippy::map_unwrap_or,
    clippy::map_with_unused_argument_over_ranges,
    clippy::match_bool,
    clippy::match_same_arms,
    clippy::match_wild_err_arm,
    clippy::match_wildcard_for_single_variants,
    clippy::maybe_infinite_iter,
    clippy::mem_forget,
    clippy::mismatching_type_param_order,
    clippy::missing_assert_message,
    clippy::missing_asserts_for_indexing,
    clippy::missing_const_for_fn,
    clippy::missing_errors_doc,
    clippy::missing_fields_in_debug,
    clippy::mixed_read_write_in_expression,
    clippy::mod_module_files,
    clippy::module_name_repetitions,
    clippy::modulo_arithmetic,
    clippy::multiple_inherent_impl,
    clippy::multiple_unsafe_ops_per_block,
    clippy::must_use_candidate,
    clippy::mut_mut,
    clippy::mutex_atomic,
    clippy::mutex_integer,
    clippy::naive_bytecount,
    clippy::needless_bitwise_bool,
    clippy::needless_collect,
    clippy::needless_continue,
    clippy::needless_for_each,
    clippy::needless_pass_by_ref_mut,
    clippy::needless_pass_by_value,
    clippy::needless_raw_string_hashes,
    clippy::needless_raw_strings,
    clippy::negative_feature_names,
    clippy::no_effect_underscore_binding,
    clippy::no_mangle_with_rust_abi,
    clippy::non_ascii_literal,
    clippy::non_send_fields_in_send_ty,
    clippy::non_std_lazy_statics,
    clippy::non_zero_suggestions,
    clippy::nonstandard_macro_braces,
    clippy::option_as_ref_cloned,
    clippy::option_if_let_else,
    clippy::option_option,
    clippy::or_fun_call,
    clippy::panic,
    clippy::panic_in_result_fn,
    clippy::partial_pub_fields,
    clippy::path_buf_push_overwrite,
    clippy::pathbuf_init_then_push,
    clippy::pattern_type_mismatch,
    clippy::pointer_format,
    clippy::precedence_bits,
    clippy::print_stderr,
    clippy::print_stdout,
    clippy::ptr_as_ptr,
    clippy::ptr_cast_constness,
    clippy::pub_underscore_fields,
    clippy::pub_with_shorthand,
    clippy::pub_without_shorthand,
    clippy::range_minus_one,
    clippy::range_plus_one,
    clippy::rc_buffer,
    clippy::rc_mutex,
    clippy::read_zero_byte_vec,
    clippy::redundant_clone,
    clippy::redundant_closure_for_method_calls,
    clippy::redundant_else,
    clippy::redundant_feature_names,
    clippy::redundant_pub_crate,
    clippy::redundant_test_prefix,
    clippy::redundant_type_annotations,
    clippy::ref_as_ptr,
    clippy::ref_binding_to_reference,
    clippy::ref_option,
    clippy::ref_option_ref,
    clippy::ref_patterns,
    clippy::renamed_function_params,
    clippy::rest_pat_in_fully_bound_structs,
    clippy::return_and_then,
    clippy::return_self_not_must_use,
    clippy::same_functions_in_if_condition,
    clippy::same_name_method,
    clippy::self_named_module_files,
    clippy::semicolon_if_nothing_returned,
    clippy::semicolon_inside_block,
    clippy::semicolon_outside_block,
    clippy::separated_literal_suffix,
    clippy::set_contains_or_insert,
    clippy::shadow_reuse,
    clippy::shadow_same,
    clippy::shadow_unrelated,
    clippy::should_panic_without_expect,
    clippy::significant_drop_in_scrutinee,
    clippy::significant_drop_tightening,
    clippy::similar_names,
    clippy::single_call_fn,
    clippy::single_char_lifetime_names,
    clippy::single_char_pattern,
    clippy::single_match_else,
    clippy::single_option_map,
    clippy::stable_sort_primitive,
    clippy::std_instead_of_alloc,
    clippy::std_instead_of_core,
    clippy::str_split_at_newline,
    clippy::str_to_string,
    clippy::string_add,
    clippy::string_add_assign,
    clippy::string_lit_as_bytes,
    clippy::string_lit_chars_any,
    clippy::string_slice,
    clippy::struct_excessive_bools,
    clippy::struct_field_names,
    clippy::suboptimal_flops,
    clippy::suspicious_operation_groupings,
    clippy::suspicious_xor_used_as_pow,
    clippy::tests_outside_test_module,
    clippy::todo,
    clippy::too_many_lines,
    clippy::trailing_empty_array,
    clippy::trait_duplication_in_bounds,
    clippy::transmute_ptr_to_ptr,
    clippy::transmute_undefined_repr,
    clippy::trivial_regex,
    clippy::trivially_copy_pass_by_ref,
    clippy::try_err,
    clippy::tuple_array_conversions,
    clippy::type_repetition_in_bounds,
    clippy::unchecked_duration_subtraction,
    clippy::undocumented_unsafe_blocks,
    clippy::unicode_not_nfc,
    clippy::unimplemented,
    clippy::uninhabited_references,
    clippy::uninlined_format_args,
    clippy::unnecessary_box_returns,
    clippy::unnecessary_debug_formatting,
    clippy::unnecessary_join,
    clippy::unnecessary_literal_bound,
    clippy::unnecessary_safety_comment,
    clippy::unnecessary_safety_doc,
    clippy::unnecessary_self_imports,
    clippy::unnecessary_semicolon,
    clippy::unnecessary_struct_initialization,
    clippy::unnecessary_wraps,
    clippy::unneeded_field_pattern,
    clippy::unnested_or_patterns,
    clippy::unreachable,
    clippy::unreadable_literal,
    clippy::unsafe_derive_deserialize,
    clippy::unseparated_literal_suffix,
    clippy::unused_async,
    clippy::unused_peekable,
    clippy::unused_result_ok,
    clippy::unused_rounding,
    clippy::unused_self,
    clippy::unused_trait_names,
    clippy::unwrap_in_result,
    clippy::unwrap_used,
    clippy::use_debug,
    clippy::used_underscore_binding,
    clippy::used_underscore_items,
    clippy::useless_let_if_seq,
    clippy::verbose_bit_mask,
    clippy::verbose_file_reads,
    clippy::while_float,
    clippy::wildcard_dependencies,
    clippy::wildcard_enum_match_arm,
    clippy::wildcard_imports,
    clippy::zero_sized_map_values,
)]

#![allow(
    clippy::min_ident_chars,
    clippy::use_self,
    clippy::arbitrary_source_item_ordering,
    clippy::too_long_first_doc_paragraph,
    clippy::inline_asm_x86_intel_syntax,
    clippy::question_mark_used,
    clippy::missing_inline_in_public_items,
    clippy::implicit_return,
    clippy::unseparated_literal_suffix,
    clippy::integer_division_remainder_used,
    clippy::integer_division,
    clippy::multiple_crate_versions,
    clippy::pub_use,
    clippy::missing_trait_methods,
    clippy::expect_used,
    reason = "these lints do not fit with the Pixl project"
)]


pub mod window;
pub mod texture;
pub mod color;
pub mod component;
pub mod pixel;
pub mod rectangle;
pub mod line;
pub mod circle;


pub use window::Window;
pub use texture::Texture;
pub use color::Color;

