use std::net::SocketAddr;
use tokio::net::TcpListener;
use corpus_ipc::BackendType;
use corpus_ipc::trait_def::BackendFactory;
#[tokio::main]
async fn main() {
let backend_type = match std::env::var("CORPUS_IPC_BACKEND_TYPE").as_deref() {
Ok("zmq") => {
#[cfg(feature = "zmq")]
{
BackendType::ZmqIpc
}
#[cfg(not(feature = "zmq"))]
{
eprintln!(
"[corpus-ipc-service] 'zmq' backend requested but crate was built without 'zmq' feature; falling back to Rust backend"
);
BackendType::Rust
}
}
_ => BackendType::Rust,
};
let app = corpus_ipc::server::router(BackendFactory::create(backend_type));
let addr: SocketAddr = std::env::var("CORPUS_IPC_BIND")
.unwrap_or_else(|_| "127.0.0.1:8080".into())
.parse()
.expect("invalid bind address");
println!("[corpus-ipc-service] listening on {addr}");
let listener = TcpListener::bind(addr).await.expect("bind failed");
axum::serve(listener, app.into_make_service())
.await
.unwrap();
}