lix-installer/src/lib.rs

53 lines
1.4 KiB
Rust
Raw Normal View History

2022-09-14 22:18:13 +00:00
mod actions;
2022-10-25 18:57:09 +00:00
pub mod cli;
2022-09-15 19:11:46 +00:00
mod error;
2022-10-25 18:57:09 +00:00
mod interaction;
2022-10-19 22:12:50 +00:00
mod os;
2022-09-14 22:18:13 +00:00
mod plan;
2022-10-14 22:14:03 +00:00
mod planner;
2022-09-14 22:18:13 +00:00
mod settings;
2022-10-25 18:57:09 +00:00
use std::{ffi::OsStr, fmt::Display, process::Output};
pub use error::HarmonicError;
2022-09-15 17:29:22 +00:00
pub use plan::InstallPlan;
2022-10-25 18:57:09 +00:00
pub use planner::BuiltinPlanner;
use serde::Serializer;
2022-09-15 17:29:22 +00:00
pub use settings::InstallSettings;
2022-09-26 21:07:53 +00:00
use tokio::process::Command;
2022-09-09 18:43:35 +00:00
#[tracing::instrument(skip_all, fields(command = %format!("{:?}", command.as_std())))]
2022-10-18 18:03:19 +00:00
async fn execute_command(command: &mut Command) -> Result<Output, std::io::Error> {
tracing::trace!("Executing");
let command_str = format!("{:?}", command.as_std());
2022-10-18 18:03:19 +00:00
let output = command.output().await?;
match output.status.success() {
true => Ok(output),
2022-09-26 21:07:53 +00:00
false => Err(std::io::Error::new(
std::io::ErrorKind::Other,
2022-10-24 23:16:18 +00:00
format!(
"Command `{command_str}` failed status, stderr:\n{}\n",
String::from_utf8(output.stderr).unwrap_or_else(|_e| String::from("<Non-UTF-8>"))
),
2022-09-26 21:07:53 +00:00
)),
2022-09-09 18:43:35 +00:00
}
}
#[tracing::instrument(skip_all, fields(
k = %k.as_ref().to_string_lossy(),
v = %v.as_ref().to_string_lossy(),
))]
2022-09-26 15:43:10 +00:00
fn set_env(k: impl AsRef<OsStr>, v: impl AsRef<OsStr>) {
tracing::trace!("Setting env");
std::env::set_var(k.as_ref(), v.as_ref());
2022-09-08 00:13:06 +00:00
}
2022-09-26 21:07:53 +00:00
fn serialize_error_to_display<E, S>(err: &E, ser: S) -> Result<S::Ok, S::Error>
where
E: Display,
S: Serializer,
{
ser.serialize_str(&format!("{err:#}"))
2022-09-26 21:07:53 +00:00
}