Forwarded from Pragmatic Programmer (Nikita Bishōnen)
Я противник того, чтобы доходить до максимума в вопросах копирования кода. Неверная абстракция обычно намного дороже чем копи паста. Однако есть моменты, которые хочется оптимизировать. Например трассировка вызовов методов и их инструментация.
Для этого я пользуюсь instrument атрибутом от tracing библиотеки. Каждая важная функция имеет плашечкуинагента :
Но есть проблема, каждый раз писать схожие аннотации, вспоминая точный синтаксис, это бывает утомительно и точно непродуктивно. Как же я был сегодня рад найти молодую утилиту для моего #toolkit — attr_alias.
Как же её готовить? Создавайте файл
Далее — идём в код и используем его:
Вуаля, теперь я могу использовать маленький алиас вместо грузного объявления всего, что мне нужно.
А ещё у этой утилиты нет зависимостей, кроме стандартной библиотеки Rust. Очень котирую и всем советую. Дай бог поменьше зависимостей, да будут мои билды быстрыми, аминь 🧎🤲
Для этого я пользуюсь instrument атрибутом от tracing библиотеки. Каждая важная функция имеет плашечку
#[instrument(err(Debug), skip(executor), ret, level = "trace")]
fn insert(...) -> Result<...> { ...
Но есть проблема, каждый раз писать схожие аннотации, вспоминая точный синтаксис, это бывает утомительно и точно непродуктивно. Как же я был сегодня рад найти молодую утилиту для моего #toolkit — attr_alias.
Как же её готовить? Создавайте файл
src/attr-aliases.txt
(даже если у вас workspace — я думаю скоро я или автор поправим это) и пишите в нём алиас, я написал: *db_instrument=instrument(err(Debug), skip(executor), ret, level = "trace")
Далее — идём в код и используем его:
#[attr_alias(db_instrument)]
pub async fn select_...<'a, E>(...: &str, executor: E) -> Result<...>
Вуаля, теперь я могу использовать маленький алиас вместо грузного объявления всего, что мне нужно.
А ещё у этой утилиты нет зависимостей, кроме стандартной библиотеки Rust. Очень котирую и всем советую. Дай бог поменьше зависимостей, да будут мои билды быстрыми, аминь 🧎🤲
docs.rs
instrument in tracing_attributes - Rust
Instruments a function to create and enter a `tracing` span every time the function is called.
🔥5🤔5🤮1