panda/
error.rs

1use thiserror::Error;
2use std::os::raw::c_int;
3
4// Top-level -----------------------------------------------------------------------------------------------------------
5
6#[derive(Debug, Error)]
7pub enum Error {
8    #[error("The provided string contained a null, which is not permitted")]
9    InvalidString(#[from] std::ffi::NulError),
10
11    #[error("The provided size was not properly page-aligned")]
12    UnalignedPageSize,
13
14    #[error(transparent)]
15    RecordReplayError(#[from] RrError)
16}
17
18// Transparent Subclasses ----------------------------------------------------------------------------------------------
19
20#[derive(Debug, Error)]
21pub enum RrError {
22    #[error("Recording already enabled")]
23    RrCtrlEInvalid,
24
25    #[error("Recording enable request already pending")]
26    RrCtrlEPending,
27}
28
29impl RrError {
30    pub fn translate_err_code(code: c_int) -> Result<(), Error> {
31        match code {
32            panda_sys::RRCTRL_ret_RRCTRL_EINVALID => Err(Error::RecordReplayError(RrError::RrCtrlEInvalid)),
33            panda_sys::RRCTRL_ret_RRCTRL_EPENDING => Err(Error::RecordReplayError(RrError::RrCtrlEPending)),
34            panda_sys::RRCTRL_ret_RRCTRL_OK => Ok(()),
35            _ => unreachable!()
36        }
37    }
38}