use std::collections::HashMap;
use std::path::PathBuf;
mod build_runtime_library;
mod find_android_studio;
mod generate_source_tree;
mod install;
mod link_native_libraries;
mod run;
pub use build_runtime_library::BuildRuntimeLibrary;
pub use find_android_studio::FindAndroidStudio;
pub use generate_source_tree::GenerateSourceTree;
pub use install::Install;
pub use link_native_libraries::LinkNativeLibraries;
pub use run::Run;
use crate::core::{Manager, Task};
use crate::Config;
#[derive(Debug)]
pub struct AndroidContext {
pub config: Config,
pub java_home: Option<PathBuf>,
pub android_sdk_root: Option<PathBuf>,
pub products: HashMap<String, PathBuf>,
}
pub enum AndroidTask {
BuildRuntimeLibrary(BuildRuntimeLibrary),
GenerateSourceTree(GenerateSourceTree),
FindAndroidStudio(FindAndroidStudio),
LinkNativeLibraries(LinkNativeLibraries),
Install(Install),
Run(Run),
}
#[derive(Debug)]
pub enum AndroidError {
UnsupportedHostOS(&'static str),
CompilationFailure,
AndroidStudioNotFound(PathBuf),
JavaNotFound(PathBuf),
AndroidSDKNotFound(PathBuf),
AndroidNDKNotFound(PathBuf),
}
impl Task for AndroidTask {
type Context = AndroidContext;
type Error = AndroidError;
fn verb(&self) -> &str {
match self {
AndroidTask::BuildRuntimeLibrary(task) => task.verb(),
AndroidTask::FindAndroidStudio(task) => task.verb(),
AndroidTask::GenerateSourceTree(task) => task.verb(),
AndroidTask::LinkNativeLibraries(task) => task.verb(),
AndroidTask::Install(task) => task.verb(),
AndroidTask::Run(task) => task.verb(),
}
}
fn message(&self) -> &str {
match self {
AndroidTask::BuildRuntimeLibrary(task) => task.message(),
AndroidTask::FindAndroidStudio(task) => task.message(),
AndroidTask::GenerateSourceTree(task) => task.message(),
AndroidTask::LinkNativeLibraries(task) => task.message(),
AndroidTask::Install(task) => task.message(),
AndroidTask::Run(task) => task.message(),
}
}
fn detail(&self) -> &str {
match self {
AndroidTask::BuildRuntimeLibrary(task) => task.detail(),
AndroidTask::FindAndroidStudio(task) => task.detail(),
AndroidTask::GenerateSourceTree(task) => task.detail(),
AndroidTask::LinkNativeLibraries(task) => task.detail(),
AndroidTask::Install(task) => task.detail(),
AndroidTask::Run(task) => task.detail(),
}
}
fn run(
&self,
context: Self::Context,
manager: &mut Manager,
) -> Result<Self::Context, Self::Error> {
match self {
AndroidTask::BuildRuntimeLibrary(task) => task.run(context, manager),
AndroidTask::FindAndroidStudio(task) => task.run(context, manager),
AndroidTask::GenerateSourceTree(task) => task.run(context, manager),
AndroidTask::LinkNativeLibraries(task) => task.run(context, manager),
AndroidTask::Install(task) => task.run(context, manager),
AndroidTask::Run(task) => task.run(context, manager),
}
}
}