вот так:
my_macro!(
fn get_download_url(&self, name: &str, expires_in: Option<Duration>) -> Option<String>
)
и генерировал вот такой код:
fn get_download_url(&self, name: &str, expires_in: Option<Duration>) -> Option<String> {
match self {
Adapter::Memory(adapter) => adapter.get_download_url(name, expires_in),
Adapter::S3(adapter) => adapter.get_download_url(name, expires_in),
}
}
Т.е. макросу надо "распарсить" хотя бы имя метода, его аргументы с типами (кроме &self) и тип результата, и просто подставить их в фиксированный шаблон.
Или такое возможно только процедурными макросами сделать?
По идее проблем быть не должно
macro_rules! q { (fn $fn_name:ident $(< $($generic:ident),+ >)? ($(&$(mut)?)? $(self,)? $(arg:ident : $arg_type: ty,)* ) $(-> $ret_type:ty)? ) => {}; }
ты так &mut self не сможешь восстановить
Придётся наверное матчить $(self: $SelfTy:ty)?. (если хочется разных селфов) Писать немного больше, зато работает
А мне и не требуется это, у меня все методы трейта, для имплементации которого мне надо это сделать, используют только &self
Ну тогда просто его и матчить
Обсуждают сегодня