#![cfg_attr(feature = "std", doc = "```")]
#![cfg_attr(not(feature = "std"), doc = "```ignore")]
use crate::{
grid::{
config::{CompactConfig, CompactMultilineConfig},
config::{Indent, Sides},
},
settings::TableOption,
};
#[cfg(feature = "std")]
use crate::{
grid::{config::ColoredConfig, config::Entity},
settings::padding_expand::PaddingExpand,
settings::CellOption,
};
#[cfg_attr(feature = "std", doc = "```")]
#[cfg_attr(not(feature = "std"), doc = "```ignore")]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub struct Padding {
indent: Sides<Indent>,
}
impl Padding {
pub const fn new(left: usize, right: usize, top: usize, bottom: usize) -> Self {
Self {
indent: Sides::new(
Indent::spaced(left),
Indent::spaced(right),
Indent::spaced(top),
Indent::spaced(bottom),
),
}
}
pub const fn zero() -> Self {
Self::new(0, 0, 0, 0)
}
pub const fn fill(mut self, left: char, right: char, top: char, bottom: char) -> Self {
self.indent.left.fill = left;
self.indent.right.fill = right;
self.indent.top.fill = top;
self.indent.bottom.fill = bottom;
self
}
#[cfg(feature = "std")]
pub const fn expand(horizontal: bool) -> PaddingExpand {
if horizontal {
PaddingExpand::Horizontal
} else {
PaddingExpand::Vertical
}
}
}
#[cfg(feature = "std")]
impl<R> CellOption<R, ColoredConfig> for Padding {
fn change(self, _: &mut R, cfg: &mut ColoredConfig, entity: Entity) {
let indent = self.indent;
let pad = Sides::new(indent.left, indent.right, indent.top, indent.bottom);
cfg.set_padding(entity, pad);
}
}
#[cfg(feature = "std")]
impl<R, D> TableOption<R, ColoredConfig, D> for Padding {
fn change(self, records: &mut R, cfg: &mut ColoredConfig, _: &mut D) {
<Self as CellOption<R, ColoredConfig>>::change(self, records, cfg, Entity::Global)
}
}
impl<R, D> TableOption<R, CompactConfig, D> for Padding {
fn change(self, _: &mut R, cfg: &mut CompactConfig, _: &mut D) {
*cfg = cfg.set_padding(self.indent);
}
}
impl<R, D> TableOption<R, CompactMultilineConfig, D> for Padding {
fn change(self, _: &mut R, cfg: &mut CompactMultilineConfig, _: &mut D) {
cfg.set_padding(self.indent);
}
}