1.83K subscribers
3.31K photos
132 videos
15 files
3.58K links
Блог со звёздочкой.

Много репостов, немножко программирования.

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Forwarded from Pragmatic Programmer (Nikita Bishōnen)
Я противник того, чтобы доходить до максимума в вопросах копирования кода. Неверная абстракция обычно намного дороже чем копи паста. Однако есть моменты, которые хочется оптимизировать. Например трассировка вызовов методов и их инструментация.

Для этого я пользуюсь instrument атрибутом от tracing библиотеки. Каждая важная функция имеет плашечку инагента :


#[instrument(err(Debug), skip(executor), ret, level = "trace")]
fn insert(...) -> Result<...> { ...


Но есть проблема, каждый раз писать схожие аннотации, вспоминая точный синтаксис, это бывает утомительно и точно непродуктивно. Как же я был сегодня рад найти молодую утилиту для моего #toolkitattr_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. Очень котирую и всем советую. Дай бог поменьше зависимостей, да будут мои билды быстрыми, аминь 🧎🤲
🔥5🤔5🤮1