Size: a a a

Rust — русскоговорящее сообществo

2020 December 01

AL

Andrey @ozkriff Lesn... in Rust — русскоговорящее сообществo
Про 1 - еще учитывай возможность переименования зависимостей в Cargo.toml
источник

K

Kitsu in Rust — русскоговорящее сообществo
У меня есть некоторый набор типов, каждый из которых имлементит некоторый общий трейт с какими-то своими (для каждого типа) баундами.
Хочу сделать тип сумму, который будет делегировать реализацию трейта вложенному типу с соответствующим баундом. Есть какие-нибудь хелперы для генерации подобного? Боюсь, правда, что все эти типы+impl-trait придется запихивать, но мб есть какое-то элегантное решение
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
Kitsu
У меня есть некоторый набор типов, каждый из которых имлементит некоторый общий трейт с какими-то своими (для каждого типа) баундами.
Хочу сделать тип сумму, который будет делегировать реализацию трейта вложенному типу с соответствующим баундом. Есть какие-нибудь хелперы для генерации подобного? Боюсь, правда, что все эти типы+impl-trait придется запихивать, но мб есть какое-то элегантное решение
Уверен что нет, сам хотел такую штуку
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
Andrey @ozkriff Lesnikóv
Про 1 - еще учитывай возможность переименования зависимостей в Cargo.toml
А что именно нужно учитывать?
источник

K

Kitsu in Rust — русскоговорящее сообществo
Ilya Lakhin
А что именно нужно учитывать?
my_serde = { ..., package = "serde" }
источник

K

Kitsu in Rust — русскоговорящее сообществo
с extern crate x as y видимо аналогичная штука, да?
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
Это к тому, чтобы использовать crate::... вместо имени крейта?
источник

AL

Andrey @ozkriff Lesn... in Rust — русскоговорящее сообществo
Kitsu
с extern crate x as y видимо аналогичная штука, да?
Тут у тебя изначальное имя крейта все еще видно должно быть, насколько помню.
источник

AL

Andrey @ozkriff Lesn... in Rust — русскоговорящее сообществo
Ilya Lakhin
Это к тому, чтобы использовать crate::... вместо имени крейта?
Если это путь из твоего крейта - да, $crate. Если путь из еще какого-то киейта, то $crate не поможет.

В процмакросах вообще жесть - надо Cargo.toml парсить - https://github.com/bkchr/proc-macro-crate 😢
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Ilya Lakhin
Ребята, я правильно понял по макросам, что 1) если я хочу использовать какой-то тип вне правила, я должен прописывать его полный путь каждый раз, то есть я не могу использовать use? 2) все макросы всегда экспортируются относительно крейта, который я создаю, и, в общем, их нельзя сделать "приватными", кроме как объявить в стороннем крейте?
без #[macro_export] ничего не экспортируется
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
Всё понял, спасибо @ozkriff и @WaffleLapkin !
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Kitsu
У меня есть некоторый набор типов, каждый из которых имлементит некоторый общий трейт с какими-то своими (для каждого типа) баундами.
Хочу сделать тип сумму, который будет делегировать реализацию трейта вложенному типу с соответствующим баундом. Есть какие-нибудь хелперы для генерации подобного? Боюсь, правда, что все эти типы+impl-trait придется запихивать, но мб есть какое-то элегантное решение
enum dispatch смотрел?
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Ilya Lakhin
Всё понял, спасибо @ozkriff и @WaffleLapkin !
предвосхищая вопросы: декларативные макросы должны быть объявлены "до" использования и нужен #[macro_use] если они в другом модуле
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
Я вот для enum dispatch фактически макрос и пишу сейчас. Там несколько сложнее, но по сути так.
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
вафель 🧇
предвосхищая вопросы: декларативные макросы должны быть объявлены "до" использования и нужен #[macro_use] если они в другом модуле
ок! :) Любопытно, что макросы, как я понимаю, существуют в глобальном пространстве крейта, но при этом нужен макроюз.
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
Такой ещё вопрос. А ident макро-переменную можно использовать внутри строки-литерала? Или он не проинтерпретирует?
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
"some $foo string"
источник

IL

Ilya Lakhin in Rust — русскоговорящее сообществo
Всё нашел, есть stringify макрос для этих целей.
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Ilya Lakhin
Всё нашел, есть stringify макрос для этих целей.
stringify и concat, да
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Andrey @ozkriff Lesnikóv
Если это путь из твоего крейта - да, $crate. Если путь из еще какого-то киейта, то $crate не поможет.

В процмакросах вообще жесть - надо Cargo.toml парсить - https://github.com/bkchr/proc-macro-crate 😢
Во втором случае $crate::reexport::crate2
источник