diff options
-rw-r--r-- | Cargo.toml | 2 | ||||
-rw-r--r-- | src/main.rs | 55 |
2 files changed, 56 insertions, 1 deletions
@@ -6,3 +6,5 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +anyhow = "1.0.68" +termcolor = "1.1.3" diff --git a/src/main.rs b/src/main.rs index e7a11a9..8bd9cf0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,56 @@ +use std::fs; +use std::io::Write; +use std::process::Command; +use std::thread; +use termcolor::{Color, ColorChoice, ColorSpec, StandardStream, WriteColor}; + +fn start() -> anyhow::Result<()> { + let mut stdout = StandardStream::stdout(ColorChoice::Always); + + stdout.set_color(ColorSpec::new().set_fg(Some(Color::Yellow)))?; + writeln!(&mut stdout, "Starting rustkrazy")?; + + for service in fs::read_dir("/bin")? { + let service = service?; + let service_name = service + .file_name() + .into_string() + .expect("invalid unicode in file name"); + + match Command::new(service.path()).spawn() { + Ok(_) => { + stdout.set_color(ColorSpec::new().set_fg(Some(Color::Green)))?; + writeln!(&mut stdout, "[ OK ] Starting {}", service_name)?; + } + Err(e) => { + stdout.set_color(ColorSpec::new().set_fg(Some(Color::Red)))?; + writeln!(&mut stdout, "[ ERROR ] Starting {}: {}", service_name, e)?; + } + } + } + + Ok(()) +} + fn main() { - println!("Hello, world!"); + match start() { + Ok(_) => {} + Err(e) => { + let mut stdout = StandardStream::stdout(ColorChoice::Always); + + match stdout.set_color(ColorSpec::new().set_fg(Some(Color::Red))) { + Ok(_) => match writeln!(&mut stdout, "[ ERROR ] {}", e) { + Ok(_) => {} + Err(_) => println!("[ ERROR ] {}", e), + }, + Err(_) => { + println!("[ ERROR ] {}", e); + } + } + } + } + + loop { + thread::yield_now(); + } } |