172 похожих чатов

Каким образом в процмакросе можно получить одну двойную кавычку? Мне нужна

инструкция вида
#myvar " abc #myvar2 " #muvar3, чтобы получилась строка с подстановкой из #myvar2.

И как можно отключить выделение строк с помощью \"\"?
Мне нужно получить $1, но quote::quote!($#num) раскрывается в $ \"2\" для строки и в $ 2usize для числа

15 ответов

6 просмотров

Ты читал, что я тебе в прошлый раз ответил?

George-C. Автор вопроса
Andrey Vlasov
Ты читал, что я тебе в прошлый раз ответил?

Да, спасибо. Я починил вывод добавив to_string(), потом вспомнил , что мне всю строку запроса надо в компайл-тайм собрать (коль есть возможность), но проблема в кавычках. Хочу подставить concatcp, чтобы он ассоциированную константу User::TABLE_NAME подставил куда надо и склеил итоговый запрос. Думаю, проблему со скобами решил с помощью proc_macro2::Group::new(что_мне_надо_окружить_скобками, pm2::Delimiter::Parenthesis), осталась проблема с кавычками (надо их поставить) и неубираемыми кавычками у строк. Мне нужно получить штуку вида User::TABLE_NAME и $1, а получается "User::TABLE_NAME"`и `$ \"1\". Пытался перегнать User::TABLE_NAME в pm2::Ident вот так: let table_name_ident = pm2::Ident::new(&format!("{}::TABLE_NAME", model.to_string()), pm2::Span::call_site()); // model: Ident, там будет название модели - User но ловлю панику и ICE: thread 'rustc' panicked at '`"User::TABLE_NAME"` is not a valid identifier', compiler\rustc_expand\src\proc_macro_server.rs:333:13

George-C. Автор вопроса
Andrey Vlasov
В идентификаторе разве бывают ::?

А как тогда? Яж не говорю, что так надо. Я спрашиваю, каясь в незнании.

George C.
Да, спасибо. Я починил вывод добавив to_string(), ...

let table_name_ident = quote!{ #model :: TABLE_NAME }; вроде тоже работает

George C.
Да, спасибо. Я починил вывод добавив to_string(), ...

репорт скинь с ICE на гитхаб, как они просят в описании ошибки

George-C. Автор вопроса
Lya
репорт скинь с ICE на гитхаб, как они просят в опи...

Прикол в том, что оно падает уже в вызывающем коде, а не при компиляции макроса. Попытаться вырезать MRE из моего кода?

George C.
Прикол в том, что оно падает уже в вызывающем коде...

Ты уверен, что именно ICE? скинь ошибку, у меня просто thread 'main' panicked at '"bobby::TABLE_NAME" is not a valid Ident

George-C. Автор вопроса
Lya
Ты уверен, что именно ICE? скинь ошибку, у меня пр...

https://gist.github.com/ShagonRU/2b04a9c90fb87d7e82e86a08db8e8533

George-C. Автор вопроса
Andrey Vlasov
let table_name_ident = quote!{ #model :: TABLE_NAM...

Я проверю как разберёмся с ICE. А что делать с нехваткой двойных кавычек? Мне нужно по одной кавычке в разные места доставить :(

George-C. Автор вопроса
Andrey Vlasov
let _: String = format!("select * from {}", quote!...

Сделал так: let table_name = quote::quote!{#model :: TABLE_NAME}; let select_from_clause = quote::quote!( "SELECT * FROM ", #table_name, ); Теперь осталась та самая проблема с кавычками. Получается { use $ crate :: shared :: helper_traits :: ChainedArguments as _ ; sqlx :: query_as_with :: < _, User, _ > (concatcp ! ("SELECT * FROM ", User :: TABLE_NAME, login = $ "2" AND email = $ "3"), sqlx :: postgres :: PgArguments :: default() . add_c(login) . add_c(email_var),) . fetch_optional(& mut executor) . await } нужна кавычка перед login и после $ "3", а ещё вот эти паразитные кавычки остались от преобразования числа в строку. UPD: с "паразитными" кавычками разобрался, дурак, надо было pm2::Literal::usize_unsuffixed(p.2) юзать, а не к строке приводить.

George C.
Сделал так: let table_name = quote::quote!{#model ...

Оно просто клеит строки или делает это с проверкой того, что ты клеишь? Так то ты sqli собираешь без этого

George-C. Автор вопроса
Lya
Оно просто клеит строки или делает это с проверкой...

Я не проверяю, в моём крейте везде импортированы нужные штуки, по крайней мере процмакрос строится на таком предположении :)

Похожие вопросы

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
А какие чаты вообще в ходу? Auto aim? И что еше
do you think you're better off alone? А
13
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
Доброе время суток! у меня тут иноды закончились. и понял почему по сути кстит, я периодически очищаю постгрес и сентри контайнер: postgres=# DELETE FROM nodestore_node WHER...
Юсиф Насиров
9
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
Какой дос блять?
007
9
lazarus-3.2.0/gtk, linux патч "имя проекта по умолчанию project1 -> prj" день добрый не нравится "именя проекта по умолчанию" (project1), к.раз приходится переименовывать (н...
livontiy
5
Коллеги, а в чём сейчас хорошо писать на перле, в смысле ide? Пробовал в идее с плагином, подсветка есть, даже какие-то предупреждения есть, но рефакторинга считай нет. Перене...
Дмитрий Петров
9
Карта сайта