use crate::Error;
use crate::exec::ExecStatusEvent;
use crate::tui_v1::{PrintEvent, PromptParams};
use derive_more::derive::From;
use std::sync::Arc;
#[derive(Debug, From)]
pub enum HubEvent {
Message(Arc<str>),
InfoShort(Arc<str>),
Error {
error: Arc<Error>,
},
#[from]
Executor(ExecStatusEvent),
LuaPrint(Arc<str>),
Print(Arc<PrintEvent>),
Prompt(PromptParams),
RtModelChange,
DoExecRedo,
Quit,
}
impl HubEvent {
pub fn info_short(msg: impl Into<String>) -> Self {
HubEvent::InfoShort(msg.into().into())
}
}
impl<T> From<T> for HubEvent
where
T: Into<PrintEvent>,
{
fn from(p: T) -> Self {
HubEvent::Print(Arc::new(p.into()))
}
}
impl From<String> for HubEvent {
fn from(s: String) -> Self {
HubEvent::Message(s.into())
}
}
impl From<&str> for HubEvent {
fn from(s: &str) -> Self {
HubEvent::Message(s.into())
}
}
impl From<&String> for HubEvent {
fn from(s: &String) -> Self {
HubEvent::Message(s.as_str().into())
}
}
impl From<Error> for HubEvent {
fn from(e: Error) -> Self {
HubEvent::Error { error: Arc::new(e) }
}
}