use thiserror::Error;
#[derive(Error, Debug)]
pub enum WpdError {
#[error("invalid arguments passed to libwpd shim")]
InvalidArgs,
#[error("not a supported WordPerfect document")]
UnsupportedFormat,
#[error("libwpd failed to parse the document")]
ParseError,
#[error("out of memory while extracting text")]
OutOfMemory,
#[error("libwpd raised an unexpected error")]
Internal,
#[error("libwpd document is encrypted or password-protected")]
Encrypted,
#[error("libwpd returned invalid UTF-8")]
InvalidUtf8,
#[error("WordPerfect extraction is not supported on this platform")]
UnsupportedPlatform,
}
#[cfg(any(target_os = "linux", target_os = "macos", target_os = "windows"))]
impl WpdError {
pub(crate) fn from_code(code: i32) -> Self {
match code {
1 => WpdError::InvalidArgs,
2 => WpdError::UnsupportedFormat,
3 => WpdError::ParseError,
4 => WpdError::OutOfMemory,
6 => WpdError::Encrypted,
_ => WpdError::Internal,
}
}
}