tesseract_android_base/error/
exception.rs

1use jni::{JNIEnv, objects::JObject, errors::Result};
2
3use crabdroid::{error::{GlobalError, ExceptionConvertible}, env::AndroidEnv};
4
5use log::SetLoggerError;
6
7pub fn logger_error_to_exception<'a: 'b, 'b>(error: &SetLoggerError, env: &'b JNIEnv<'a>) -> Result<JObject<'a>> {
8    debug!("logger_error_to_exception: started");
9    let description = format!("Can't set android logger for Tesseract: {}", error);
10    let description = env.new_string(description)?;
11
12    env.new_object(
13        "java/lang/Exception",
14        "(Ljava/lang/String;)V",
15        &[description.into()])
16}
17
18pub fn tesseract_error_to_exception<'a: 'b, 'b>(error: &tesseract_one::Error, env: &'b JNIEnv<'a>) -> Result<JObject<'a>> {
19    debug!("tesseract_error_to_exception: started");
20    match &error.kind {
21        tesseract_one::ErrorKind::Cancelled => {
22            let clazz = env.find_class_android("one/tesseract/exception/UserCancelledException")?;
23            if let Some(description) = &error.description {
24                let description = env.new_string(description)?;
25                env.new_object(
26                    clazz,
27                    "(Ljava/lang/String;)V",
28                    &[description.into()])
29            } else {
30                env.new_object(
31                    clazz,
32                    "()V",
33                    &[])
34            }
35        },
36        kind => {
37            let kind = kind.to_string();
38
39            let description = if let Some(description) = &error.description {
40                format!("Tesseract error with of type '{}': {}", kind, description)
41            } else {
42                format!("Tesseract error with no description of type: : {}", kind)
43            };
44
45            let description = env.new_string(description)?;
46
47            env.new_object(
48                "java/lang/Exception",
49                "(Ljava/lang/String;)V",
50                &[description.into()])
51        },
52    }
53}
54
55pub fn global_error_to_exception<'a: 'b, 'b>(error: &GlobalError, env: &'b JNIEnv<'a>) -> Result<JObject<'a>> {
56    debug!("global_error_to_exception: started");
57    match error {
58        GlobalError::Exception(error) => {
59            debug!("global_error_to_exception: bind locally");
60            error.bind_locally(env)
61        },
62        GlobalError::JniError(error) => {
63            debug!("global_error_to_exception: JniError");
64            error.to_exception(&env)
65        },
66    }
67}