Skip to content

vadych/home-work-rust-otus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 

Repository files navigation

Описание

Репозиторий содержит выполненные ДЗ на курсе OTUS Rust Developer. Professional. Номера ДЗ идут по порядку, в скобках номер урока, в котором оно было задано

ДЗ - 1(3) Заготовка для библиотеки "Умный дом"

Цель

Создадите заготовку для библиотеки «Умный дом» и напишите пример, демонстрирующий её функционал.

Описание/Пошаговая инструкция выполнения домашнего задания:

Библиотека и пример использования реализованы в одном package.

Для библиотеки:

  • Реализована в виде lib крейта.
  • Опишите тип: умный термометр. Тип должен предоставлять следующий функционал:
    • Конструктор, принимающий значения полей.
    • Возвращать значение текущей температуры (произвольное число).
  • Опишите тип: умная розетка. Тип должен предоставлять следующий функционал:
    • Конструктор, принимающий значения полей.
    • Включение/выключение + возможность узнать текущее состояние.
    • Возвращать текущую мощность: если выключено — ноль, иначе произвольное число.
  • Опишите тип: умное устройство. Тип должен содержать одно из устройств (умный термометр или розетку) и предоставлять следующий функционал:
    • Выводить в стандартный вывод сообщение о состоянии устройства.
  • Опишите тип: комната, содержащая массив умных устройств. Тип должен предоставлять следующий функционал:
    • Конструктор, принимающий массив устройств.
    • Можно получить ссылку на устройство по указанному индексу.
    • Можно получить мутабельную ссылку на устройство по указанному индексу.
    • Выводить в стандартный вывод отчёт о всех устройствах в комнате.
  • Опишите тип: умный дом, содержащий массив комнат. Тип должен предоставлять следующий функционал:
    • Конструктор, принимающий массив комнат.
    • Можно получить ссылку на комнату по указанному индексу.
    • Можно получить мутабельную ссылку на комнату по указанному индексу.
    • Выводить в стандартный вывод отчёт о всех комнатах.
  • Размеры массивов можно выбрать произвольно.
  • В случае, если указан индекс, выходящий за пределы массива, приложение должно аварийно завершаться (макрос panic!()).

Для примера использования:

  • Реализована в виде bin крейта.
  • Создайте экземпляр умного дома и выведете отчёт о его содержимом.
  • Для уже созданного экземпляра дома выключите умную розетку в одной из комнат. Снова выведите отчёт.

Критерии оценки:

  • Package успешно собирается.
  • Приложение-пример успешно выполняется и выводит отчёт о доме.
  • Команды cargo clippy и cargo fmt --check не выводят ошибок и предупреждений.
  • Присутствуют и успешно выполняются модульные тесты.

ДЗ - 2(8) Дорабатываем умный дом

Цель:

Дорабатываем функционал умного дома, используя возможности стандартной библиотеки.

Описание/Пошаговая инструкция выполнения домашнего задания:

  • Добавить обработку ошибок:
    • Заменить паники на возврат Option в методах получения комнаты по ключу.
    • Заменить паники на возврат Option в методах получения устройства по ключу.
  • Доработать хранение объектов:
    • Заменить массивы устройств и комнат на ассоциативные коллекции из std. В качестве ключей использовать строки.
    • Реализовать трейт Debug на всех типах.
    • Добавить возможность динамически добавлять/удалять устройства в комнату.
    • Добавить возможность динамически добавлять/удалять комнату в дом.
    • Добавить в тип умного дома метод, позволяющий сразу получить ссылку на умное устройство. Метод принимает имя комнаты и имя устройства. В случае, если устройство или комната не найдены, возвращать тип ошибки, сообщающий, что именно произошло. Тип ошибки должен реализовывать трейт std::error::Error.
    • Добавить реализации трейта From, позволяющие преобразовывать объекты умной розетки и умного термометра в объект умного устройства.
    • Написать макрос для упрощенного создания комнаты, принимающий пары вида (ключ, объект умной розетки) или (ключ, объект умного термометра) и возвращающий объект комнаты, содержащей все перечисленные устройства с соответствующими ключами.
  • Доработать формирование отчёта:
    • Вынести метод формирования отчёта в трейт и реализовать его на всех типах, которые возвращают отчёт: умное устройство, комната, дом.
    • Привести тесты в соответствие с новым функционалом.
  • Доработать приложение-пример:
    • Продемонстрировать возможность динамического добавления/удаления комнат.
    • Продемонстрировать возможность динамического добавления/удаления устройств.
    • Добавить функцию, которая принимает любой объект, умеющий выводить отчёт. Вывести с её помощью отчёты о доме, отдельной комнате, отдельном устройстве.
    • Продемонстрировать возможность обработки ошибок.

Критерии оценки:

  • Package успешно собирается.
  • Приложение-пример успешно выполняется и выводит отчёт о доме.
  • Команды cargo clippy и cargo fmt --check не выводят ошибок и предупреждений.
  • Присутствуют и успешно выполняются модульные тесты.

ДЗ - 3(15) Дорабатываем умные устройства

Цель

Описать для умной розетки и умного термометра логику взаимодействия с удалённым устройством и написать имитаторы устройств для тестирования.

Описание/Пошаговая инструкция выполнения домашнего задания:

  • Для типа умной розетки:
    • Функционал не изменяется: включение/выключение + запрос мощности.
    • Взаимодействие организовано синхронно, через TCP.
    • Розетка может использовать как реальный TCP-обмен, так и имитировать реальную работу (для тестов).
  • Для имитатора умной розетки:
    • Читает адрес для приёма TCP-соединений из аргументов командной строки.
    • Реализован с использованием неблокирующего сетевого взаимодействия.
    • Хранит состояние розетки.
    • Позволяет управлять розеткой множеству клиентов одновременно.
  • Для умного термометра:
    • Функционал не изменяется: возвращает температуру.
    • Получает значения температуры в виде UDP-пакетов в параллельном потоке.
    • Параллельный поток запускается при создании объекта термометра и завершается при уничтожении этого объекта.
    • Объект термометра возвращает последнее полученное значение температуры.
    • Термометр может имитировать удалённое получение данных о температуре (для тестов).
  • Для имитатора умного термометра:
    • Реализован с использованием неблокирующего сетевого взаимодействия.
    • Читает адрес для отправки UDP-пакетов и временной период отправки из файла.
    • Отправляет произвольное значение температуры на указанный адрес с указанной периодичностью.
  • Добавлен дополнительный пример умного дома с розетками и термометрами, которые работают с имитаторами. Данный пример должен запускаться и:
    • Выводить отчёт о состоянии дома, если имитаторы запущены.
    • Сообщать об ошибке, если устройству не удалось получить данные.

Критерии оценки:

  • Package успешно собирается.
  • Приложение-пример успешно выполняется.
  • Команды cargo clippy и cargo fmt --check не выводят ошибок и предупреждений.
  • Присутствуют и успешно выполняются модульные тесты.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages