Skip to main content

miden_assembly/project/
target_selector.rs

1use 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}