I am trying to use the builder pattern in Rust, however I am getting a compilation error.
pub struct DynamicParams {
port: Option<u16>,
}
impl DynamicParams {
pub fn new() -> Self {
DynamicParams { port: None }
}
pub fn port(&mut self, port: u16) -> &mut Self {
self.port = Some(port);
self
}
}
fn main() {
let params = DynamicParams::new().port(1);
}
It's available on play.rust-lang.org.
Error:
error: borrowed value does not live long enough
--> <anon>:17:18
|>
17 |> let params = DynamicParams::new().port(1);
|> ^^^^^^^^^^^^^^^^^^^^ does not live long enough
note: reference must be valid for the block suffix following statement 0 at 17:46...
--> <anon>:17:47
|>
17 |> let params = DynamicParams::new().port(1);
|> ^
note: ...but borrowed value is only valid for the statement at 17:4
--> <anon>:17:5
|>
17 |> let params = DynamicParams::new().port(1);
|> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
help: consider using a `let` binding to increase its lifetime
--> <anon>:17:5
|>
17 |> let params = DynamicParams::new().port(1);
|> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
However as near as I can see, this is very similar to the builder pattern, as described in the Rust book. What's going on? What am I doing wrong?
I'm using Rust 1.11.