flac_bound/encoder/
state.rs

1#[cfg(feature = "flac")]
2use flac_sys::{FLAC__StreamEncoderState, FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_OK, FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_UNINITIALIZED,
3               FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_OGG_ERROR, FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR,
4               FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA, FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_CLIENT_ERROR,
5               FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_IO_ERROR, FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_FRAMING_ERROR,
6               FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR};
7
8#[cfg(feature = "libflac-nobuild")]
9use libflac_sys::{FLAC__StreamEncoderState,
10                  FLAC__STREAM_ENCODER_OK as FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_OK,
11                  FLAC__STREAM_ENCODER_UNINITIALIZED as FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_UNINITIALIZED,
12                  FLAC__STREAM_ENCODER_OGG_ERROR as FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_OGG_ERROR,
13                  FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR as FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR,
14                  FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA as FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA,
15                  FLAC__STREAM_ENCODER_CLIENT_ERROR as FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_CLIENT_ERROR,
16                  FLAC__STREAM_ENCODER_IO_ERROR as FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_IO_ERROR,
17                  FLAC__STREAM_ENCODER_FRAMING_ERROR as FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_FRAMING_ERROR,
18                  FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR as FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR};
19
20use std::convert::TryFrom;
21
22
23/// State values for a [`FlacEncoder`](struct.FlacEncoder.html).
24///
25/// The encoder's state can be obtained by calling [`FlacEncoder::state()`](struct.FlacEncoder.html#method.state).
26///
27/// If the encoder gets into any other state besides `Ok`
28/// or `Uninitialized`, it becomes invalid for encoding and
29/// must be deleted by dropping.
30#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
31#[repr(u32)]
32pub enum FlacEncoderState {
33    /// The encoder is in the normal OK state and samples can be processed.
34    Ok = FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_OK,
35
36    /// The encoder is in the uninitialized state; one of the
37    /// [`FlacEncoderConfig::init_*()`](struct.FlacEncoderConfig.html#method.init_write)
38    /// functions must be called before samples can be processed.
39    Uninitialized = FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_UNINITIALIZED,
40
41    /// An error occurred in the underlying Ogg layer.
42    OggError = FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_OGG_ERROR,
43
44    /// An error occurred in the underlying verify stream decoder; check
45    /// [`FlacEncoder::verify_decoder_state()`](struct.FlacEncoder.html#method.verify_decoder_state).
46    VerifyDecoderError = FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR,
47
48    /// The verify decoder detected a mismatch between the original audio signal and the decoded audio signal.
49    VerifyMismatchInAudioData = FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA,
50
51    /// One of the callbacks returned a fatal error.
52    ClientError = FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_CLIENT_ERROR,
53
54    /// An I/O error occurred while opening/reading/writing a file. Check `errno`.
55    IoError = FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_IO_ERROR,
56
57    /// An error occurred while writing the stream; usually, the write_callback returned an error.
58    FramingError = FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_FRAMING_ERROR,
59
60    /// Memory allocation failed.
61    MemoryAllocationError = FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR,
62}
63
64impl Into<FLAC__StreamEncoderState> for FlacEncoderState {
65    fn into(self) -> FLAC__StreamEncoderState {
66        self as FLAC__StreamEncoderState
67    }
68}
69
70impl TryFrom<FLAC__StreamEncoderState> for FlacEncoderState {
71    type Error = ();
72
73    #[allow(non_upper_case_globals)]
74    fn try_from(raw: FLAC__StreamEncoderState) -> Result<FlacEncoderState, ()> {
75        Ok(match raw {
76            FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_OK => FlacEncoderState::Ok,
77            FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_UNINITIALIZED => FlacEncoderState::Uninitialized,
78            FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_OGG_ERROR => FlacEncoderState::OggError,
79            FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR => FlacEncoderState::VerifyDecoderError,
80            FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA => FlacEncoderState::VerifyMismatchInAudioData,
81            FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_CLIENT_ERROR => FlacEncoderState::ClientError,
82            FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_IO_ERROR => FlacEncoderState::IoError,
83            FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_FRAMING_ERROR => FlacEncoderState::FramingError,
84            FLAC__StreamEncoderState_FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR => FlacEncoderState::MemoryAllocationError,
85            _ => return Err(()),
86        })
87    }
88}