use larust_core::__internal::{handoff, listener};
use std::net::SocketAddr;
use std::time::Duration;
#[tokio::main]
async fn main() {
let replacement_path = std::env::args()
.nth(1)
.expect("usage: supervisor_parent_fixture <replacement-binary-path>");
let addr: SocketAddr = "127.0.0.1:0".parse().unwrap();
let parent_listener = listener::bind(addr).expect("bind failed");
let port = parent_listener.local_addr().unwrap().port();
let outcome = handoff::spawn_replacement_and_wait_for_ready(
&parent_listener,
replacement_path.as_ref(),
Duration::from_secs(10),
true,
)
.await
.expect("spawn_replacement_and_wait_for_ready returned an error");
let child = outcome.expect("replacement should have become ready");
let child_pid = child.id().expect("child should have a pid");
eprintln!("READY port={port} child_pid={child_pid}");
use std::io::Write;
std::io::stderr().flush().unwrap();
let _child = child;
std::future::pending::<()>().await;
}