1use thiserror::Error;
2use std::os::raw::c_int;
3
4#[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#[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}