diff options
Diffstat (limited to 'src/commands/env_of.rs')
-rw-r--r-- | src/commands/env_of.rs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/commands/env_of.rs b/src/commands/env_of.rs new file mode 100644 index 0000000..4ce5161 --- /dev/null +++ b/src/commands/env_of.rs @@ -0,0 +1,42 @@ +use anyhow::Error; +use anyhow::Context; +use anyhow::Result; +use clap_v3::ArgMatches; + +use crate::package::PackageName; +use crate::package::PackageVersionConstraint; +use crate::repository::Repository; + +pub async fn env_of(matches: &ArgMatches, repo: Repository) -> Result<()> { + use filters::filter::Filter; + use std::io::Write; + + let package_filter = { + let name = matches.value_of("package_name").map(String::from).map(PackageName::from).unwrap(); + let constraint = matches.value_of("package_version_constraint").map(String::from).map(PackageVersionConstraint::new).unwrap()?; + trace!("Checking for package with name = {} and version = {:?}", name, constraint); + + crate::util::filters::build_package_filter_by_name(name) + .and(crate::util::filters::build_package_filter_by_version_constraint(constraint)) + }; + + let mut stdout = std::io::stdout(); + repo.packages() + .filter(|package| package_filter.filter(package)) + .inspect(|pkg| trace!("Found package: {:?}", pkg)) + .map(|pkg| { + if let Some(hm) = pkg.environment() { + for (key, value) in hm { + writeln!(stdout, "{} = '{}'", key, value)?; + } + } else { + writeln!(stdout, "No environment")?; + } + + Ok(()) + }) + .collect::<Result<_>>() +} + + + |