tesseract_android_base/error/
android.rs

1use jni::{JNIEnv, objects::JObject, errors::Result};
2
3use thiserror::Error;
4
5use log::SetLoggerError;
6
7use crabdroid::error::{ExceptionConvertible, CompositeError, CompositeErrorInclude, GlobalError};
8
9use super::tesseract::global_error_to_tesseract;
10
11use super::exception::*;
12
13#[derive(Debug, Error)]
14pub enum TesseractAndroidError {
15    #[error(transparent)]
16    Tesseract(#[from] tesseract_one::Error),
17
18    #[error(transparent)]
19    Logger(#[from] SetLoggerError),
20
21    #[error(transparent)]
22    Gllobal(#[from] GlobalError)
23}
24
25impl Into<tesseract_one::Error> for TesseractAndroidError {
26    fn into(self) -> tesseract_one::Error {
27        match self {
28            TesseractAndroidError::Tesseract(e) => e,
29            TesseractAndroidError::Logger(e) => tesseract_one::Error::described(
30                tesseract_one::ErrorKind::Weird,
31                &e.to_string()),
32            TesseractAndroidError::Gllobal(e) => global_error_to_tesseract(e),
33        }
34    }
35}
36
37impl ExceptionConvertible for TesseractAndroidError {
38    fn to_exception<'a: 'b, 'b>(&self, env: &'b JNIEnv<'a>) -> Result<JObject<'a>> {
39        match self {
40            TesseractAndroidError::Tesseract(error) => tesseract_error_to_exception(error, env),
41            TesseractAndroidError::Logger(error) => logger_error_to_exception(error, env),
42            TesseractAndroidError::Gllobal(error) => global_error_to_exception(error, env),
43        }
44    }
45}
46
47impl !CompositeErrorInclude for TesseractAndroidError {
48}
49
50impl From<TesseractAndroidError> for CompositeError<TesseractAndroidError> {
51    fn from(value: TesseractAndroidError) -> Self {
52        Self::Other(value)
53    }
54}