summaryrefslogtreecommitdiffstats
path: root/src/commands/env_of.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands/env_of.rs')
-rw-r--r--src/commands/env_of.rs42
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<_>>()
+}
+
+
+