iced-pancurses 0.1.2

Toy renderer for iced based on pancurses
Documentation
use iced_native::{Color, Column, Container, Element, Length, Radio, Text};
use iced_pancurses::{PancursesRenderer, Sandbox};

struct MyState {
    selected_color: ExampleColor,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ExampleColor {
    White,
    Yellow,
    Blue,
    Red,
}

impl ExampleColor {
    pub fn as_iced_color(&self) -> Color {
        match self {
            ExampleColor::White => Color::WHITE,
            ExampleColor::Yellow => Color {
                r: 1.,
                g: 1.,
                b: 0.,
                a: 1.,
            },
            ExampleColor::Blue => Color {
                r: 0.,
                g: 0.,
                b: 1.,
                a: 1.,
            },
            ExampleColor::Red => Color {
                r: 1.,
                g: 0.,
                b: 0.,
                a: 1.,
            },
        }
    }
}

impl Sandbox for MyState {
    type Message = MyMessage;

    fn view(&mut self) -> Element<'_, MyMessage, PancursesRenderer> {
        Container::new(
            Column::new()
                .spacing(1)
                .push(
                    Text::new("Colored text")
                        .width(Length::Shrink)
                        .color(self.selected_color.as_iced_color()),
                )
                .push(
                    Column::new()
                        .push(Radio::new(
                            ExampleColor::White,
                            "White",
                            Some(self.selected_color),
                            |_| MyMessage::SelectColor(ExampleColor::White),
                        ))
                        .push(Radio::new(
                            ExampleColor::Yellow,
                            "Yellow",
                            Some(self.selected_color),
                            |_| MyMessage::SelectColor(ExampleColor::Yellow),
                        ))
                        .push(Radio::new(
                            ExampleColor::Blue,
                            "Blue",
                            Some(self.selected_color),
                            |_| MyMessage::SelectColor(ExampleColor::Blue),
                        ))
                        .push(Radio::new(
                            ExampleColor::Red,
                            "Red",
                            Some(self.selected_color),
                            |_| MyMessage::SelectColor(ExampleColor::Red),
                        )),
                ),
        )
        .width(Length::Fill)
        .height(Length::Fill)
        .center_x()
        .center_y()
        .into()
    }

    fn new() -> Self {
        MyState {
            selected_color: ExampleColor::White,
        }
    }

    fn update(&mut self, messages: Vec<MyMessage>) {
        messages.into_iter().for_each(|m| match m {
            MyMessage::SelectColor(c) => self.selected_color = c,
        });
    }
}

#[derive(Debug, Clone, Copy)]
pub enum MyMessage {
    SelectColor(ExampleColor),
}

fn main() {
    MyState::run()
}