1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
use std::{
path::PathBuf,
process::Command,
};
use crate::{
drop::{
Metadata,
name::DropQuery,
},
install::InstallTarget,
};
#[derive(Clone, Debug)]
pub struct Exe {
metadata: Metadata,
bin_name: String,
}
impl Exe {
pub fn query(query: DropQuery) -> Result<Self, ()> {
unimplemented!("TODO: Find executable for '{}'Z", query);
}
#[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,
}