usable backend for terminal launch

This commit is contained in:
Joseph Montanaro
2023-08-03 16:35:15 -07:00
parent 89bc74e644
commit 890f715388
5 changed files with 103 additions and 77 deletions

View File

@@ -1,5 +1,6 @@
use std::error::Error;
use std::convert::AsRef;
use std::ffi::OsString;
use std::sync::mpsc;
use strum_macros::AsRefStr;
@@ -216,7 +217,7 @@ pub enum RequestError {
}
// Errors encountered while running a subprocess (via creddy exec)
// Errors encountered while running a subprocess via creddy exec
#[derive(Debug, ThisError, AsRefStr)]
pub enum ExecError {
#[error("Please specify a command")]
@@ -237,6 +238,18 @@ pub enum CliError {
}
// Errors encountered while trying to launch a child process
#[derive(Debug, ThisError, AsRefStr)]
pub enum LaunchError {
#[error("Executable not found: {0:?}")]
ExeNotFound(OsString),
#[error("Failed to execute command: {0}")]
ExecutionFailed(#[from] std::io::Error),
#[error(transparent)]
GetCredentials(#[from] GetCredentialsError),
}
// =========================
// Serialize implementations
// =========================
@@ -327,3 +340,18 @@ impl Serialize for UnlockError {
map.end()
}
}
impl Serialize for LaunchError {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
let mut map = serializer.serialize_map(None)?;
map.serialize_entry("code", self.as_ref())?;
map.serialize_entry("msg", &format!("{self}"))?;
match self {
LaunchError::GetCredentials(src) => map.serialize_entry("source", &src)?,
_ => serialize_upstream_err(self, &mut map)?,
}
map.end()
}
}