#![allow(
clippy::print_stdout,
clippy::uninlined_format_args,
clippy::std_instead_of_core,
reason = "example code that demonstrates library usage"
)]
use std::time::Duration;
use waitup::{wait_for_connection, Target, WaitConfig};
#[tokio::main]
async fn main() -> Result<(), waitup::WaitForError> {
println!("\u{1F433} Docker Compose: Waiting for dependent services...");
let targets = vec![
Target::tcp("postgres", 5432)?, Target::tcp("redis", 6379)?, Target::tcp("rabbitmq", 5672)?, Target::parse("http://api-gateway:8080/health", 200)?,
];
let config = WaitConfig::builder()
.timeout(Duration::from_secs(120)) .interval(Duration::from_secs(2)) .max_interval(Duration::from_secs(10))
.wait_for_any(false) .build();
println!("\u{1F4CB} Waiting for {} services:", targets.len());
for target in &targets {
println!(" - {}", target.display());
}
let result = wait_for_connection(&targets, &config).await?;
println!("\u{1F389} All services are ready! Starting application...");
println!("\u{23F1}\u{FE0F} Total wait time: {:?}", result.elapsed);
println!("\u{1F680} Application started successfully!");
Ok(())
}