asimov_module_cli/commands/
resolve.rs1use crate::{
4 StandardOptions,
5 SysexitsError::{self, *},
6};
7use asimov_module::resolve::Resolver;
8use color_print::cprintln;
9
10#[tokio::main]
11pub async fn resolve(url: impl AsRef<str>, _flags: &StandardOptions) -> Result<(), SysexitsError> {
12 let installer = asimov_installer::Installer::default();
13
14 let manifests = installer
15 .enabled_modules()
16 .await
17 .map_err(|e| {
18 tracing::error!("failed to read module manifest directory: {e}");
19 EX_UNAVAILABLE
20 })?
21 .into_iter()
22 .map(|manifest| manifest.manifest);
23
24 let resolver = Resolver::try_from_iter(manifests)
25 .inspect_err(|e| tracing::error!("failed to create resolver: {e}"))?;
26
27 let modules = resolver.resolve(url.as_ref()).inspect_err(|e| {
28 tracing::error!("failed to resolve modules for URL `{}`: {e}", url.as_ref())
29 })?;
30
31 for module in modules {
32 cprintln!("{}", module.name);
33 }
34
35 Ok(())
36}