Skip to main content

lux_cli/
args.rs

1use eyre::{eyre, Result};
2use lux_lib::package::PackageReq;
3use std::{path::PathBuf, str::FromStr};
4
5#[derive(Debug, Clone)]
6pub enum PackageOrRockspec {
7    Package(PackageReq),
8    RockSpec(PathBuf),
9}
10
11impl FromStr for PackageOrRockspec {
12    type Err = eyre::Error;
13
14    fn from_str(s: &str) -> Result<Self, Self::Err> {
15        let path = PathBuf::from(s);
16        if path.is_file() {
17            Ok(Self::RockSpec(path))
18        } else {
19            let pkg = PackageReq::from_str(s).map_err(|err| {
20                eyre!(
21                    "No file {0} found and cannot parse package query: {1}",
22                    s,
23                    err
24                )
25            })?;
26            Ok(Self::Package(pkg))
27        }
28    }
29}