pep508_rs/
origin.rs

1use crate::PackageName;
2use std::path::{Path, PathBuf};
3
4/// The origin of a dependency, e.g., a `-r requirements.txt` file.
5#[derive(
6    Hash, Debug, Clone, Eq, PartialEq, PartialOrd, Ord, serde::Serialize, serde::Deserialize,
7)]
8#[serde(rename_all = "kebab-case")]
9pub enum RequirementOrigin {
10    /// The requirement was provided via a standalone file (e.g., a `requirements.txt` file).
11    File(PathBuf),
12    /// The requirement was provided via a local project (e.g., a `pyproject.toml` file).
13    Project(PathBuf, PackageName),
14    /// The requirement was provided via a workspace.
15    Workspace,
16}
17
18impl RequirementOrigin {
19    /// Returns the path of the requirement origin.
20    pub fn path(&self) -> &Path {
21        match self {
22            RequirementOrigin::File(path) => path.as_path(),
23            RequirementOrigin::Project(path, _) => path.as_path(),
24            // Multiple toml are merged and difficult to track files where Requirement is defined. Returns a dummy path instead.
25            RequirementOrigin::Workspace => Path::new("(workspace)"),
26        }
27    }
28}