инструкция вида
#myvar " abc #myvar2 " #muvar3, чтобы получилась строка с подстановкой из #myvar2.
И как можно отключить выделение строк с помощью \"\"?
Мне нужно получить $1, но quote::quote!($#num) раскрывается в $ \"2\" для строки и в $ 2usize для числа
Ты читал, что я тебе в прошлый раз ответил?
Да, спасибо. Я починил вывод добавив 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
В идентификаторе разве бывают ::?
А как тогда? Яж не говорю, что так надо. Я спрашиваю, каясь в незнании.
https://docs.rs/syn/1.0.65/syn/struct.Path.html
let table_name_ident = quote!{ #model :: TABLE_NAME }; вроде тоже работает
репорт скинь с ICE на гитхаб, как они просят в описании ошибки
Прикол в том, что оно падает уже в вызывающем коде, а не при компиляции макроса. Попытаться вырезать MRE из моего кода?
Ты уверен, что именно ICE? скинь ошибку, у меня просто thread 'main' panicked at '"bobby::TABLE_NAME" is not a valid Ident
https://gist.github.com/ShagonRU/2b04a9c90fb87d7e82e86a08db8e8533
Я проверю как разберёмся с ICE. А что делать с нехваткой двойных кавычек? Мне нужно по одной кавычке в разные места доставить :(
let _: String = format!("select * from {}", quote!{#a :: #b})
Сделал так: 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) юзать, а не к строке приводить.
Оно просто клеит строки или делает это с проверкой того, что ты клеишь? Так то ты sqli собираешь без этого
Я не проверяю, в моём крейте везде импортированы нужные штуки, по крайней мере процмакрос строится на таком предположении :)
Обсуждают сегодня