use crate::resources::InlineImageProtocol;
pub mod iterm2;
pub mod kitty;
#[cfg(feature = "sixel")]
pub mod sixel;
pub mod terminology;
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum StyleCapability {
Ansi,
}
#[derive(Debug, Copy, Clone)]
pub enum MarkCapability {
ITerm2(iterm2::ITerm2Protocol),
}
#[derive(Debug, Copy, Clone)]
pub enum ImageCapability {
Terminology(terminology::Terminology),
ITerm2(iterm2::ITerm2Protocol),
Kitty(kitty::KittyGraphicsProtocol),
#[cfg(feature = "sixel")]
Sixel(sixel::SixelProtocol),
}
impl ImageCapability {
pub(crate) fn image_protocol(&self) -> &dyn InlineImageProtocol {
match self {
ImageCapability::Terminology(t) => t,
ImageCapability::ITerm2(t) => t,
ImageCapability::Kitty(t) => t,
#[cfg(feature = "sixel")]
ImageCapability::Sixel(t) => t,
}
}
}
#[derive(Debug)]
pub struct TerminalCapabilities {
pub style: Option<StyleCapability>,
pub image: Option<ImageCapability>,
pub marks: Option<MarkCapability>,
}
impl Default for TerminalCapabilities {
fn default() -> Self {
TerminalCapabilities {
style: None,
image: None,
marks: None,
}
}
}
impl TerminalCapabilities {
pub(crate) fn with_image_capability(mut self, cap: ImageCapability) -> Self {
self.image = Some(cap);
self
}
pub(crate) fn with_mark_capability(mut self, cap: MarkCapability) -> Self {
self.marks = Some(cap);
self
}
}