Advertisement
Guest User

Untitled

a guest
Sep 19th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.71 KB | None | 0 0
  1. #[derive(Debug)]
  2. struct Bar {
  3. x: i16
  4. }
  5.  
  6. struct BarBuilder {
  7. init_x: i16
  8. }
  9.  
  10. impl BarBuilder {
  11. fn inc(&mut self) -> &mut BarBuilder {
  12. self.init_x = self.init_x + 1;
  13. self
  14. }
  15.  
  16. fn build(self) -> Bar {
  17. Bar {x: self.init_x}
  18. }
  19. }
  20.  
  21. #[derive(Debug)]
  22. struct Foo {
  23. bar: Bar
  24. }
  25.  
  26. impl Foo {
  27. fn set_bar<T, F>(&mut self, f: F) -> &mut Foo
  28. where
  29. F: FnOnce(&mut BarBuilder) -> T,
  30. {
  31. let mut bar_builder = BarBuilder { init_x: 1 };
  32. f(&mut bar_builder);
  33. self.bar = bar_builder.build();
  34. self
  35. }
  36. }
  37.  
  38. fn main() {
  39. let mut foo = Foo { bar: Bar { x: 0 }};
  40. let bar = foo.set_bar(|ref mut bar| bar.inc() );
  41. println!("{:?}", bar);
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement