Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.05 KB | None | 0 0
  1. #[derive(Debug)]
  2. enum View<T> {
  3. Label { text: String },
  4. Button { text: String, on_click: T },
  5. VerticalLayout(Vec<View<T>>),
  6. }
  7. use View::*;
  8.  
  9. fn render<T: std::fmt::Debug>(v: View<T>) -> String {
  10. let s = match v {
  11. Label { text } =>
  12. text,
  13. Button { text, .. } =>
  14. format!("[{}]", text),
  15. VerticalLayout(l) =>
  16. l.into_iter().map(render).collect::<Vec<String>>().join("\n")
  17. };
  18. return s;
  19. }
  20.  
  21.  
  22.  
  23. type Model = i32;
  24.  
  25. #[derive(Debug)]
  26. enum Msg {
  27. Increment,
  28. Decrement,
  29. }
  30. use Msg::*;
  31.  
  32. fn view(model: Model) -> View<Msg> {
  33. return VerticalLayout(vec![
  34. Button { text: "-".to_string(), on_click: Increment },
  35. Label { text: model.to_string(), },
  36. Button { text: "+".to_string(), on_click: Decrement },
  37. ]);
  38. }
  39.  
  40. fn update(model: Model, msg: Msg) -> Model {
  41. return match msg {
  42. Increment =>
  43. model + 1,
  44. Decrement =>
  45. model - 1
  46. }
  47. }
  48.  
  49. fn main() {
  50. let m1 = 0;
  51. let m2 = update(m1, Decrement);
  52. println!("{}", render(view(m2)));
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement