Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #[derive(Debug)]
- struct Bar {
- x: i16
- }
- struct BarBuilder {
- init_x: i16
- }
- impl BarBuilder {
- fn inc(&mut self) -> &mut BarBuilder {
- self.init_x = self.init_x + 1;
- self
- }
- fn build(self) -> Bar {
- Bar {x: self.init_x}
- }
- }
- #[derive(Debug)]
- struct Foo {
- bar: Bar
- }
- impl Foo {
- fn set_bar<T, F>(&mut self, f: F) -> &mut Foo
- where
- F: FnOnce(&mut BarBuilder) -> T,
- {
- let mut bar_builder = BarBuilder { init_x: 1 };
- f(&mut bar_builder);
- self.bar = bar_builder.build();
- self
- }
- }
- fn main() {
- let mut foo = Foo { bar: Bar { x: 0 }};
- let bar = foo.set_bar(|ref mut bar| bar.inc() );
- println!("{:?}", bar);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement