builders - savepoint

This commit is contained in:
2 changed files with 52 additions and 0 deletions

View File

@@ -0,0 +1,51 @@
use crate::{Device, House, Room};
use std::collections::HashMap;
struct HouseBuilder {
rooms: HashMap<String, Room>,
}
impl HouseBuilder {
fn new() -> Self {
Self {
rooms: HashMap::new()
}
}
fn build(self) -> House {
House::new(self.rooms)
}
fn add_room(self, name: &str) -> RoomBuilder {
RoomBuilder {
parent: self,
name: name.to_string(),
devices: HashMap::new()
}
}
}
struct RoomBuilder {
parent: HouseBuilder,
name: String,
devices: HashMap<String, Device>,
}
impl RoomBuilder {
fn add_device(mut self, name: &str, device: Device) -> Self {
self.devices.insert(name.to_string(), device);
self
}
fn add_room(mut self, name: &str) -> RoomBuilder {
self.parent.rooms.insert(self.name, Room::new(self.devices));
self.parent.add_room(name)
}
fn build(mut self) -> House {
self.parent.rooms.insert(self.name, Room::new(self.devices));
self.parent.build()
}
}