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