ошибки? может практики какие, стандарты? пробовал tracing::error!(), но мне нужно бы доступ к информации о расположении ошибки в файле получить, например чтобы ссылку на гитхаб сгенерить.
struct MyCustomErrorOne {
pub source: MyCustomErrorTwo,
pub file: &'static str,
pub line: u32,
pub column: u32,
}
impl MyCustomErrorOne {
pub fn get_where_was(&self) -> String;//some impl
pub fn get_github_source_link(&self) -> String;//some impl
}
struct MyCustomErrorTwo {
pub source: SomeError,
pub file: &'static str,
pub line: u32,
pub column: u32,
}
impl MyCustomErrorTwo {
pub fn get_where_was(&self) -> String;//some impl
pub fn get_github_source_link(&self) -> String;//some impl
}
pub fn one() -> Result<(), MyCustomErrorOne> {
if let Err(e) = two() {
let err = MyCustomErrorOne {
source: e,
file: file!(),
line: line!(),
column: column!(),
};
println!("{}", err.get_where_was());//тут может быть еще и tracing
println!("{}", err.get_github_source_link());//тут может быть еще и tracing
return Err(err);
}
Ok(())
}
pub fn two() -> Result<(), MyCustomErrorTwo> {
if let Err(e) = some_lib_fn_two() {
let err = MyCustomErrorTwo {
source: e,
file: file!(),
line: line!(),
column: column!(),
};
println!("{}", err.get_where_was());//тут может быть еще и tracing
println!("{}", err.get_github_source_link());//тут может быть еще и tracing
return Err(err);
}
Ok(())
}
https://stackoverflow.com/questions/61810740/log-source-file-and-line-numbers
используя этот вариант на сколько я понимаю у меня будет два вывода логов об ошибке - из функции two и из функции one. что использовать если мне нужно выводить оригинальную ошибку из функции two без вызова логов из функции one? например вот такой пример из node.js ./some_file.ts:29:13 14:55:26 18.07.22 Error: ENOENT: no such file or directory, open '/service-worker.js' at Object.openSync (fs.js:457:3) at Object.readFileSync (fs.js:359:35) т.е оригинальная ошибка + stack trace. Написал кое что подобное на расте. но на это ушло куча времени. думал через процедурный макрос над структурой\энумом ошибки сделать(кастомизированный display, методы получения файла линии дочерней ошибки и тд). Ищу альтернативу
Обсуждают сегодня