Метод source
Метод source возвращает опциональную ссылку
на источник ошибки - ошибку, которая вызвала
текущую ошибку. Он возвращает Some
со ссылкой на источник, если он есть,
и None в противном случае. Параметров
метод не принимает. Метод доступен для типов,
реализующих трейт Error.
Синтаксис
error.source()
Пример
Давайте создадим две ошибки и свяжем их, после чего получим источник:
use std::error::Error;
use std::fmt;
#[derive(Debug)]
struct InnerError;
impl fmt::Display for InnerError
{
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result
{
write!(f, "inner error")
}
}
impl Error for InnerError {}
#[derive(Debug)]
struct OuterError
{
source: InnerError,
}
impl fmt::Display for OuterError
{
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result
{
write!(f, "outer error")
}
}
impl Error for OuterError
{
fn source(&self) -> Option<&(dyn Error + 'static)>
{
Some(&self.source)
}
}
fn main()
{
let err = OuterError { source: InnerError };
let res = err.source();
println!("{:?}", res);
}
Результат выполнения кода:
Some(InnerError)
Пример
Давайте создадим ошибку без источника и получим результат вызова метода:
use std::error::Error;
use std::fmt;
#[derive(Debug)]
struct SimpleError;
impl fmt::Display for SimpleError
{
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result
{
write!(f, "simple error")
}
}
impl Error for SimpleError {}
fn main()
{
let err = SimpleError;
let res = err.source();
println!("{:?}", res);
}
Результат выполнения кода:
None