Skip to content

Commit 921b291

Browse files
committed
Add an example of DisplayModel
Based on the earlier example
1 parent 76514b7 commit 921b291

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

examples/display_model.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//! Anything that implements Display can be wrapped in a DisplayModel.
2+
3+
use std::fs::read_dir;
4+
use std::io;
5+
use std::thread::sleep;
6+
use std::time::Duration;
7+
8+
use nutmeg::models::DisplayModel;
9+
10+
fn main() -> io::Result<()> {
11+
let options = nutmeg::Options::default();
12+
let model = DisplayModel::new(String::new());
13+
let view = nutmeg::View::new(model, options);
14+
for p in read_dir(".")? {
15+
let dir_entry = p?;
16+
view.update(|DisplayModel(message)| *message = dir_entry.path().display().to_string());
17+
sleep(Duration::from_millis(300));
18+
}
19+
Ok(())
20+
}

src/models.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,13 @@ where
287287
#[derive(Debug)]
288288
pub struct DisplayModel<T: Display + Debug>(pub T);
289289

290+
impl<T: Display + Debug> DisplayModel<T> {
291+
/// Construct a new model holding a value implementing `Display`.
292+
pub fn new(value: T) -> DisplayModel<T> {
293+
DisplayModel(value)
294+
}
295+
}
296+
290297
impl<T: Display + Debug> Model for DisplayModel<T> {
291298
fn render(&mut self, _width: usize) -> String {
292299
format!("{}", self.0)

0 commit comments

Comments
 (0)