miden_assembly/project/
target_selector.rs1use alloc::format;
2
3use miden_assembly_syntax::diagnostics::Report;
4use miden_project::{Package as ProjectPackage, Target};
5
6pub enum ProjectTargetSelector<'a> {
7 Library,
8 Executable(&'a str),
9}
10
11impl<'a> ProjectTargetSelector<'a> {
12 pub(super) fn select_target(&self, project: &ProjectPackage) -> Result<Target, Report> {
13 match self {
14 ProjectTargetSelector::Library => project
15 .library_target()
16 .map(|target| target.inner().clone())
17 .ok_or_else(|| Report::msg("project does not define a library target")),
18 ProjectTargetSelector::Executable(name) => project
19 .executable_targets()
20 .iter()
21 .find(|target| target.name.inner().as_ref() == *name)
22 .map(|target| target.inner().clone())
23 .ok_or_else(|| {
24 Report::msg(format!(
25 "project does not define an executable target named '{name}'"
26 ))
27 }),
28 }
29 }
30}