builders - done

This commit is contained in:
8 changed files with 55 additions and 29 deletions

View File

@@ -1,51 +1,53 @@
use crate::{Device, House, Room};
use std::collections::HashMap;
struct HouseBuilder {
pub struct HouseBuilder {
rooms: HashMap<String, Room>,
}
impl HouseBuilder {
fn new() -> Self {
Self {
rooms: HashMap::new()
}
pub fn new() -> Self {
Self { rooms: HashMap::new() }
}
fn build(self) -> House {
House::new(self.rooms)
}
fn add_room(self, name: &str) -> RoomBuilder {
pub fn add_room(self, name: &str) -> RoomBuilder {
RoomBuilder {
parent: self,
name: name.to_string(),
devices: HashMap::new()
devices: HashMap::new(),
}
}
pub fn build(self) -> House {
House::new(self.rooms)
}
}
struct RoomBuilder {
impl Default for HouseBuilder {
fn default() -> Self {
Self::new()
}
}
pub 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);
pub fn add_device(mut self, name: &str, device: impl Into<Device>) -> Self {
self.devices.insert(name.to_string(), device.into());
self
}
fn add_room(mut self, name: &str) -> RoomBuilder {
pub 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 {
pub fn build(mut self) -> House {
self.parent.rooms.insert(self.name, Room::new(self.devices));
self.parent.build()
}
}