How to Use the Builder Pattern in Rust

Implement the Builder Pattern in Rust by creating a separate builder struct with setter methods that return self, culminating in a build method that constructs the final object.

The Builder Pattern in Rust is implemented by defining a struct with private fields and a separate builder struct that exposes setter methods to configure those fields before calling a build() method.

struct Server {
    port: u16,
    host: String,
}

struct ServerBuilder {
    port: u16,
    host: String,
}

impl ServerBuilder {
    fn new() -> Self {
        ServerBuilder { port: 8080, host: "127.0.0.1".to_string() }
    }

    fn port(mut self, port: u16) -> Self {
        self.port = port;
        self
    }

    fn host(mut self, host: String) -> Self {
        self.host = host;
        self
    }

    fn build(self) -> Server {
        Server { port: self.port, host: self.host }
    }
}

fn main() {
    let server = ServerBuilder::new()
        .port(7878)
        .host("127.0.0.1".to_string())
        .build();
}