use std::{
path::PathBuf,
process::Command,
};
use crate::{
drop::{
Metadata,
name::Query,
},
install::InstallTarget,
};
#[derive(Clone, Debug)]
pub struct Exe {
metadata: Metadata,
bin_name: String,
}
impl Exe {
pub fn installed<S: AsRef<str>>(
query: &Query<S>,
target: &InstallTarget,
) -> Result<Self, ()> {
let query = query.to_ref::<str>();
unimplemented!("TODO: Find installation of {:?} for {:?}", query, target)
}
#[inline]
pub const fn metadata(&self) -> &Metadata {
&self.metadata
}
#[inline]
pub fn bin_name(&self) -> &str {
&self.bin_name
}
pub fn bin_path<'t>(
&self,
target: &'t InstallTarget,
) -> Result<PathBuf, FindError<'t>> {
unimplemented!(
"TODO: Find {:?} binary for {:?}",
self.metadata.name,
target,
)
}
pub fn command<'t>(
&self,
target: &'t InstallTarget
) -> Result<Command, FindError<'t>> {
self.bin_path(target).map(Command::new)
}
}
#[derive(Debug)]
pub struct FindError<'a> {
target: &'a InstallTarget,
}