From 43a2323ef797c1558e4c5f58b8a6a01ebb42284f Mon Sep 17 00:00:00 2001 From: Alexander Baranov Date: Fri, 6 Mar 2026 20:34:51 +0300 Subject: [PATCH] builders - savepoint --- smart-house/src/builders.rs | 51 +++++++++++++++++++++++++++++++++++++ smart-house/src/lib.rs | 1 + 2 files changed, 52 insertions(+) create mode 100644 smart-house/src/builders.rs diff --git a/smart-house/src/builders.rs b/smart-house/src/builders.rs new file mode 100644 index 0000000..71e797c --- /dev/null +++ b/smart-house/src/builders.rs @@ -0,0 +1,51 @@ +use crate::{Device, House, Room}; +use std::collections::HashMap; + +struct HouseBuilder { + rooms: HashMap, +} + +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, +} + +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() + } + +} diff --git a/smart-house/src/lib.rs b/smart-house/src/lib.rs index 0171d36..77b82da 100644 --- a/smart-house/src/lib.rs +++ b/smart-house/src/lib.rs @@ -4,6 +4,7 @@ mod house; mod power_socket; #[macro_use] mod room; +mod builders; mod print_status; mod thermometer;