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}