changeset_operations/providers/
manifest.rs1use 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}