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

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
# методы в трейтах под #[cfg]

Условная компиляция (aka conditional compilation) часто используется в расте, чтобы добавить какой-то функционал только если включена определённая фича. Но есть проблема — в трейтах такое сложно применять т.к. если крейт A реализует твой трейт, но не использует твою фичу, то он отдельно может компилироваться, а с крейтом B, который использует твою фичу — нет т.к. крейт A не реализует требуемую функцию. (я вас не запутал?)

Можно использовать дефолтные реализации, но это путь вникуда. Честно. Никаких unimplemented!(). Пожалуйста.

Настоящее решение проблемы /которое я подсмотрел в serde/ — сделать макрос который с фичей раскрывается то что ему передали, а без — в ничего.

#[cfg(feature = "feature")]
#[macro_export]
macro_rules! if_feature {
($($tt:tt)*) => {
$($tt)*
};
}

#[cfg(not(feature = "feature"))]
#[macro_export]
macro_rules! if_feature {
($($tt:tt)*) => {};
}

Чтобы потом пользователи библиотеки могли легко реализовать твой трейт:

impl Trait for Type {
// ...
lib::if_feature! {
fn uses_feature() {
// ...
}
}
}


#rust #tip
Forwarded from мне не нравится реальность (вафель 🧇🍓)
Поэтому #tip: если у вас используется serde для чего-то внутреннего, добавляйте на все структуры
#[serde(deny_unknown_fields)]
. Так вы быстрее узнаете о опечатках и рассинхронизации в компонентах.
#prog #tip

Встроенное в VS Code расширение для работы с Git очень помогает с ребейзами: показывает сообщение коммита, которое можно тут же и отредактировать, показывает отдельно списки staged changes и unstaged changes, одной кнопкой позволяет перевести отдельный файл из второе в первое, а также предупреждает, если вы пытаетесь застейджить файл с маркерами конфликта слияния (и да, конкретно этот пункт мне уже разок помог).

UPD: предупреждает при попытке застейджить файл с несохранёнными изменениями.
👌11