Skip to content

Commit 283249b

Browse files
committed
feat(tui-big-text)!: make BigText builder infallible
BigTextBuilder.build() no longer returns a Result. Instead it returns the BigText widget directly. This change is made to simplify rendering code which often otherwise doesn't have any error conditions. BREAKING CHANGE: BigTextBuilder.build() no longer returns a Result. Remove the `?` / `expect` / `unwrap` calls code which calls the build method. ```diff let big_text = BigText::builder() .lines(vec![Line::from("SingleLine")]) - .build()?; + .build(); ```
1 parent fd88898 commit 283249b

File tree

8 files changed

+113
-140
lines changed

8 files changed

+113
-140
lines changed

tui-big-text/README.md

+2-3
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ use anyhow::Result;
3535
use ratatui::prelude::*;
3636
use tui_big_text::{BigText, PixelSize};
3737

38-
fn render(frame: &mut Frame) -> Result<()> {
38+
fn render(frame: &mut Frame) {
3939
let big_text = BigText::builder()
4040
.pixel_size(PixelSize::Full)
4141
.style(Style::new().blue())
@@ -44,9 +44,8 @@ fn render(frame: &mut Frame) -> Result<()> {
4444
"World".white().into(),
4545
"~~~~~".into(),
4646
])
47-
.build()?;
47+
.build();
4848
frame.render_widget(big_text, frame.size());
49-
Ok(())
5049
}
5150
```
5251

tui-big-text/examples/alignment.rs

+4-6
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ fn main() -> Result<()> {
1414
Ok(())
1515
}
1616

17-
fn render(frame: &mut Frame) -> Result<()> {
17+
fn render(frame: &mut Frame) {
1818
let title = Line::from("tui-big-text alignment demo. Press 'q' to quit")
1919
.cyan()
2020
.centered();
@@ -23,19 +23,19 @@ fn render(frame: &mut Frame) -> Result<()> {
2323
.pixel_size(PixelSize::Quadrant)
2424
.left_aligned()
2525
.lines(vec!["Left".white().into()])
26-
.build()?;
26+
.build();
2727

2828
let right = BigText::builder()
2929
.pixel_size(PixelSize::Quadrant)
3030
.right_aligned()
3131
.lines(vec!["Right".green().into()])
32-
.build()?;
32+
.build();
3333

3434
let centered = BigText::builder()
3535
.pixel_size(PixelSize::Quadrant)
3636
.centered()
3737
.lines(vec!["Centered".red().into()])
38-
.build()?;
38+
.build();
3939

4040
let area = frame.size();
4141
frame.render_widget(title, area);
@@ -44,6 +44,4 @@ fn render(frame: &mut Frame) -> Result<()> {
4444
frame.render_widget(left, area);
4545
frame.render_widget(right, area);
4646
frame.render_widget(centered, area);
47-
48-
Ok(())
4947
}

tui-big-text/examples/big_text.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ fn main() -> Result<()> {
1414
Ok(())
1515
}
1616

17-
fn render(frame: &mut Frame) -> Result<()> {
17+
fn render(frame: &mut Frame) {
1818
let title = Line::from("tui-big-text Demo. Press 'q' to quit").cyan();
1919

2020
let big_text = BigText::builder()
@@ -24,12 +24,11 @@ fn render(frame: &mut Frame) -> Result<()> {
2424
"big-".white().into(),
2525
"text".into(),
2626
])
27-
.build()?;
27+
.build();
2828

2929
let area = frame.size();
3030
frame.render_widget(title, area);
3131

3232
let area = area.offset(Offset { x: 0, y: 2 }).intersection(area);
3333
frame.render_widget(big_text, area);
34-
Ok(())
3534
}

tui-big-text/examples/common/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ type Terminal = ratatui::Terminal<CrosstermBackend<io::Stdout>>;
1616
/// user presses 'q' or 'Esc'
1717
pub fn run<F>(render: F) -> Result<()>
1818
where
19-
F: Fn(&mut ratatui::Frame) -> Result<()>,
19+
F: Fn(&mut ratatui::Frame),
2020
{
2121
install_panic_handler();
2222

2323
with_terminal(|mut terminal| loop {
24-
terminal.draw(|frame| render(frame).expect("failed to render"))?;
24+
terminal.draw(|frame| render(frame))?;
2525
if let crossterm::event::Event::Key(event) = crossterm::event::read()? {
2626
if matches!(
2727
event.code,

tui-big-text/examples/pixel_size.rs

+7-9
Original file line numberDiff line numberDiff line change
@@ -10,40 +10,40 @@ fn main() -> Result<()> {
1010
Ok(())
1111
}
1212

13-
fn render(frame: &mut Frame) -> Result<()> {
13+
fn render(frame: &mut Frame) {
1414
let title = Line::from("tui-big-text pixel size demo. Press 'q' to quit")
1515
.centered()
1616
.cyan();
1717

1818
let full_size_text = BigText::builder()
1919
.pixel_size(PixelSize::Full)
2020
.lines(vec!["FullSize".white().into()])
21-
.build()?;
21+
.build();
2222

2323
let half_height_text = BigText::builder()
2424
.pixel_size(PixelSize::HalfHeight)
2525
.lines(vec!["1/2 high".green().into()])
26-
.build()?;
26+
.build();
2727

2828
let half_wide_text = BigText::builder()
2929
.pixel_size(PixelSize::HalfWidth)
3030
.lines(vec!["1/2 wide".red().into()])
31-
.build()?;
31+
.build();
3232

3333
let quadrant_text = BigText::builder()
3434
.pixel_size(PixelSize::Quadrant)
3535
.lines(vec!["Quadrant".blue().into(), " 1/2*1/2".blue().into()])
36-
.build()?;
36+
.build();
3737

3838
let third_text = BigText::builder()
3939
.pixel_size(PixelSize::ThirdHeight)
4040
.lines(vec!["1/3".yellow().into(), "high".yellow().into()])
41-
.build()?;
41+
.build();
4242

4343
let sextant_text = BigText::builder()
4444
.pixel_size(PixelSize::Sextant)
4545
.lines(vec!["Sextant".cyan().into(), " 1/2*1/3".cyan().into()])
46-
.build()?;
46+
.build();
4747

4848
// Setup layout for the title and 6 blocks
4949
use Constraint::*;
@@ -60,6 +60,4 @@ fn render(frame: &mut Frame) -> Result<()> {
6060
frame.render_widget(quadrant_text, quadrant);
6161
frame.render_widget(third_text, third_height);
6262
frame.render_widget(sextant_text, sextant);
63-
64-
Ok(())
6563
}

tui-big-text/examples/stopwatch.rs

+1-5
Original file line numberDiff line numberDiff line change
@@ -142,11 +142,7 @@ impl StopwatchApp {
142142
};
143143
let duration = format_duration(self.elapsed());
144144
let lines = vec![duration.into()];
145-
BigText::builder()
146-
.lines(lines)
147-
.style(style)
148-
.build()
149-
.unwrap()
145+
BigText::builder().lines(lines).style(style).build()
150146
}
151147

152148
/// Renders the splits as a list of lines.

0 commit comments

Comments
 (0)