term-rustdoc 0.2.0

A TUI for Rust docs.
Documentation
use ratatui::style::Style;
use std::fmt;
use term_rustdoc::{tree::Text, util::XString};
use unicode_width::UnicodeWidthStr;

pub struct StyledText {
    text: Text,
    span: ColumnSpan,
}

#[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub struct ColumnSpan {
    start: usize,
    end: usize,
}

impl ColumnSpan {
    pub fn span(self) -> [usize; 2] {
        [self.start, self.end]
    }
}

impl fmt::Debug for StyledText {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        <str as fmt::Debug>::fmt(self.as_str(), f)
    }
}

impl StyledText {
    pub fn new<T: Into<XString>>(text: T, style: Style, start: usize) -> Self {
        let text = text.into();
        let end = start + text.width();
        StyledText {
            text: Text { text, style },
            span: ColumnSpan { start, end },
        }
    }

    pub fn text(&self) -> XString {
        self.text.text.clone()
    }

    pub fn as_str(&self) -> &str {
        &self.text.text
    }

    pub fn style(&self) -> Style {
        self.text.style
    }

    pub fn span_end(&self) -> usize {
        self.span.end
    }

    pub fn span(&self) -> ColumnSpan {
        self.span.clone()
    }

    pub fn remove_trailing_whitespace(&mut self) -> bool {
        if let Some(last) = self.text.text.pop() {
            if last == ' ' {
                return true;
            }
            self.text.text.push(last);
        }
        false
    }
}