mod shared;
#[cfg(all(not(target_arch = "wasm32"), feature = "stdio"))]
use lspf::Server;
const _: fn() = || {
fn assert_task_send<T: lspf::TaskSend>() {}
assert_task_send::<&str>();
#[cfg(target_arch = "wasm32")]
assert_task_send::<std::rc::Rc<()>>();
};
fn main() {
let server = shared::build().expect("the static registrations are valid");
#[cfg(all(not(target_arch = "wasm32"), feature = "stdio"))]
serve_native(server);
#[cfg(all(not(target_arch = "wasm32"), not(feature = "stdio")))]
drop(server);
#[cfg(target_arch = "wasm32")]
drop(server);
}
#[cfg(all(not(target_arch = "wasm32"), feature = "stdio"))]
fn serve_native(server: Server<shared::State>) {
let runtime = tokio::runtime::Builder::new_multi_thread()
.enable_all()
.build()
.expect("a Tokio runtime starts");
let outcome = runtime
.block_on(lspf::stdio(server).serve())
.expect("serving ends without a transport error");
std::process::exit(outcome.code());
}