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::{InheritedVersionChecker, ManifestWriter};
8
9pub struct FileSystemManifestWriter;
10
11impl FileSystemManifestWriter {
12    #[must_use]
13    pub fn new() -> Self {
14        Self
15    }
16}
17
18impl Default for FileSystemManifestWriter {
19    fn default() -> Self {
20        Self::new()
21    }
22}
23
24impl InheritedVersionChecker for FileSystemManifestWriter {
25    fn has_inherited_version(&self, manifest_path: &Path) -> Result<bool> {
26        Ok(changeset_manifest::has_inherited_version(manifest_path)?)
27    }
28}
29
30impl ManifestWriter for FileSystemManifestWriter {
31    fn write_version(&self, manifest_path: &Path, new_version: &Version) -> Result<()> {
32        Ok(changeset_manifest::write_version(
33            manifest_path,
34            new_version,
35        )?)
36    }
37
38    fn remove_workspace_version(&self, manifest_path: &Path) -> Result<()> {
39        Ok(changeset_manifest::remove_workspace_version(manifest_path)?)
40    }
41
42    fn read_workspace_version(&self, manifest_path: &Path) -> Result<Option<Version>> {
43        match changeset_manifest::read_workspace_version(manifest_path) {
44            Ok(version) => Ok(Some(version)),
45            Err(changeset_manifest::ManifestError::MissingField { .. }) => Ok(None),
46            Err(e) => Err(e.into()),
47        }
48    }
49
50    fn write_workspace_version(&self, manifest_path: &Path, version: &Version) -> Result<()> {
51        Ok(changeset_manifest::write_workspace_version(
52            manifest_path,
53            version,
54        )?)
55    }
56
57    fn verify_version(&self, manifest_path: &Path, expected: &Version) -> Result<()> {
58        Ok(changeset_manifest::verify_version(manifest_path, expected)?)
59    }
60
61    fn write_metadata(
62        &self,
63        manifest_path: &Path,
64        section: MetadataSection,
65        config: &InitConfig,
66    ) -> Result<()> {
67        Ok(changeset_manifest::write_metadata_section(
68            manifest_path,
69            section,
70            config,
71        )?)
72    }
73}