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
use crate::error::AndroidError;
use serde::{Deserialize, Serialize};

/// Supported strategies for building Android application.
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
pub enum AndroidStrategy {
    /// Generate .apk with Gradle. Default strategy.
    #[default]
    #[serde(rename = "gradle-apk")]
    GradleApk,
    /// Generate native .aab without Gradle. This strategy currently doesn't support
    /// Crossbow plugins.
    #[serde(rename = "native-apk")]
    NativeApk,
    /// Generate native .apk without Gradle. This strategy currently doesn't support
    /// Crossbow plugins.
    #[serde(rename = "native-aab")]
    NativeAab,
}

impl std::str::FromStr for AndroidStrategy {
    type Err = AndroidError;

    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        match s {
            "gradle-apk" => Ok(Self::GradleApk),
            "native-apk" => Ok(Self::NativeApk),
            "native-aab" => Ok(Self::NativeAab),
            _ => Err(AndroidError::InvalidBuildStrategy(s.to_owned())),
        }
    }
}