use std::{ffi::NulError, str::Utf8Error};
use thiserror::Error;
#[derive(Debug, Error)]
pub enum OfficeError {
#[error("library not found")]
MissingLibrary,
#[error("library missing hook function")]
MissingLibraryHook,
#[error(transparent)]
LoadLibrary(dlopen2::Error),
#[error("{0}")]
OfficeError(String),
#[error("missing '{0}' function")]
MissingFunction(&'static str),
#[error("failed to parse filters: {0}")]
InvalidFilterTypes(serde_json::Error),
#[error("failed to parse version info: {0}")]
InvalidVersionInfo(serde_json::Error),
#[error("invalid utf8 string: {0}")]
InvalidUtf8String(#[from] Utf8Error),
#[error("string cannot contain null byte")]
InvalidString(#[from] NulError),
#[error("invalid path provided")]
InvalidPath,
#[error("already another active instance")]
InstanceLock,
#[error("callback invoked after instance was dropped")]
InstanceDropped,
#[error("unknown initialization error")]
UnknownInit,
}