android_activity/
error.rs1use thiserror::Error;
2
3#[derive(Error, Debug)]
4pub enum AppError {
5 #[error("Operation only supported from the android_main() thread: {0}")]
6 NonMainThread(String),
7
8 #[error("Java VM or JNI error, including Java exceptions")]
9 JavaError(String),
10
11 #[error("Input unavailable")]
12 InputUnavailable,
13}
14
15pub type Result<T> = std::result::Result<T, AppError>;
16
17#[derive(Error, Debug)]
25pub(crate) enum InternalAppError {
26 #[error("A JNI error")]
27 JniError(jni::errors::JniError),
28 #[error("A bad argument was passed to a JNI method: {0}")]
31 JniBadArgument(String),
32 #[error("A Java VM error")]
33 JvmError(jni::errors::Error),
34 #[error("Input unavailable")]
35 InputUnavailable,
36}
37
38pub(crate) type InternalResult<T> = std::result::Result<T, InternalAppError>;
39
40impl From<jni::errors::Error> for InternalAppError {
41 fn from(value: jni::errors::Error) -> Self {
42 InternalAppError::JvmError(value)
43 }
44}
45impl From<jni::errors::JniError> for InternalAppError {
46 fn from(value: jni::errors::JniError) -> Self {
47 InternalAppError::JniError(value)
48 }
49}
50
51impl From<InternalAppError> for AppError {
52 fn from(value: InternalAppError) -> Self {
53 match value {
54 InternalAppError::JniError(err) => AppError::JavaError(err.to_string()),
55 InternalAppError::JniBadArgument(msg) => AppError::JavaError(msg),
56 InternalAppError::JvmError(err) => AppError::JavaError(err.to_string()),
57 InternalAppError::InputUnavailable => AppError::InputUnavailable,
58 }
59 }
60}