aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs55
1 files changed, 54 insertions, 1 deletions
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();
+ }
}