Skip to main content

excel_cli/actions/
types.rs

1#[derive(Clone, Debug)]
2pub enum ActionType {
3    Edit,
4    Cut,
5    Paste,
6    CreateSheet,
7    DeleteRow,
8    DeleteColumn,
9    DeleteSheet,
10    DeleteMultiRows,
11    DeleteMultiColumns,
12}
13
14// Executor for actions in the application
15pub trait ActionExecutor {
16    fn execute_action(&mut self, action: &ActionCommand) -> Result<(), anyhow::Error>;
17    fn execute_cell_action(
18        &mut self,
19        action: &crate::actions::CellAction,
20    ) -> Result<(), anyhow::Error>;
21    fn execute_row_action(
22        &mut self,
23        action: &crate::actions::RowAction,
24    ) -> Result<(), anyhow::Error>;
25    fn execute_column_action(
26        &mut self,
27        action: &crate::actions::ColumnAction,
28    ) -> Result<(), anyhow::Error>;
29    fn execute_sheet_action(
30        &mut self,
31        action: &crate::actions::SheetAction,
32    ) -> Result<(), anyhow::Error>;
33    fn execute_multi_row_action(
34        &mut self,
35        action: &crate::actions::MultiRowAction,
36    ) -> Result<(), anyhow::Error>;
37    fn execute_multi_column_action(
38        &mut self,
39        action: &crate::actions::MultiColumnAction,
40    ) -> Result<(), anyhow::Error>;
41}
42
43// Command interface for actions that can be executed and undone
44pub trait Command {
45    fn execute(&self) -> anyhow::Result<()>;
46    fn undo(&self) -> anyhow::Result<()>;
47    fn action_type(&self) -> ActionType;
48}
49
50// Unified action command enum for all action types
51#[derive(Clone)]
52pub enum ActionCommand {
53    Cell(crate::actions::CellAction),
54    Row(crate::actions::RowAction),
55    Column(crate::actions::ColumnAction),
56    Sheet(crate::actions::SheetAction),
57    MultiRow(crate::actions::MultiRowAction),
58    MultiColumn(crate::actions::MultiColumnAction),
59}