Назад к задачам
Junior — Senior
9

Создание собственного типа Result

Компании, где спрашивали:

SelectySelecty
Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

В задаче требуется разработать собственный тип Result, который будет использоваться для передачи результата выполнения функции вместе с информацией об ошибке. Реализуйте структуру Result<T, E>, где T – тип данных в случае успеха, а E – тип ошибки. Предусмотрите методы для создания успешного результата и результата с ошибкой, а также методы для проверки состояния и получения вложенных значений.

Требования:

  • Определите обобщённую структуру Result<T, E>.
  • Реализуйте конструкторы ok(value: T) -> Result<T, E> и err(error: E) -> Result<T, E>.
  • Добавьте методы is_ok() -> bool, is_err() -> bool.
  • Реализуйте методы unwrap() -> T (выбрасывает паника при ошибке) и unwrap_err() -> E (выбрасывает паника при успехе).
  • По желанию можно добавить методы map, map_err и прочие удобные функции.

Пример использования (можно изменить названия переменных, но код оставьте без изменений):

let success: Result<i32, &str> = Result::ok(42);
let failure: Result<i32, &str> = Result::err("error occurred");

assert!(success.is_ok());
assert!(!failure.is_ok());

let value = success.unwrap();
let err_msg = failure.unwrap_err();

Задача подходит для оценки умения работать с обобщениями, паттернами обработки ошибок и базовых принципов проектирования API.