#![forbid(unsafe_code)]
#![deny(missing_docs)]
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct TerminalSize {
pub cols: u16,
pub rows: u16,
}
impl TerminalSize {
#[must_use]
pub const fn new(cols: u16, rows: u16) -> Self {
Self { cols, rows }
}
#[must_use]
pub const fn into_geometry(self) -> TerminalGeometry {
TerminalGeometry::from_size(self)
}
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct TerminalPixels {
pub width: u16,
pub height: u16,
}
impl TerminalPixels {
#[must_use]
pub const fn new(width: u16, height: u16) -> Self {
Self { width, height }
}
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct TerminalGeometry {
pub size: TerminalSize,
pub pixels: Option<TerminalPixels>,
}
impl TerminalGeometry {
#[must_use]
pub const fn new(cols: u16, rows: u16) -> Self {
Self {
size: TerminalSize::new(cols, rows),
pixels: None,
}
}
#[must_use]
pub const fn from_size(size: TerminalSize) -> Self {
Self { size, pixels: None }
}
#[must_use]
pub const fn with_pixels(mut self, pixels: TerminalPixels) -> Self {
self.pixels = Some(pixels);
self
}
}