1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use displaydoc::Display;
use thiserror::Error;

/// `Result` type that used in `crossbow-permissions`.
pub type Result<T> = std::result::Result<T, AndroidError>;

/// Permissions error type.
#[derive(Display, Debug, Error)]
pub enum AndroidError {
    /// Signal Sender with provided singleton name not available
    SignalSenderNotAvailable(String),
    /// Singleton with provided name not found or haven't registered
    SingletonNotRegistered(String),
    /// Unsupported JNI Rust Type
    UnsupportedJniRustType(String),
    /// Wrong JNI Rust Type
    WrongJniRustType,
    /// Rust Jni library error
    Jni(jni::errors::Error),
    /// Anyhow library errors
    Anyhow(anyhow::Error),
}

impl From<jni::errors::Error> for AndroidError {
    fn from(error: jni::errors::Error) -> Self {
        Self::Jni(error)
    }
}

impl From<anyhow::Error> for AndroidError {
    fn from(error: anyhow::Error) -> Self {
        Self::Anyhow(error)
    }
}