papergrid/records/
peekable_records.rs

1use crate::config::Position;
2
3/// The representation of data, rows and columns of a grid.
4pub trait PeekableRecords {
5    /// Returns a text of a cell by an index.
6    fn get_text(&self, pos: Position) -> &str;
7
8    /// Returns a line of a text of a cell by an index.
9    fn get_line(&self, pos: Position, line: usize) -> &str {
10        self.get_text(pos).lines().nth(line).unwrap()
11    }
12
13    /// Returns an amount of lines of a text of a cell by an index.
14    fn count_lines(&self, pos: Position) -> usize {
15        self.get_text(pos).lines().count()
16    }
17
18    /// Returns a width of a text of a cell by an index.
19    fn get_width(&self, pos: Position) -> usize {
20        crate::util::string::get_text_width(self.get_text(pos))
21    }
22
23    /// Returns a width of line of a text of a cell by an index.
24    fn get_line_width(&self, pos: Position, line: usize) -> usize {
25        crate::util::string::get_line_width(self.get_line(pos, line))
26    }
27}
28
29impl<R> PeekableRecords for &R
30where
31    R: PeekableRecords,
32{
33    fn get_text(&self, pos: Position) -> &str {
34        R::get_text(self, pos)
35    }
36
37    fn get_line(&self, pos: Position, line: usize) -> &str {
38        R::get_line(self, pos, line)
39    }
40
41    fn count_lines(&self, pos: Position) -> usize {
42        R::count_lines(self, pos)
43    }
44
45    fn get_width(&self, pos: Position) -> usize {
46        R::get_width(self, pos)
47    }
48
49    fn get_line_width(&self, pos: Position, line: usize) -> usize {
50        R::get_line_width(self, pos, line)
51    }
52}