Skip to content

Commit d1a9437

Browse files
committed
revert: rm L on Scrollable; use Deref<Target=[L]> instead AsRef<[T]> as the bound
1 parent c2b939c commit d1a9437

File tree

5 files changed

+30
-22
lines changed

5 files changed

+30
-22
lines changed

src/bin/ui/scrollable/interaction.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
use super::Scrollable;
22
use crate::ui::ScrollOffset;
3+
use std::ops::Deref;
34
use term_rustdoc::tree::TreeLine;
45

56
/// Scrolling
6-
impl<Lines: AsRef<[TreeLine]>> Scrollable<Lines, TreeLine> {
7+
impl<Lines: Deref<Target = [TreeLine]>> Scrollable<Lines> {
78
pub fn scrolldown(&mut self, offset: ScrollOffset) {
89
let height = self.area.height as usize;
910
let len = self.len();
@@ -48,7 +49,7 @@ impl<Lines: AsRef<[TreeLine]>> Scrollable<Lines, TreeLine> {
4849
}
4950

5051
/// Cursor movement
51-
impl<Lines: AsRef<[TreeLine]>> Scrollable<Lines, TreeLine> {
52+
impl<Lines: Deref<Target = [TreeLine]>> Scrollable<Lines> {
5253
pub fn move_forward_cursor(&mut self) {
5354
let height = self.area.height;
5455
let reach_sceen_bottom = (self.cursor + 1) == height;

src/bin/ui/scrollable/markdown/mod.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
use super::Scrollable;
22
use ratatui::layout::Rect;
3-
use std::fmt;
3+
use std::{fmt, ops::Deref};
44
use term_rustdoc::tree::Text as StyledText;
55

66
mod parse;
77

88
/// Scrollable text area for displaying markdown.
9-
pub type ScrollText = Scrollable<StyledLines, StyledLine>;
9+
pub type ScrollText = Scrollable<StyledLines>;
1010

1111
pub struct StyledLine {
1212
line: Vec<StyledText>,
@@ -31,8 +31,10 @@ impl fmt::Debug for StyledLines {
3131
}
3232
}
3333

34-
impl AsRef<[StyledLine]> for StyledLines {
35-
fn as_ref(&self) -> &[StyledLine] {
34+
impl Deref for StyledLines {
35+
type Target = [StyledLine];
36+
37+
fn deref(&self) -> &Self::Target {
3638
&self.lines
3739
}
3840
}

src/bin/ui/scrollable/mod.rs

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use super::Selected;
22
use crate::{err, Result};
33
use ratatui::prelude::Rect;
4-
use std::{fmt, marker::PhantomData};
4+
use std::{fmt, ops::Deref};
55
use term_rustdoc::tree::{TreeLine, TreeLines};
66

77
mod interaction;
@@ -11,10 +11,10 @@ mod render;
1111
pub use self::markdown::ScrollText;
1212

1313
/// Scrollable tree view but stored in lines.
14-
pub type ScrollTreeLines = Scrollable<TreeLines, TreeLine>;
14+
pub type ScrollTreeLines = Scrollable<TreeLines>;
1515

1616
/// A text panel that can be scrolled and select texts when the cursor is inside of it.
17-
pub struct Scrollable<Lines, L> {
17+
pub struct Scrollable<Lines> {
1818
/// Styled texts on each line
1919
pub lines: Lines,
2020
/// The start of row to be displayed
@@ -27,17 +27,16 @@ pub struct Scrollable<Lines, L> {
2727
pub select: Option<Selected>,
2828
/// The widget area, usually not the full screen
2929
pub area: Rect,
30-
_ph: PhantomData<L>,
3130
}
3231

33-
impl<Lines, L> Scrollable<Lines, L> {
32+
impl<Lines> Scrollable<Lines> {
3433
/// The index the current cursor on screen points to.
3534
pub fn idx_of_current_cursor(&self) -> usize {
3635
self.cursor as usize + self.start
3736
}
3837
}
3938

40-
impl<L, Lines: AsRef<[L]>> Scrollable<Lines, L> {
39+
impl<L, Lines: Deref<Target = [L]>> Scrollable<Lines> {
4140
pub fn lines(&self) -> &[L] {
4241
self.lines.as_ref()
4342
}
@@ -47,22 +46,21 @@ impl<L, Lines: AsRef<[L]>> Scrollable<Lines, L> {
4746
}
4847
}
4948

50-
impl<Lines: Default, L> Default for Scrollable<Lines, L> {
49+
impl<Lines: Default> Default for Scrollable<Lines> {
5150
fn default() -> Self {
52-
let (lines, start, cursor, max_windth, select, area, _ph) = Default::default();
51+
let (lines, start, cursor, max_windth, select, area) = Default::default();
5352
Scrollable {
5453
lines,
5554
start,
5655
cursor,
5756
max_windth,
5857
select,
5958
area,
60-
_ph,
6159
}
6260
}
6361
}
6462

65-
impl<Lines: Default + AsRef<[TreeLine]>> Scrollable<Lines, TreeLine> {
63+
impl<Lines: Deref<Target = [TreeLine]>> Scrollable<Lines> {
6664
pub fn new(lines: Lines, full: Rect) -> Result<Self> {
6765
let w = lines.as_ref().iter().map(TreeLine::width).max();
6866
let max_windth = w.ok_or_else(|| err!("The documentation is empty with no items."))?;
@@ -72,16 +70,20 @@ impl<Lines: Default + AsRef<[TreeLine]>> Scrollable<Lines, TreeLine> {
7270
max_windth, "Outline width exceeds the area width, so lines may be truncated."
7371
);
7472
}
73+
74+
let (start, cursor, select) = Default::default();
7575
Ok(Self {
7676
lines,
7777
max_windth,
7878
area: full,
79-
..Default::default()
79+
start,
80+
cursor,
81+
select,
8082
})
8183
}
8284
}
8385

84-
impl<L, Lines: AsRef<[L]>> fmt::Debug for Scrollable<Lines, L> {
86+
impl<L, Lines: Deref<Target = [L]>> fmt::Debug for Scrollable<Lines> {
8587
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
8688
let mut s = f.debug_struct("Scrollable");
8789
s.field("lines.len", &self.len())

src/bin/ui/scrollable/render.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
use super::Scrollable;
22
use ratatui::prelude::{Buffer, Color, Rect, Widget};
3+
use std::ops::Deref;
34
use term_rustdoc::tree::TreeLine;
45

5-
impl<Lines: AsRef<[TreeLine]>> Widget for &mut Scrollable<Lines, TreeLine> {
6+
impl<Lines: Deref<Target = [TreeLine]>> Widget for &mut Scrollable<Lines> {
67
fn render(self, area: Rect, buf: &mut Buffer) {
78
// render tree by each line
89
write_lines(self.lines.as_ref(), self.start, area, buf);

src/tree/textline.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,9 +176,11 @@ impl TreeLines {
176176
}
177177
}
178178

179-
impl AsRef<[TreeLine]> for TreeLines {
180-
fn as_ref(&self) -> &[TreeLine] {
181-
self.lines()
179+
impl std::ops::Deref for TreeLines {
180+
type Target = [TreeLine];
181+
182+
fn deref(&self) -> &Self::Target {
183+
&self.tree
182184
}
183185
}
184186

0 commit comments

Comments
 (0)