pedant_core/resolution/rust/
package.rs1use std::path::{Path, PathBuf};
4use std::sync::Arc;
5
6use super::edition::CargoEdition;
7use super::identity::PackageId;
8use super::version::CargoPackageVersion;
9
10#[derive(Debug)]
15pub struct RustPackage {
16 pub(super) id: PackageId,
17 pub(super) name: Arc<str>,
18 pub(super) version: CargoPackageVersion,
19 pub(super) rust_version: Option<Arc<str>>,
20 pub(super) edition: CargoEdition,
21 pub(super) manifest_path: Arc<str>,
22 pub(super) relative_directory: Arc<str>,
23 pub(super) directory: Box<Path>,
24 pub(super) workspace_member: bool,
25}
26
27impl RustPackage {
28 pub fn id(&self) -> PackageId {
30 self.id
31 }
32
33 pub fn name(&self) -> &str {
35 &self.name
36 }
37
38 pub fn version(&self) -> &CargoPackageVersion {
40 &self.version
41 }
42
43 pub fn rust_version(&self) -> Option<&str> {
45 self.rust_version.as_deref()
46 }
47
48 pub fn edition(&self) -> CargoEdition {
50 self.edition
51 }
52
53 pub fn manifest_path(&self) -> &str {
55 &self.manifest_path
56 }
57
58 pub fn relative_directory(&self) -> &str {
60 &self.relative_directory
61 }
62
63 pub fn directory(&self) -> &Path {
65 &self.directory
66 }
67
68 pub fn directory_in(&self, root: &Path) -> PathBuf {
74 match self.relative_directory.is_empty() {
75 true => root.to_path_buf(),
76 false => root.join(&*self.relative_directory),
77 }
78 }
79
80 pub fn is_workspace_member(&self) -> bool {
82 self.workspace_member
83 }
84}