aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.toml2
-rw-r--r--src/main.rs55
2 files changed, 56 insertions, 1 deletions
diff --git a/Cargo.toml b/Cargo.toml
index f922052..44b269d 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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();
+ }
}