1use crate::core::{PackageIdSpec, Workspace};
2use crate::ops;
3use crate::util::CargoResult;
4
5pub fn pkgid(ws: &Workspace<'_>, spec: Option<&str>) -> CargoResult<PackageIdSpec> {
6 let resolve = match ops::load_pkg_lockfile(ws)? {
7 Some(resolve) => resolve,
8 None => anyhow::bail!("a Cargo.lock must exist for this command"),
9 };
10
11 let pkgid = match spec {
12 Some(spec) => PackageIdSpec::query_str(spec, resolve.iter())?,
13 None => ws.current()?.package_id(),
14 };
15 Ok(PackageIdSpec::from_package_id(pkgid))
16}