В коде Rust может быть множество представлений ошибок, но в стандартной библиотеке есть универсальный типаж std::error::Error
для описания любых ошибок.
С помощью умного указателя Box
, можно использовать тип Box<dyn std::error::Error>
в качестве общего типа для возвращения ошибки, потому что он позволяет распространять вверх (propagate up) ошибку, хранящуюся в куче, по стеку вызова и взаимодействовать с ней на более высоких уровнях кода, без необходимости знать конкретный тип ошибки.
Ранее в Tour of Rust мы изучили, что функция main
может возвращать ошибку. Теперь можно возвращать тип, имеющий возможность описать почти любой вид ошибки, которая могла бы произойти в программе, при условии что представляющая нашу ошибку структура реализует общий типаж std::error::Error
из Rust.
fn main() -> Result<(), Box<dyn std::error::Error>>