use devtools_core::DevPlugin;
use platform_core::{Platform, PlatformError};
use services_core::AppPathsProvider;
use crate::app::App;
use crate::app_config::AppConfig;
use crate::config;
use crate::prefs::UserPrefs;
use super::handler::build_app_handler;
pub fn run_with_platform<P, A, D>(
platform: P,
config: AppConfig,
paths: Box<dyn AppPathsProvider>,
app: A,
app_name: &str,
) -> Result<(), PlatformError>
where
P: Platform,
P::Window: Clone + Send + Sync + 'static,
A: App,
D: DevPlugin,
{
let prefs = UserPrefs::load(app_name, paths.as_ref());
let backend = prefs.backend.unwrap_or_else(config::compile_time_backend);
let AppConfig {
mut window,
font_paths,
font_data,
} = config;
if let Some(custom) = app.window_config() {
window = custom;
}
let handler = build_app_handler::<P::Window, D>(
Box::new(app),
paths,
font_paths,
font_data,
backend,
prefs,
app_name.to_owned(),
);
platform.run(window, handler)
}