use keyboard_types::Code as KeyCode;
use crate::runtime::delete::DeleteSelectionError;
use crate::runtime::drag::NodeNudgeRequest;
use crate::runtime::store::{DispatchError, DispatchOutcome};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum KeyboardIntent {
DeleteSelection,
DeleteSelectionForKey(KeyCode),
NudgeSelection(NodeNudgeRequest),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum KeyboardDeleteAction {
ExplicitSelectionDelete,
KeyBoundSelectionDelete(KeyCode),
}
#[derive(Debug, Clone)]
pub enum KeyboardActionOutcome {
DeleteSelection {
action: KeyboardDeleteAction,
dispatch: DispatchOutcome,
},
NudgeSelection {
request: NodeNudgeRequest,
dispatch: DispatchOutcome,
},
}
#[derive(Debug, thiserror::Error)]
pub enum KeyboardActionError {
#[error("delete selection keyboard action failed: {0}")]
DeleteSelection(#[from] DeleteSelectionError),
#[error("nudge selection keyboard action failed: {0}")]
NudgeSelection(#[from] DispatchError),
}
impl KeyboardActionOutcome {
pub fn dispatch(&self) -> &DispatchOutcome {
match self {
Self::DeleteSelection { dispatch, .. } | Self::NudgeSelection { dispatch, .. } => {
dispatch
}
}
}
}