changeset_operations/traits/
manifest_writer.rs1use 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
11 + ManifestDependencyWriter
12 + WorkspaceVersionManager
13 + InheritedVersionChecker
14 + LockfileUpdater
15{
16}
17impl<
18 T: ManifestVersionWriter
19 + ManifestDependencyWriter
20 + WorkspaceVersionManager
21 + InheritedVersionChecker
22 + LockfileUpdater,
23> FullManifestWriter for T
24{
25}
26
27pub trait ManifestVersionWriter: Send + Sync {
28 fn write_version(&self, manifest_path: &Path, new_version: &Version) -> Result<()>;
32
33 fn verify_version(&self, manifest_path: &Path, expected: &Version) -> Result<()>;
37}
38
39pub trait ManifestDependencyWriter: Send + Sync {
40 fn update_dependency_version(
44 &self,
45 manifest_path: &Path,
46 dependency_name: &str,
47 new_version: &Version,
48 ) -> Result<bool>;
49}
50
51pub trait WorkspaceVersionManager: Send + Sync {
52 fn read_workspace_version(&self, manifest_path: &Path) -> Result<Option<Version>>;
58
59 fn remove_workspace_version(&self, manifest_path: &Path) -> Result<()>;
63
64 fn write_workspace_version(&self, manifest_path: &Path, version: &Version) -> Result<()>;
68}
69
70pub trait LockfileUpdater: Send + Sync {
71 fn update_lockfile(&self, project_root: &Path) -> Result<()>;
75
76 fn read_lockfile(&self, project_root: &Path) -> Result<Option<Vec<u8>>>;
80
81 fn restore_lockfile(&self, project_root: &Path, content: &[u8]) -> Result<()>;
85
86 fn remove_lockfile(&self, project_root: &Path) -> Result<()>;
90}
91
92pub trait ManifestMetadataWriter: Send + Sync {
93 fn write_metadata(
97 &self,
98 manifest_path: &Path,
99 section: MetadataSection,
100 config: &InitConfig,
101 ) -> Result<()>;
102}