Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #[derive(Debug)]
- enum View<T> {
- Label { text: String },
- Button { text: String, on_click: T },
- VerticalLayout(Vec<View<T>>),
- }
- use View::*;
- fn render<T: std::fmt::Debug>(v: View<T>) -> String {
- let s = match v {
- Label { text } =>
- text,
- Button { text, .. } =>
- format!("[{}]", text),
- VerticalLayout(l) =>
- l.into_iter().map(render).collect::<Vec<String>>().join("\n")
- };
- return s;
- }
- type Model = i32;
- #[derive(Debug)]
- enum Msg {
- Increment,
- Decrement,
- }
- use Msg::*;
- fn view(model: Model) -> View<Msg> {
- return VerticalLayout(vec![
- Button { text: "-".to_string(), on_click: Increment },
- Label { text: model.to_string(), },
- Button { text: "+".to_string(), on_click: Decrement },
- ]);
- }
- fn update(model: Model, msg: Msg) -> Model {
- return match msg {
- Increment =>
- model + 1,
- Decrement =>
- model - 1
- }
- }
- fn main() {
- let m1 = 0;
- let m2 = update(m1, Decrement);
- println!("{}", render(view(m2)));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement