Skip to main content

changeset_operations/traits/
manifest_writer.rs

1use std::path::Path;
2
3use changeset_manifest::{InitConfig, MetadataSection};
4use semver::Version;
5
6use crate::Result;
7use crate::traits::InheritedVersionChecker;
8
9pub trait FullManifestWriter:
10    ManifestVersionWriter + ManifestDependencyWriter + WorkspaceVersionManager + InheritedVersionChecker
11{
12}
13impl<
14    T: ManifestVersionWriter
15        + ManifestDependencyWriter
16        + WorkspaceVersionManager
17        + InheritedVersionChecker,
18> FullManifestWriter for T
19{
20}
21
22pub trait ManifestVersionWriter: Send + Sync {
23    /// # Errors
24    ///
25    /// Propagates manifest write errors.
26    fn write_version(&self, manifest_path: &Path, new_version: &Version) -> Result<()>;
27
28    /// # Errors
29    ///
30    /// Propagates manifest read/verification errors.
31    fn verify_version(&self, manifest_path: &Path, expected: &Version) -> Result<()>;
32}
33
34pub trait ManifestDependencyWriter: Send + Sync {
35    /// # Errors
36    ///
37    /// Propagates manifest read/write errors.
38    fn update_dependency_version(
39        &self,
40        manifest_path: &Path,
41        dependency_name: &str,
42        new_version: &Version,
43    ) -> Result<bool>;
44}
45
46pub trait WorkspaceVersionManager: Send + Sync {
47    /// Returns `Ok(None)` if the workspace version field is not present.
48    ///
49    /// # Errors
50    ///
51    /// Propagates manifest read errors.
52    fn read_workspace_version(&self, manifest_path: &Path) -> Result<Option<Version>>;
53
54    /// # Errors
55    ///
56    /// Propagates manifest write errors.
57    fn remove_workspace_version(&self, manifest_path: &Path) -> Result<()>;
58
59    /// # Errors
60    ///
61    /// Propagates manifest write errors.
62    fn write_workspace_version(&self, manifest_path: &Path, version: &Version) -> Result<()>;
63}
64
65pub trait ManifestMetadataWriter: Send + Sync {
66    /// # Errors
67    ///
68    /// Propagates manifest write errors.
69    fn write_metadata(
70        &self,
71        manifest_path: &Path,
72        section: MetadataSection,
73        config: &InitConfig,
74    ) -> Result<()>;
75}