Skip to main content

ape_decoder/
lib.rs

1#![doc = include_str!("../README.md")]
2#![deny(unsafe_code)]
3// Allow clippy style lints that conflict with the codec's algorithmic patterns
4#![allow(
5    clippy::too_many_arguments,     // decode functions mirror C++ parameter lists
6    clippy::unnecessary_cast,       // explicit casts document integer width transitions
7    clippy::manual_range_contains,  // boundary checks match C++ source for clarity
8    clippy::new_without_default,    // codec types require explicit initialization parameters
9    clippy::manual_memcpy,          // explicit loops match C++ EXPAND_N_TIMES patterns
10    clippy::needless_range_loop,    // index loops needed for parallel array access
11    clippy::manual_is_multiple_of,  // matches C++ modulo patterns
12    clippy::implicit_saturating_sub,// explicit arithmetic matches C++ overflow semantics
13    clippy::needless_lifetimes,     // explicit lifetimes clarify borrow relationships
14    clippy::empty_line_after_doc_comments,
15    clippy::manual_div_ceil,        // explicit div_ceil matches C++ patterns
16    clippy::type_complexity          // complex closure types in thread spawning
17)]
18
19pub(crate) mod bitreader;
20pub(crate) mod crc;
21pub mod decoder;
22pub(crate) mod entropy;
23pub mod error;
24pub mod format;
25pub mod id3v2;
26pub(crate) mod nn_filter;
27pub(crate) mod predictor;
28pub(crate) mod range_coder;
29pub(crate) mod roll_buffer;
30pub mod tag;
31pub(crate) mod unprepare;
32
33pub use decoder::{
34    decode, ApeDecoder, ApeInfo, FrameDecoder, FrameIterator, SeekResult, SourceFormat,
35};
36pub use error::{ApeError, ApeResult};
37pub use format::ApeFileInfo;
38pub use id3v2::{read_id3v2, Id3v2Frame, Id3v2Tag};
39pub use tag::{read_tag, remove_tag, write_tag, ApeTag, ApeTagField, TagFieldType};