use bcode_session_models::SessionId;
#[cfg(test)]
pub(crate) mod tests;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PresentationAction {
SubmitMessage,
PrepareSubmissionResume,
ResumeSubmission,
CancelPendingSubmission,
CancelTurn,
UpdateDraft { session_id: SessionId },
ResolvePermission,
ResolvePermissionBatch,
MoveHistoryWindow,
ResolveInteraction,
}
pub trait PresentationContext {
fn action_target(&self, action: PresentationAction) -> String;
fn session_target(&self, session_id: SessionId) -> String;
fn artifact_target(
&self,
session_id: SessionId,
artifact_id: &str,
reference_key: &str,
) -> Option<String>;
}
#[derive(Debug, Default, Clone, Copy)]
pub struct StaticPresentationContext;
impl PresentationContext for StaticPresentationContext {
fn action_target(&self, action: PresentationAction) -> String {
match action {
PresentationAction::SubmitMessage => "/actions/submit-message".to_owned(),
PresentationAction::PrepareSubmissionResume => {
"/actions/prepare-submission-resume".to_owned()
}
PresentationAction::ResumeSubmission => "/actions/resume-submission".to_owned(),
PresentationAction::CancelPendingSubmission => {
"/actions/cancel-pending-submission".to_owned()
}
PresentationAction::CancelTurn => "/actions/cancel-turn".to_owned(),
PresentationAction::UpdateDraft { session_id } => {
format!("/actions/update-draft/{session_id}")
}
PresentationAction::ResolvePermission => "/actions/permission".to_owned(),
PresentationAction::ResolvePermissionBatch => "/actions/permission-batch".to_owned(),
PresentationAction::MoveHistoryWindow => "/actions/history-window".to_owned(),
PresentationAction::ResolveInteraction => "/actions/interaction".to_owned(),
}
}
fn session_target(&self, session_id: SessionId) -> String {
format!("/session/{session_id}")
}
fn artifact_target(
&self,
_session_id: SessionId,
_artifact_id: &str,
_reference_key: &str,
) -> Option<String> {
None
}
}