builders - savepoint
This commit is contained in:
51
smart-house/src/builders.rs
Normal file
51
smart-house/src/builders.rs
Normal 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()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ mod house;
|
|||||||
mod power_socket;
|
mod power_socket;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
mod room;
|
mod room;
|
||||||
|
mod builders;
|
||||||
mod print_status;
|
mod print_status;
|
||||||
mod thermometer;
|
mod thermometer;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user