tesseract_android_base/error/
exception.rs1use 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}