1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
mod callbacks;
#[allow(clippy::module_inception)]
mod encoder;
mod config;
mod state;
mod error;

#[cfg(feature = "flac")]
use flac_sys::{FLAC__StreamEncoder, FLAC__stream_encoder_delete};

#[cfg(feature = "libflac")]
use libflac_sys::{FLAC__StreamEncoder, FLAC__stream_encoder_delete};

use std::{mem, ptr};

pub use self::callbacks::{WriteWrapper, flac_encoder_write_write_callback};
pub use self::error::FlacEncoderInitError;
pub use self::config::FlacEncoderConfig;
pub use self::state::FlacEncoderState;
pub use self::encoder::FlacEncoder;


#[derive(Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
struct StreamEncoderContainer(pub *mut FLAC__StreamEncoder);

impl Drop for StreamEncoderContainer {
    fn drop(&mut self) {
        let ptr = mem::replace(&mut self.0, ptr::null_mut());
        if !ptr.is_null() {
            unsafe { FLAC__stream_encoder_delete(ptr) };
        }
    }
}