Skip to main content

changeset_operations/traits/
manage_interaction.rs

1use changeset_core::PackageInfo;
2
3use crate::Result;
4
5#[derive(Debug, Clone, PartialEq, Eq)]
6pub enum PrereleaseAction {
7    Add,
8    Remove,
9    Graduate,
10    Done,
11}
12
13#[derive(Debug, Clone, PartialEq, Eq)]
14pub enum GraduationAction {
15    Add,
16    Remove,
17    Done,
18}
19
20#[derive(Debug, Clone, PartialEq, Eq)]
21pub enum MenuSelection<T> {
22    Selected(T),
23    Cancelled,
24}
25
26/// Provides user interaction for prerelease management workflows.
27///
28/// All methods propagate interaction errors from the underlying implementation.
29#[allow(clippy::missing_errors_doc)]
30pub trait PrereleaseInteractionProvider: Send + Sync {
31    fn select_prerelease_action(&self) -> Result<MenuSelection<PrereleaseAction>>;
32
33    fn select_package_for_prerelease(
34        &self,
35        available: &[&PackageInfo],
36    ) -> Result<MenuSelection<usize>>;
37
38    fn get_prerelease_tag(&self) -> Result<String>;
39
40    /// Presents the list of prerelease packages for removal selection.
41    /// Each item is a `(package_name, prerelease_tag)` pair; the
42    /// implementation decides how to display them.
43    fn select_package_to_remove_prerelease(
44        &self,
45        items: &[(&str, &str)],
46    ) -> Result<MenuSelection<usize>>;
47}
48
49/// Provides user interaction for graduation management workflows.
50///
51/// All methods propagate interaction errors from the underlying implementation.
52#[allow(clippy::missing_errors_doc)]
53pub trait GraduationInteractionProvider: Send + Sync {
54    fn select_graduation_action(&self) -> Result<MenuSelection<GraduationAction>>;
55
56    fn select_package_for_graduation(
57        &self,
58        eligible: &[&PackageInfo],
59    ) -> Result<MenuSelection<usize>>;
60
61    fn select_package_to_remove_graduation(&self, items: &[String])
62    -> Result<MenuSelection<usize>>;
63}