motioncam_decoder/
error.rs1use thiserror::Error;
2
3#[derive(Error, Debug)]
5pub enum McRawError {
6 #[error("I/O error: {0}")]
7 Io(#[from] std::io::Error),
8 #[error("invalid container header")]
9 InvalidHeader,
10 #[error("unsupported container version: {0}")]
11 UnsupportedVersion(u8),
12 #[error("invalid item type: {0}")]
13 InvalidItemType(u32),
14 #[error("corrupted index: invalid magic number")]
15 CorruptedIndex,
16 #[error("frame not found (timestamp: {0})")]
17 FrameNotFound(i64),
18 #[error("invalid compression type: {0}")]
19 InvalidCompressionType(i32),
20 #[error("decompression failed: {0}")]
21 DecompressionFailed(String),
22 #[error("metadata parse error: {0}")]
23 MetadataParse(#[from] serde_json::Error),
24 #[error("unexpected EOF or truncated data")]
25 TruncatedData,
26}
27
28pub type Result<T> = std::result::Result<T, McRawError>;
30
31#[inline]
33pub fn read_le_bytes<const N: usize>(data: &[u8], start: usize) -> Result<[u8; N]> {
34 data.get(start..start + N)
35 .ok_or(McRawError::TruncatedData)?
36 .try_into()
37 .map_err(|_| McRawError::TruncatedData)
38}