Sebekerga / native_api_1c

Crate for simple implementation of Component for Native API 1C:Enterprise written in rust
https://crates.io/crates/native_api_1c
62 stars 13 forks source link

Добавить обработку ошибок #16

Open igostv opened 10 months ago

igostv commented 10 months ago

https://github.com/Sebekerga/native_api_1c/blob/86eb16bce58a58aa35a24cf70679e5fa8d434a05/native_api_1c_macro/src/gen_functions.rs#L308

Предлагаю, как-то сделать опциональным передачу имени функции для регистрации ошибки, или жестко зашить.

let Ok(call_result) = call_result else { self.set_last_error(call_result.unwrap_err()); return false; };

Пример реализации set_last_error и get_last_error:

fn set_last_error(&mut self, last_error: Box<dyn Error>) {
   self.last_error = last_error.to_string();
}

fn get_last_error(&self) -> String {
    self.last_error.clone()
}

get_last_error - используется для получения текста ошибки в 1С

Sebekerga commented 10 months ago

Сам давно думаю про это, хорошее предложение! Единственное, а нужно ли нам добавлять новые функции к trait AddInWrapper? Ведь мы просто можем добавить функции компоненты, а текст ошибки хранить непосредственно в "памяти 1С". То есть выделить какой-то ErrorMessageBuffer при инициализации компоненты, и просто хранить указатель на этот буффер.

igostv commented 9 months ago

Я не совсем "сварщик" )), но, думаю, необходимые мне методы я смогу в любом случае реализовать, и из того же ErrorMessageBuffer вернуть данные.

Sebekerga commented 9 months ago

https://github.com/Sebekerga/native_api_1c/blob/23d317d3c8f78f6ce9999fc04f584fa5e27150e5/native_api_1c_macro/src/derive_addin/functions/collectors/call_as_func.rs#L25-L51

Как я вижу, просто вот здесь описать функцию.

Я там прибрал очень хорошо код генерации дерайва, должно быть попроще :)