1use crate::Style;
6use crate::element::Element;
7use crate::render::RenderChunk;
8
9pub struct Text<'s> {
11 value: &'s str,
12 width: usize,
13}
14
15impl<'s> Text<'s> {
16 pub fn new(value: &'s str) -> Self {
18 Text {
19 value,
20 width: crate::width(value),
21 }
22 }
23}
24
25impl<'s> From<&'s str> for Text<'s> {
26 fn from(value: &'s str) -> Self {
27 Text::new(value)
28 }
29}
30
31impl<'s> Element<'s> for Text<'s> {
32 fn width(&self) -> usize {
33 self.width
34 }
35
36 fn render(&self) -> impl DoubleEndedIterator<Item = RenderChunk<'s>> {
37 std::iter::once(RenderChunk::with_known_width(
38 self.value,
39 self.width,
40 Style::EMPTY,
41 ))
42 }
43}
44
45#[test]
46fn basic() {
47 let element = Text::from("hello");
48 let render: Vec<_> = element.render().collect();
49 assert_eq!(render, ["hello".into()])
50}