-
-
Save rust-play/76dff7177f19ff7e802b1e121865afe4 to your computer and use it in GitHub Desktop.
Code shared from the Rust Playground
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Метка todo - реализовать самостоятельно | |
// ***** Пример библиотеки "Умный дом" со статическим содержимым | |
struct SmartHouse {/* todo: данные умного дома */} | |
impl SmartHouse { | |
fn new() -> Self { | |
todo!("реализовать инициализацию дома") | |
} | |
fn get_rooms(&self) -> [&str; 2] { | |
// Размер возвращаемого массива можно выбрать самостоятельно | |
todo!("список комнат") | |
} | |
fn devices(&self, room: &str) -> [&str; 3] { | |
// Размер возвращаемого массива можно выбрать самостоятельно | |
todo!("список устройств в комнате `room`") | |
} | |
fn create_report( | |
&self, | |
/* todo: принять обобщённый тип предоставляющий информацию об устройствах */ | |
) -> String { | |
todo!("перебор комнат и устройств в них для составления отчёта") | |
} | |
} | |
trait DeviceInfoProvider { | |
// todo: метод, возвращающий состояние устройства по имени комнаты и имени устройства | |
} | |
// ***** Пример использования библиотеки умный дом: | |
// Пользовательские устройства: | |
struct SmartSocket {} | |
struct SmartThermometer {} | |
// Пользовательские поставщики информации об устройствах. | |
// Могут как хранить устройства, так и заимствывать. | |
struct OwningDeviceInfoProvider { | |
socket: SmartSocket, | |
} | |
struct BorrowingDeviceInfoProvider<'a, 'b> { | |
socket: &'a SmartSocket, | |
thermo: &'b SmartThermometer, | |
} | |
// todo: реализация трейта `DeviceInfoProvider` для поставщиков информации | |
fn main() { | |
// Инициализация устройств | |
let socket1 = SmartSocket {}; | |
let socket2 = SmartSocket {}; | |
let thermo = SmartThermometer {}; | |
// Инициализация дома | |
let house = SmartHouse::new(); | |
// Строим отчёт с использованием `OwningDeviceInfoProvider`. | |
let info_provider_1 = OwningDeviceInfoProvider { | |
socket: socket1, | |
}; | |
// todo: после добавления обобщённого аргумента в метод, расскоментировать передачу параметра | |
let report1 = house.create_report(/* &info_provider_1 */); | |
// Строим отчёт с использованием `BorrowingDeviceInfoProvider`. | |
let info_provider_2 = BorrowingDeviceInfoProvider { | |
socket: &socket2, | |
thermo: &thermo, | |
}; | |
// todo: после добавления обобщённого аргумента в метод, расскоментировать передачу параметра | |
let report2 = house.create_report(/* &info_provider_2 */); | |
// Выводим отчёты на экран: | |
println!("Report #1: {report1}"); | |
println!("Report #2: {report2}"); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment