readme_sync/
package.rs

1use std::path::{Path, PathBuf};
2
3use crate::{Manifest, TomlReadError};
4
5/// A struct contains package manifest and its root path.
6#[derive(Clone, Debug, Eq, PartialEq)]
7pub struct Package {
8    /// Package manifest.
9    manifest: Manifest,
10    /// Package root path.
11    path: PathBuf,
12}
13
14impl Package {
15    /// Creates a package from the specified path.
16    pub fn from_path(path: PathBuf) -> Result<Self, TomlReadError> {
17        Ok(Self {
18            manifest: Manifest::from_package_path(&path)?,
19            path,
20        })
21    }
22
23    /// Creates a package from the manifest and package path.
24    pub fn from_manifest_and_path(manifest: Manifest, path: PathBuf) -> Self {
25        Self { manifest, path }
26    }
27
28    /// Returns a package manifest.
29    pub fn manifest(&self) -> &Manifest {
30        &self.manifest
31    }
32
33    /// Returns a package path.
34    pub fn path(&self) -> &Path {
35        &self.path
36    }
37
38    /// Returns package relative readme path.
39    pub fn relative_readme_path(&self) -> Option<&Path> {
40        self.manifest.relative_readme_path(&self.path)
41    }
42
43    /// Returns package relative default readme path.
44    pub fn default_relative_readme_path(&self) -> Option<&Path> {
45        Manifest::default_readme_filename(&self.path)
46    }
47}