use crate::app::App;
use crate::app_config::AppConfig;
pub fn run_app_with_name<A: App>(config: AppConfig, app: A, app_name: &str) {
run_app_with_devtools::<A, crate::DefaultDevTools>(config, app, app_name)
}
pub fn run_app_with_devtools<A: App, D: crate::DevPlugin>(
config: AppConfig,
app: A,
app_name: &str,
) {
#[cfg(feature = "tui")]
if tui_selected() {
super::run_tui_app_with_name(config, super::TuiOptions::default(), app, app_name);
return;
}
run_default_frontend::<A, D>(config, app, app_name)
}
#[cfg(feature = "tui")]
fn tui_selected() -> bool {
let has_window = cfg!(all(
feature = "desktop-bare",
not(target_os = "android"),
not(target_arch = "wasm32")
));
let has_page = cfg!(all(feature = "web-dom", target_arch = "wasm32"));
if !has_window && !has_page {
return true;
}
std::env::var("TELAR_TARGET").is_ok_and(|target| target.eq_ignore_ascii_case("tui"))
}
#[cfg(all(
feature = "desktop-bare",
not(target_os = "android"),
not(target_arch = "wasm32")
))]
fn run_default_frontend<A: App, D: crate::DevPlugin>(config: AppConfig, app: A, app_name: &str) {
super::desktop::run_desktop_app_with_devtools::<A, D>(config, app, app_name)
}
#[cfg(all(
feature = "web-dom",
target_arch = "wasm32",
not(all(
feature = "desktop-bare",
not(target_os = "android"),
not(target_arch = "wasm32")
))
))]
fn run_default_frontend<A: App, D: crate::DevPlugin>(config: AppConfig, app: A, app_name: &str) {
super::run_web_app_with_name(config, super::WebOptions::default(), app, app_name)
}
#[cfg(not(any(
all(
feature = "desktop-bare",
not(target_os = "android"),
not(target_arch = "wasm32")
),
all(feature = "web-dom", target_arch = "wasm32")
)))]
fn run_default_frontend<A: App, D: crate::DevPlugin>(_config: AppConfig, _app: A, _app_name: &str) {
panic!(
"this build of telar has no frontend to run on — enable `desktop` for a window, `web` for a page, \
or `tui` for the terminal"
);
}