use proc_macro2::TokenStream;
use quote::quote;
use std::iter::FromIterator;
pub fn render_impl_android(input: TokenStream) -> TokenStream {
quote! {
#[allow(non_snake_case)]
#[no_mangle]
#[cfg(target_os = "android")]
unsafe extern "C" fn Java_com_glacyr_polyhorn_Application_main(
env: *mut std::ffi::c_void,
_: *mut std::ffi::c_void,
activity: *mut std::ffi::c_void,
) {
let container = polyhorn::raw::OpaqueContainer::activity(env, activity);
#[cfg(test)] {
std::mem::forget(polyhorn::render(|| poly!(<polyhorn_test::App />), container));
}
#[cfg(not(test))] {
std::mem::forget(polyhorn::render(|| poly!(#input), container));
}
}
}
}
pub fn render_impl_ios(input: TokenStream) -> TokenStream {
quote! {
#[no_mangle]
#[cfg(target_os = "ios")]
unsafe extern "C" fn __polyhorn_main() {
let container = polyhorn::raw::OpaqueContainer::root();
#[cfg(test)] {
std::mem::forget(polyhorn::render(|| poly!(<polyhorn_test::App />), container));
}
#[cfg(not(test))] {
std::mem::forget(polyhorn::render(|| poly!(#input), container));
}
}
}
}
pub fn render_impl(input: TokenStream) -> TokenStream {
TokenStream::from_iter(vec![
render_impl_android(input.clone()),
render_impl_ios(input.clone()),
])
}