Skip to main content

changeset_operations/providers/
manifest.rs

1use std::path::Path;
2
3use changeset_manifest::{InitConfig, MetadataSection};
4use semver::Version;
5
6use crate::Result;
7use crate::traits::{
8    InheritedVersionChecker, ManifestDependencyWriter, ManifestMetadataWriter,
9    ManifestVersionWriter, WorkspaceVersionManager,
10};
11
12pub struct FileSystemManifestWriter;
13
14impl FileSystemManifestWriter {
15    #[must_use]
16    pub fn new() -> Self {
17        Self
18    }
19}
20
21impl Default for FileSystemManifestWriter {
22    fn default() -> Self {
23        Self::new()
24    }
25}
26
27impl InheritedVersionChecker for FileSystemManifestWriter {
28    fn has_inherited_version(&self, manifest_path: &Path) -> Result<bool> {
29        Ok(changeset_manifest::has_inherited_version(manifest_path)?)
30    }
31}
32
33impl ManifestVersionWriter for FileSystemManifestWriter {
34    fn write_version(&self, manifest_path: &Path, new_version: &Version) -> Result<()> {
35        Ok(changeset_manifest::write_version(
36            manifest_path,
37            new_version,
38        )?)
39    }
40
41    fn verify_version(&self, manifest_path: &Path, expected: &Version) -> Result<()> {
42        Ok(changeset_manifest::verify_version(manifest_path, expected)?)
43    }
44}
45
46impl ManifestDependencyWriter for FileSystemManifestWriter {
47    fn update_dependency_version(
48        &self,
49        manifest_path: &Path,
50        dependency_name: &str,
51        new_version: &Version,
52    ) -> Result<bool> {
53        Ok(changeset_manifest::update_dependency_version(
54            manifest_path,
55            dependency_name,
56            new_version,
57        )?)
58    }
59}
60
61impl WorkspaceVersionManager for FileSystemManifestWriter {
62    fn read_workspace_version(&self, manifest_path: &Path) -> Result<Option<Version>> {
63        match changeset_manifest::read_workspace_version(manifest_path) {
64            Ok(version) => Ok(Some(version)),
65            Err(changeset_manifest::ManifestError::MissingField { .. }) => Ok(None),
66            Err(e) => Err(e.into()),
67        }
68    }
69
70    fn remove_workspace_version(&self, manifest_path: &Path) -> Result<()> {
71        Ok(changeset_manifest::remove_workspace_version(manifest_path)?)
72    }
73
74    fn write_workspace_version(&self, manifest_path: &Path, version: &Version) -> Result<()> {
75        Ok(changeset_manifest::write_workspace_version(
76            manifest_path,
77            version,
78        )?)
79    }
80}
81
82impl ManifestMetadataWriter for FileSystemManifestWriter {
83    fn write_metadata(
84        &self,
85        manifest_path: &Path,
86        section: MetadataSection,
87        config: &InitConfig,
88    ) -> Result<()> {
89        Ok(changeset_manifest::write_metadata_section(
90            manifest_path,
91            section,
92            config,
93        )?)
94    }
95}